Чтобы понять, для чего нужен компонент, достаточно внимательно рассмотреть его название, которое можно перевести как список действий. Компонент хранит список действий, которые вы можете использовать в приложении. А зачем они нужны в виде списка?
Допустим, что какое-то событие может вызываться из нескольких мест программы или от разных компонентов. Классический пример — пункт меню и дублирующая кнопка в панели задач. В большинстве программ присутствует панель задач, в которой есть кнопки, дублирующие действия меню. Вы можете и пункту меню и кнопке назначить один и тот же обработчик события, но управлять этим будет все равно не так удобно. Намного лучше будет создать действие Action в списке ActionList и назначить его кнопке и пункту меню.
Давайте создадим пример, который будет использовать действия. Создайте новое приложение и поместите на него компонент ActionList. Обратите внимание, что он выглядит как прямоугольник с иконкой, и такой компонент не будет видимым во время выполнения программы. Список действий и не должен быть виден, поэтому данный класс происходит не от TControl, а от TComponent.
Дважды щелкните по компоненту ActionList, и перед вами откроется редактор действий. Окно разделено на две половины, слева вы можете видеть категории, а справа список действий выбранной категории. На панели инструментов четыре кнопки. Давайте посмотрим, для чего они предназначены, начиная с левой:
- создание нового действия;
- удалить выделенное действие;
- поднять выделенное действие на одну позицию вверх;
- опустить выделенное действие на одну позицию вниз.
Последние две кнопки используются для упорядочивания действий и чисто для эстетических целей.
Итак, создадим новое действие. Для этого можно нажать соответствующую кнопку на панели задач или просто нажать клавишу <Ins>. Выделите созданное действие и посмотрите в объектный инспектор. Здесь у нас есть следующие действия:
- AutoCheck— если это свойство равно истине, то свойство checked будет автоматически переключаться при выполнении действия;
- caption— заголовок действия. Этот заголовок будет копироваться в свойство caption всем компонентам, которым будет назначено данное действие;
- category— категория. Здесь можно выбрать уже существующую или напечатать новое имя для создания новой категории;
- Enabled — доступно ли действие;
- Groupindex— индекс группы. Если у двух действий указан один и тот же индекс группы, т. е. они сгруппированы в одну группу, то при выделении одного действия (свойства checked устанавливаются true) другие действия этой группы сбрасываются (свойства checked устанавливаются false);
- image index— индекс иконки. С иконками мы еще не работали, но пару слов скажу. У самого компонента ActionList есть свойство images, где можно указать список иконок (компонент imagesList). Так вот, назначив действию картинку из этого списка, т. е. указав индекс картинки, она будет появляться на панелях и меню, поддерживающих картинки;
- secondaryshortcut — вторичное сочетание клавиш быстрого вызова;
- shortcut — первичное сочетание клавиш быстрого вызова.
Давайте назовем действие Выход, а на вкладке Events создадим обработчик события onExecute и напишем в нем всего одну строку — вызов метода close ().
Теперь в свойстве shortcut напишите Esc, т. е. горячей клавишей будет клавиша <Esc>. Уже сейчас вы можете запустить программу, нажать <Esc> — и соответствующее событие сработает, и будет вызван метод close (). И это несмотря на то, что действие еще ничему не было назначено.
Теперь попробуем поместить на форму кнопку TButton и в свойстве Action указать имя созданного вами ранее действия. Обратите внимание, что заголовок кнопки автоматически изменится. Обратное действие также работает. Если изменить свойство Caption у действия, то изменится заголовок у всех компонентов, которым назначено действие. Это очень удобно — из одного контейнера действий управлять ими, изменять заголовки, горячие клавиши, обработку сообщения и т. д.