Шаг 17.
Вкладка Standard. Компонент TActionList

    На этом шаге мы рассмотрим компонент TActionList

    Компонент TActionList (Список действий) позволяет объединить все реакции на действия пользователя (события) в одном месте, что повышает эффективность проектирования. В списке действий перечисляются все действия, которые должны выполняться, и затем эти действия связываются с клиентскими элементами управления, для чего используется свойство Action элемента управления. Если элемент управления подключен к списку действий, то реакция на событие будет такая, как описано в соответствующем обработчике события списка действий.

    Для создания обработчика события списка действий поместите компонент TActionList в форму и дважды щелкните на нем, при этом откроется редактор списка действий (рис. 1), где и вводятся необходимые обработчики событий, впоследствии связываемые с соответствующими компонентами.


Рис.1.Редактор списка действий

   

    Как связывается действие и компонент с помощью инспектора объектов, показано на рис. 2.


Рис.2.Связывание обработчика события с элементом управления в инспекторе объектов

   

    Рассмотрим свойства компонента TActionList.

   
Таблица 1. Свойства компонента TActionList
Свойство Описание
property ActionCount: Integer; Содержит количество определенных в компоненте действий (только для чтения)
property Actions [Index: Integer]: TContainedAction; Позволяет программе обратиться к нужному действию (объекту класса TContainedAction)
property Images: TCustomImageList; Содержит имя компонента класса TImageList

    Редактор компонента создает объекты класса TAction. Свойства класса TAction, в основном, определяют те значения, которые будут иметь одноименные свойства всех компонентов или команд меню, связанных общим действием (если, разумеется, компонент или команда меню имеет данное свойство).

    Свойства класса TAction перечислены в таблице.

   
Таблица 1. Свойства класса 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:

   
Таблица 1. События класса 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.
Текст этого примера можно взять здесь.




Предыдущий шаг Содержание