На этом шаге мы рассмотрим компонент TActionList
Компонент TActionList (Список действий) позволяет объединить все реакции на действия пользователя (события) в одном месте, что повышает эффективность проектирования. В списке действий перечисляются все действия, которые должны выполняться, и затем эти действия связываются с клиентскими элементами управления, для чего используется свойство Action элемента управления. Если элемент управления подключен к списку действий, то реакция на событие будет такая, как описано в соответствующем обработчике события списка действий.
Для создания обработчика события списка действий поместите компонент TActionList в форму и дважды щелкните на нем, при этом откроется редактор списка действий (рис. 1), где и вводятся необходимые обработчики событий, впоследствии связываемые с соответствующими компонентами.
Рис.1.Редактор списка действий
Как связывается действие и компонент с помощью инспектора объектов, показано на рис. 2.
Рис.2.Связывание обработчика события с элементом управления в инспекторе объектов
Рассмотрим свойства компонента TActionList.
Свойство | Описание |
---|---|
property ActionCount: Integer; | Содержит количество определенных в компоненте действий (только для чтения) |
property Actions [Index: Integer]: TContainedAction; | Позволяет программе обратиться к нужному действию (объекту класса TContainedAction) |
property Images: TCustomImageList; | Содержит имя компонента класса TImageList |
Редактор компонента создает объекты класса TAction. Свойства класса TAction, в основном, определяют те значения, которые будут иметь одноименные свойства всех компонентов или команд меню, связанных общим действием (если, разумеется, компонент или команда меню имеет данное свойство).
Свойства класса TAction перечислены в таблице.
Свойство | Описание |
---|---|
property Caption: String; | Содержит строку, которая будет устанавливаться в свойствах Caption всех компонентов, связанных данным действием |
property Checked: Boolean; | Содержит значение, которое будет устанавливаться в свойствах Checked |
property DisableIfNoHandler: Boolean; | Указывает, будут ли недоступны связанные компоненты, если для действия не определен обработчик OnExecute |
property Enabled: Boolean; | Содержит значение, которое будет устанавливаться в свойствах Enabled |
property HelpContext: THelpContext; | Содержит значение, которое будет устанавливаться в свойствах HelpContext |
property Hint: String; | Содержит строку, которая будет устанавливаться в свойствах Hint |
property ImageIndex: Integer; | Содержит индекс изображения в хранилище, указанном в свойстве Images компонента. Это изображение будет связанно с компонентом данного действия |
property ShortCut: TShortCut; | Содержит значение, которое будет устанавливаться в свойствах ShortCut |
property Visible: Boolean; | Содержит значение, которое будет устанавливаться в свойствах Visible |
События класса TAction:
Событие | Описание |
---|---|
property OnExecute: TNotifyEvent; | Возникает при щелчке мышью на одном из компонентов, связанных общим действием. Обработчик этого события должен реализовать нужное действие |
THintEvent = procedure (var HintStr: String; var CanShow: Boolean) of Object; property OnHint: THintEvent; |
Возникает при помещении указателя мыши на одном из связанных общим действием компонентов. Его обработчик по умолчанию выводит оперативную подсказку со строкой HintStr |
property OnUpdate: TNotifyEvent; | Возникает, когда очередь сообщений для приложения пуста или когда обновляется содержимое списка действий |
Приведем небольшой пример программы, которая показывает использование списка действий.
Поместим на форму следующие компоненты: Memo1, Button1, Button2, Button3, ActionList1. Свяжем действие и компонент с помощью инспектора объектов, как показано на рис. 2. Для компонента Action1 создадим следующий обработчик:
procedure TForm1.Action1Execute (Sender: TObject); begin Memo1.Lines.Add ('Нажата кнопка 1'); end;
Для компонента Action2 создадим следующий обработчик:
procedure TForm1.Action2Execute (Sender: TObject); begin Memo1.Lines.Add ('Нажата кнопка 2'); end;
Для компонента Action3 создадим следующий обработчик:
procedure TForm1.Action3Execute (Sender: TObject); begin Memo1.Lines.Add ('Нажата кнопка 3'); end;
Если вы все сделали правильно, то у вас должно получиться следующее:
Рис.3.Использование списка действий
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ActnList, StdCtrls; type TForm1 = class(TForm) ActionList1: TActionList; Button1: TButton; Button2: TButton; Button3: TButton; Action1: TAction; Action2: TAction; Action3: TAction; Memo1: TMemo; procedure Action1Execute (Sender: TObject); procedure Action2Execute (Sender: TObject); procedure Action3Execute (Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Action1Execute (Sender: TObject); begin Memo1.Lines.Add ('Нажата кнопка 1'); end; procedure TForm1.Action2Execute (Sender: TObject); begin Memo1.Lines.Add ('Нажата кнопка 2'); end; procedure TForm1.Action3Execute (Sender: TObject); begin Memo1.Lines.Add ('Нажата кнопка 3'); end; end.