Delphi: ActionList против ActionManager | Советы инженера
администратор
ActionList — более старый и простой контейнер действий.
Компонент ActionManager , изначально представленный в Delphi 6, имеет дополнительные параметры, позволяющие создавать и управлять пользовательским интерфейсом для действий. Помимо набора действий, у ActionManager есть набор панелей инструментов и привязанных к ним меню. Компоненты этой архитектуры включают в себя, помимо самого компонента ActionManager, 9Элемент управления 0009 ActionMainMenuBar , элемент управления ActionToolBar , компонент PopupActionBar и компонент CustomizeDlg , которые позволяют конечным пользователям настраивать пользовательский интерфейс.
Нравится:
Нравится Загрузка. ..
Категории: Delphi/Pascal, Программирование Искать:Vultr Cloud VPS и выделенные серверы
Высокопроизводительное хранилище SSDНачните бесплатно с кредитами в размере 100 долларов США
Если у вас есть вопросы, свяжитесь со мной!
- Бизнес (15)
- База данных (40)
- MySQL/MariaDB (26)
- NoSQL (1)
- Оракул (3)
- SQL (14)
- Электроника (106)
- ПЛИС (5)
- Машиностроение (16)
- Английский (44)
- Игры (12)
- Общий (1)
- Юмор (99)
- Сеть/Интернет (161)
- Операционные системы (222)
- Андроид (2)
- ДОС (5)
- GNU/Linux (104)
- Mac OS (10)
- Окна (121)
- Программирование (504)
- С/С++/С# (10)
- Дельфи/Паскаль (349)
- HTML и CSS (22)
- Javascript (20)
- МАТЛАБ (6)
- OpenGL (1)
- филиппинских песо (54)
- Питон (6)
- Visual Basic (3)
- Xкод (2)
- Научные материалы (23)
- Искусственный интеллект (8)
- Программное обеспечение (78)
- Фотошоп (14)
- Свяжитесь со мной
- Vultr Обзор
- Фатих Рамазан Чикан
- Код купона Namesilo
- NxNet2
- Тех433
Как программно добавить действия в диспетчер действий в Delphi 2010
спросил
Изменено 10 лет, 1 месяц назад
Просмотрено 3к раз
Я пытаюсь динамически добавлять элементы действий, я могу добавить элемент, и он работает, когда я делаю следующее:
HostActionItem := ActionManager. ActionBars[0].Items[0].Items[2]; НовыйЭлемент := HostAction.Items.Add; НовыйЭлемент.Действие := MyActionToPerform; NewItem.Caption := Описание; НовыйЭлемент.ИндексИзображения := 1; НовыйЭлемент.Тег := 13;
Однако, когда срабатывает метод Execute действия, я пытаюсь получить ActionComponent из объекта Sender следующим образом:
if (Sender is TAction) then тег := (Отправитель как TAction).ActionComponent.Tag;
Но ActionComponent всегда равен нулю. Почему ActionComponent не инициализируется?
- delphi
- delphi-2010
- taction
- tactionmanager
2
короткий ответ:
Вы ожидаете, что TActionClientItem
будет отображаться как ActionComponent
из TAction
. Этого не произойдет, поскольку TActionClientItem
не происходит от
.
более длинный ответ:
Я полагаю, вы добавляете свой элемент в строку меню. Кажется, так задумано, что TAction
, связанный с пунктом меню, не будет поддерживать ActionComponent 9.0181 . Элементы строки меню имеют тип
TActionClientItem
. Это «предмет коллекции», а не «компонент». Следовательно, меню не может заполнить параметр ActionComponent
пунктом меню при вызове метода Execute
ссылки действия выбранного элемента. Если это звучит запутанно, я думаю, приведенные ниже цитаты из источника VCL прояснят ситуацию:
TBasicActionLink.Execute
method:
function Execute(AComponent: TComponent = nil): Boolean; виртуальный;
Переданный компонент назначается FAction.ActionComponent
перед его выполнением.
Как это вызывается из TCustomActionMenuBar.ExecAction
:
FSelelectItem.ActionLink.Execute;
Что касается вопроса в заголовке, я не думаю, что вы делаете что-то неправильно, за исключением установки Caption
и ImageIndex
для TActionClientItem
, поскольку это заголовок TAction
и изображение, которое будет показано.