TActionList. Свойство 'Enabled' у действия в Рантайме.[Реш.]
Модератор: Модераторы
TActionList. Свойство 'Enabled' у действия в Рантайме.[Реш.]
День добрый всем! С наступающими!
Подскажите пожалуйста. В программе использую ActionList. Захотел по событию деактивировать ('Enabled:=false') все связанные с определенным Action-ом контролы (например пункт меню и SpeedButton). В Дезайнтайме такое свойство у Action-а есть и если в инспекторе объектов у него выставить Enabled в False, то все работает, контролы деактивируются. Но не могу добраться в Рантайме до этого свойства - его просто нет. Пробовал так:
DataModule1.Actions_main.ActionByName('Open_lica').Enabled:=False;
'Enabled' просто нет в списке автоподстановки.
Пробовал так-же через Actions[] - Тоже самое.
Так как же все таки установить это свойство? Или нужный мне результат (деактивация всех контролов, связанных с этим Action-ом) в данном случае делается как-то по другому?
Подскажите пожалуйста. В программе использую ActionList. Захотел по событию деактивировать ('Enabled:=false') все связанные с определенным Action-ом контролы (например пункт меню и SpeedButton). В Дезайнтайме такое свойство у Action-а есть и если в инспекторе объектов у него выставить Enabled в False, то все работает, контролы деактивируются. Но не могу добраться в Рантайме до этого свойства - его просто нет. Пробовал так:
DataModule1.Actions_main.ActionByName('Open_lica').Enabled:=False;
'Enabled' просто нет в списке автоподстановки.
Пробовал так-же через Actions[] - Тоже самое.
Так как же все таки установить это свойство? Или нужный мне результат (деактивация всех контролов, связанных с этим Action-ом) в данном случае делается как-то по другому?
Последний раз редактировалось OberonAR 21.12.2012 11:32:58, всего редактировалось 1 раз.
Спасибо! Заработало.
IF получиться в 2-х словах Then
разъясните в контексте моего примера пожалуйста про приведение типов и почему в данном случае ActionByName('Open_lica') не является TAction-ом?
Else
Ткните в ссылки, где можно почитать про это не углубляясь до самых корней ;

IF получиться в 2-х словах Then
разъясните в контексте моего примера пожалуйста про приведение типов и почему в данном случае ActionByName('Open_lica') не является TAction-ом?
Else
Ткните в ссылки, где можно почитать про это не углубляясь до самых корней ;
Я делаю примерно так:
Также можно автоматом включать\выключать конкретные экшены, а не все сразу в зависимости от конкретной рантайм ситуации.
Погляди определение:
по факту конечно возвращается твой TAction, но задекларирован его предок TContainedAction - поэтому нужно проверять и приводить тип
Код: Выделить всё
MyActions:TActionList;
....
MyActions.OnUpdate:=ActionUpdate;
....
procedure MainForm.ActionUpdate(AAction: TBasicAction; var Handled: Boolean);
begin
if AAction is TAction then
begin
Handled:=true;
if экшенызапрещены then
TAction(AAction).Enabled:=false
else
TAction(AAction).Enabled:=true;
end;
end;Также можно автоматом включать\выключать конкретные экшены, а не все сразу в зависимости от конкретной рантайм ситуации.
Погляди определение:
Код: Выделить всё
function ActionByName(const ActionName: string): TContainedAction;по факту конечно возвращается твой TAction, но задекларирован его предок TContainedAction - поэтому нужно проверять и приводить тип
zub писал(а):Погляди определение:
КОД: ВЫДЕЛИТЬ ВСЁ
function ActionByName(const ActionName: string): TContainedAction;
по факту конечно возвращается твой TAction, но задекларирован его предок TContainedAction - поэтому нужно проверять и приводить тип
Спасибо! Немного прояснилось.
OberonAR писал(а):Или это фича Формы данных?
Так все компоненты, расставленные визуально описаны в описании класса формы. Посмотрите на описание этого класса в верху модуля.
Ну да... Как всегда, все просто
. Спасибо.
