Перетаскивание имеет много достоинств, однако оно не всегда удобно. Поэтому было бы странно, если бы не было предусмотрено другого способа. Хоть он напрямую и не рекомендован в документации, но в ряде случаев более эффективен.
Рассмотрим работу с дочерними объектами менеджера действий, которые упакованы один в другой, как матрешки.
Итак, щелкнем на свойстве ActionManager на форме и посмотрим на содержимое Инспектора объектов. Внутри него мы обнаружим сразу две "матрешки" — свойство ActionBars содержит коллекцию ссылок на дочерние панели, свойство LinkedActionList может содержать дополнительный список действий, отданных "в управление" данному менеджеру — например, для централизованной установки общих свойств.
Щелкнем на свойстве ActionBars. Появится редактор панелей (рис. 8.7), а в Инспекторе объектов обратим внимание на следующее свойство объекта ActionBars:
property Customizable: Boolean;
Это свойство указывает, может ли коллекция редактироваться во время выполнения.
В коллекции содержатся не сами панели, а их "заместители" — объекты типа TActionBaritem, которые на них указывают. Надпись на рисунке "1-ActionBar -> ActionToolBarl" показывает, что первый элемент коллекции связан с панелью ActionTooiBar2. Вы можете добавлять и удалять элементы этой коллекции, по мере необходимости связывая их через свойство ActionBar с уже существующей панелью.
Рис. 8.7. Редактор коллекции панелей компонента TActionManager
Через Инспектор объектов вы можете изменять внешний вид объектов типа TActionBaritem и соответствующих им панелей.
Свойство
property Color: TColor;
отвечает за фоновый цвет панели. Если вам изменения цвета недостаточно, в качестве фона выберите картинку
property Background: TPicture;
которая будет расположена на панели в соответствии со значением свойства
property BackgroundLayout: TBackgroundLayout;
TBackgroundLayout = (blNormal, blStretch, blTile, blLeftBanner, blRightBanner);
Помимо внешнего вида можно разрешить/запретить перетаскивание панелей и их дочерних элементов. Обратимся к свойству
property ChangesAllowed: TChangesAllowedSet;
TChangesAllowed = (caModify, caMove, caDelete);
TChangesAllowedSet = set of TChangesAllowed;
Множество из трех возможных значений позволяет запретить те или иные нежелательные изменения для дочерних элементов панели. Если в него не включен режим caDelete, то элемент нельзя убирать (перетаскивать) с панели. Если нет режима caMove — нельзя передвигать внутри панели. Наконец, отсутствие режима caModify означает запрет на изменение визуальных свойств (заголовка и т. п.).
Внутри коллекции TActionBaritem спрятаны еще две "матрешки" — свойства items и Contextitems. Оба свойства представляют из себя коллекции объектов, указывающих на действия (класс коллекции TActionCiients, класс элемента коллекции TActiondientitem). Первое свойство указывает непосредственно на дочерние действия, второе — на действия, которые будут показаны в качестве всплывающего меню при нажатии правой кнопки мыши.
У коллекции TActionClients есть заслуживающие особого упоминания свойства.
Свойство
property CaptionOptions: TCaptionOptions;
TCaptionOptions = (coNone, coSelective, coAll);
задает показ/отсутствие заголовков дочерних действий. В случае установки в coNone они не показываются, COAII — показываются все, coSelective — показываются в соответствии со значением showCaption дочернего объекта TActiondientitem. Это свойство можно также установить на первой странице редактора менеджера действий в одноименном выпадающем списке.
Свойство
property Smalllcons: Boolean;
указывает размер значков, соответствующих действиям. По умолчанию установлено в значение True (маленькие значки). Визуально оно доступно через тот же редактор — третья страница, флажок Large Icons.
Свойство
property HideUnused: Boolean;
разрешает скрытие редко используемых действий, описанное в предыдущем разделе. Если вы не хотите пользоваться механизмом скрытия, на третьей странице редактора менеджера действий и диалога TCustomizeDig есть флажок Menu show recent items first. Сбросьте его, и свойства HideUnused у клиентов действий установятся в значение False.
И, наконец, коллекцию можно сделать нередактируемой. Для этого у нее есть свойство Customizable.
Ну вот, мы уже добрались до самой маленькой матрешки — TActiondientitem. Этот объект связывается напрямую с одним действием через свойство Action. Правда в него можно спрятать еще меньшую матрешку — у него также есть свойства items и contextitems. Эти свойства используются при организации многоуровневых меню и меню, выпадающих из кнопок (точнее, псевдокнопок — напомним, объекты TActiondientitem на панелях не являются ни кнопками, ни компонентами вообще).