TActionList. Свойство 'Enabled' у действия в Рантайме.[Реш.]

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

TActionList. Свойство 'Enabled' у действия в Рантайме.[Реш.]

Сообщение OberonAR » 19.12.2012 11:05:03

День добрый всем! С наступающими!

Подскажите пожалуйста. В программе использую 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 раз.
Аватара пользователя
OberonAR
новенький
 
Сообщения: 73
Зарегистрирован: 08.02.2012 11:46:04
Откуда: Краснодарский край

Re: TActionList. Свойство 'Enabled' у действия в Рантайме.

Сообщение Light13 » 19.12.2012 11:18:24

Сделайте приведение типов.

Код: Выделить всё
(ActionList1.Actions[0] as TAction).Enabled := False;
Аватара пользователя
Light13
постоялец
 
Сообщения: 127
Зарегистрирован: 17.07.2009 07:50:10
Откуда: Челябинск

Re: TActionList. Свойство 'Enabled' у действия в Рантайме.

Сообщение OberonAR » 19.12.2012 11:41:50

Спасибо! Заработало.
IF получиться в 2-х словах Then
разъясните в контексте моего примера пожалуйста про приведение типов и почему в данном случае ActionByName('Open_lica') не является TAction-ом?
Else
Ткните в ссылки, где можно почитать про это не углубляясь до самых корней ;
:D
Аватара пользователя
OberonAR
новенький
 
Сообщения: 73
Зарегистрирован: 08.02.2012 11:46:04
Откуда: Краснодарский край

Re: TActionList. Свойство 'Enabled' у действия в Рантайме.

Сообщение zub » 19.12.2012 11:52:05

Я делаю примерно так:
Код: Выделить всё
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
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: TActionList. Свойство 'Enabled' у действия в Рантайме.

Сообщение OberonAR » 19.12.2012 12:14:10

zub писал(а):Погляди определение:
КОД: ВЫДЕЛИТЬ ВСЁ
function ActionByName(const ActionName: string): TContainedAction;

по факту конечно возвращается твой TAction, но задекларирован его предок TContainedAction - поэтому нужно проверять и приводить тип


Спасибо! Немного прояснилось.
Аватара пользователя
OberonAR
новенький
 
Сообщения: 73
Зарегистрирован: 08.02.2012 11:46:04
Откуда: Краснодарский край

Re: TActionList. Свойство 'Enabled' у действия в Рантайме.

Сообщение iskander » 19.12.2012 16:51:01

А чем плохо
Код: Выделить всё
DataModule1.Open_lica.Enabled := False;
? :wink:
iskander
энтузиаст
 
Сообщения: 624
Зарегистрирован: 08.01.2012 18:43:34

Re: TActionList. Свойство 'Enabled' у действия в Рантайме.

Сообщение OberonAR » 20.12.2012 13:10:45

iskander писал(а):А чем плохо
Код: Выделить всё
DataModule1.Open_lica.Enabled := False;
? :wink:


:shock: О, блин. Работает. Хм... Вроде иерархия объектов должна была быть. Или это фича Формы данных?
Аватара пользователя
OberonAR
новенький
 
Сообщения: 73
Зарегистрирован: 08.02.2012 11:46:04
Откуда: Краснодарский край

Re: TActionList. Свойство 'Enabled' у действия в Рантайме.

Сообщение alexey38 » 20.12.2012 14:17:17

OberonAR писал(а):Или это фича Формы данных?

Так все компоненты, расставленные визуально описаны в описании класса формы. Посмотрите на описание этого класса в верху модуля.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: TActionList. Свойство 'Enabled' у действия в Рантайме.

Сообщение OberonAR » 20.12.2012 15:14:21

Ну да... Как всегда, все просто :oops: . Спасибо.
Аватара пользователя
OberonAR
новенький
 
Сообщения: 73
Зарегистрирован: 08.02.2012 11:46:04
Откуда: Краснодарский край


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 249

Рейтинг@Mail.ru
cron