Иллюстрированный самоучитель по Delphi 7 для профессионалов

Стандартные действия. Категории.

Те, кто собирается пропустить этот раздел, считая, что в нем описаны очевидные вещи, сильно ошибаются. Как раз в применении стандартных действий разработчики Borland продвинулись очень сильно. Кто хочет в этом убедиться, может открыть пример WordPad, поставляемый с Delphi 7. Полнофункциональный текстовый редактор, построенный полностью на стандартных действиях, содержит всего две строчки кода.

Шаблоны и заготовки для типовых меню и кнопок появились еще в самой первой версии Delphi. Но в шестой версии действия действительно стали действиями. Это значит, что раньше заготовка содержала только подходящий заголовок. Теперь они содержат в себе все субкомпоненты, весь программный код и делают всю необходимую работу сами.

Возьмем, например, действие TFlieOpen. Оно уже содержит внутри компонент типа TOpenDialog, показывающий список открываемых файлов. Вместо ручного программирования процедуры задания имени файла теперь нужно написать обработчик события TFiieOpen.onAccept (если пользователь ввел в диалоге кнопку ОК) или OnCancel (если отказался от открытия файла). Вот так выглядит весь программный код приложения WordPad:

procedure TForml.FileOpenlAccept(Sender: TObject);
begin
RichEditl.Lines.LoadFromFile
(FileOpenl.Dialog.FileName);
end;
procedure TForml.FileSaveAslAccept(Sender: TObject);
begin
RichEditl.Lines.SaveToFile
(FileSaveAsl.Dialog.FileName);
end;

С точки зрения программирования стандартное действие – это класс-потомок TCustomAction. Классы действий описаны в трех модулях: более распространенные в stdActns, менее – в ExtActns, действия с наборами данных содержатся в DBActns. Наконец, два действия, работающие со списками, – TStaticListAction и TVirtualLitAction – описаны в отдельном модуле ListActns.

Для выполнения ряда стандартных действий нужно определить понятие "цели" действия (Action Target). Под целью понимается компонент, в отношении которого будет совершаться данное действие. Так, операции редактирования могут выполняться, когда на форме активен текстовый элемент управления (TEdit, TMemo и т. п.). У любого действия потомка TBasicAction) есть три метода:

function HandlesTarget(Target: TObject): Boolean; virtual;
procedure UpdateTarget(Target: TObject); virtual;
procedure ExecuteTarget(Target: TObject); virtual;

Метод HandiesTarget проверяет, применимо ли действие к цели Target. Если да, то действие производится вызовом метода ExecuteTarget. Если нет, поиск подходящей цели продолжается.

Цель в Delphi 7 определяется по следующему правилу:

  • первым кандидатом является активный элемент управления на форме (свойство ActiveControl);
  • если такового нет или он не является подходящим (метод HandiesTarget вернул значение False), целью становится текущая форма, получившая сигнал о действии;
  • если и она не подходит, происходит рекурсивный перебор всех компонентов на форме в поисках первого подходящего.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.