Delphi довідка
Навіщо потрібен TAction?
Потрібні вони для синхронізації властивостей Enable, Checked, ImageIndex, Caption, Hint, OnClick і т.п. різних контролів. Найбільш часто застосовується для кнопок та елементів меню. Сильно полегшує розробку дружніх середовищ, коли до якоїсь дії можна дістатися через кнопку toolbar'а, MainMenu'шку та PopupMenu'шку: 1. Створив Action, проставил св-ва (Caption, Hint, ImageIndex і т.п.) 2. Прописав дію на OnExecute (якщо не лінуватися і задавати нормальні імена Action'ам, то процедури також матимуть нормальні імена) 3. Прописав на TAction.OnUpdate умови для Enabled, Checked і т.п.: procedure TForm1.DBConnectUpdate(Sender: TObject); begin Checked := Database1.Connected; Enabled := (FUserName + FPassword) <> ''; end; 4. Проставив усім компонентам, що активізують цю дію, властивості Action і, якщо треба, ImageList. Без екшинсів тобі довелося б усім контролам проставляти Caption'и, хінти, імагіндекси тощо. Прописувати скрізь, де треба, шматки типу BtnConnect.Enabled := експр PUConnect.Enabled := експр PDConnect.Enabled := експр BtnConnect.Checked:= ін.експр PUConnect.Checked := ін.експр PDConnect.Checked := ін.експр
і стежити за тим, щоб усі кнопки/меню ітеми і т.п. відповідали: користувач зробив зміну, хоче зберегти, а в нього в меню по правій кнопці пункт Save - заборонено. І розкажи йому, що в нього в MainMenu/File/Save - дозволився, а цей - "забув". Далі, можна спокійно "намалювати" цей ActionList з Action'ами, накидати кнопок на один ToolBar, пропрацювати функціональність, а вже потім не напружуючись і не думаючи, де який код вставити, "домальовувати" меню і кнопки. При цьому, коли треба одну кнопку гримнути, а іншу додати -це напружує, т.к. нічого важливого елемент кнопки не містить. Усю інформацію щодо поведінки цієї кнопки містить відповідний Action. Висновок: знижує трудовитрати на розробку інтерфейсу користувача - знижує ймовірність помилки. Накладні витрати оцінити не намагався (вони безумовно є), але думаю, що вони здебільшого не суттєві.