Наконец, современный способ - это воспользоваться компонентом TActionList и разом решить эти проблемы. Как следует из названия, это - централизованное хранилище, где воздействия со стороны пользователя связываются с реакциями на них.

Действием (Action) будем именовать операцию, которую пользователь хочет произвести, воздействуя на элементы интерфейса. Тот компонент, на который он хочет воздействовать, называется целью действия (Action target). Компонент, посредством которого действие инициировано (кнопка, пуню-меню), - клиент действия (Action client). Таким образом, в иерархии классов Delphi действие TAction - это невизуальный компонент, который играет роль "черного ящика", получающего сигнал от одного или нескольких клиентов, выполняющих действия над одной (или разными) целями.

(_Примечание_)

Действия могут работать только будучи объединенными в список компонентов TAction List или TActionManager. Вне этих компонентов применение действий невозможно.

Спроектировав на бумаге пользовательский интерфейс, начните работу с помещения на форму компонента TActionList. Он находится в Палитре компонентов на первой странице Standard (вот видите какое ему уделяется внимание!). После этого следует запустить редактор списка действий двойным щелчком мышью на компоненте или с помощью контекстного меню (рис. 8.1).

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

Программирование в Delphi 7

Рис. 8.1. Внешний вид редактора действий компонента TAction List

Программирование в Delphi 7

Рис. 8.2. Опубликованные свойства объекта TAction

Помимо них можно вставить и обычное действие, которое получит имя Actioni. Итак, что же из себя представляет действие? Его опубликованные свойства показаны на рис. 8.2. Рассмотрим их по группам.

События, связанные с действиями

Компонент TAction реагирует на три события: OnExecute, OnUpdate И OnHint. Первое - и самое главное - должно быть как раз реакцией на данное действие. Это событие возникает в момент нажатия кнопки, пункта меню - короче, при поступлении сигнала от клиента действия. Здесь - как прави-л о - и пишется обработчик. Почему "как правило"? Потому что схема обработки сигнала 4-этапная:

1. Сначала вызывается обработчик события OnExecute списка действий

TActionList:

property CiiExecute: TAct i onEvent ;
TActionEvent = procedure (Acticri: TBasicAction;
var Handled: Boolean) of object;

Если обработчик этого события вами не предусмотрен, или в параметре Handled он вернул значение False, происходит генерация следующего события - шаг 2.

2. Вызывается обработчик события onActionExecute глобального объекта Application (тип события тот же - TActionEvent). Если и оно не обработало сигнал действия, переходим к следующему шагу.

3. Вызывается обработчик события onExecute самого действия (объекта типа TAction или его потомка).

4. Если первые три шага не обработали ситуацию (вернули False), то, вероятно, это было связано с неправильной целью (Target) действия. В качестве "последнего шанса" приложению посылается сообщение cm_actionexecote. В этом случае происходит поиск другой цели для данного действия (обалгоритме поиска цели см. ниже).


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Декабрь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс