Текущий архив: 2007.07.22;
Скачать: CL | DM;
Вниз
Свой ActionList Найти похожие ветки
← →
Kolan © (2007-04-03 11:46) [0]Здравствуйте,
Есть класс — наследник TAction. У него кроме Execute есть еще методы. Мне надо написать для него ActionList, чтобы можно было в дизайн тайме работать.
Что надо перекрыть в ActionList чтобы подменить тип Action"ов ?
← →
Reindeer Moss Eater © (2007-04-03 11:54) [1]Не получится.
Нужные методы приватны и невиртуальны
← →
Сергей М. © (2007-04-03 11:56) [2]Ничего не надо перекрывать.
см. RegisterActions()
← →
Kolan © (2007-04-03 12:03) [3]> см. RegisterActions()
Те допустим я сделал класс:TMyAction = class(TAction)
published
property OnShow …
end;
1. Как его теперь правильно зарегистрировать используя RegisterActions?
2. Как теперь его создать в дизайн тайме?
← →
Сергей М. © (2007-04-03 12:17) [4]
> 1. Как его теперь правильно зарегистрировать используя
> RegisterActions?
В соответствии с описанием в справке. Что тебе там не понятно ?
> 2. Как теперь его создать в дизайн тайме?
Точно так же, как TAction. Разницы никакой.
← →
Kolan © (2007-04-03 12:22) [5]> Что тебе там не понятно ?
var AClasses: array of TBasicActionClass
Вот тут мой класс, так?[TMyAction]
Resource: TComponentClass
Вообще не поня как этим пользоваться. Для чего это вроде понял…
← →
Kolan © (2007-04-03 12:25) [6]И еще. А где вообще RegisterActions вызывать?
← →
Сергей М. © (2007-04-03 12:26) [7]
> Вот тут мой класс, так? [TMyAction]
Да, так.
> Вообще не поня как этим пользоваться
Ну вот же в справке написано:
The Resource parameter lets you assign default values to the properties of the actions being registered. Resource is the class of a TDataModule descendant that contains instances of the action classes listed by AClasses, where the properties of those instances are set to the default values. This parameter can be set to nil (Delphi) or NULL (C++) if there is no need to assign default values.
Что тут не понятно ?
← →
Kolan © (2007-04-03 12:31) [8]> instances of the action classes listed by AClasses,
Вот это. Ну да ладно, пока без умолчание поразбираюсь.
← →
Сергей М. © (2007-04-03 12:31) [9]
> где вообще RegisterActions вызывать?
В любом месте перед тем как юзер вызовет редактор списка акций
← →
Kolan © (2007-04-03 12:32) [10]Да и где вызывать пока не понял :(
← →
Kolan © (2007-04-03 12:33) [11]> В любом месте перед тем как юзер вызовет редактор списка
> акций
Те в инициализации модуля с моими Экшенами например — понятно.
← →
Сергей М. © (2007-04-03 12:34) [12]
> Те в инициализации модуля
Можно и там
← →
Kolan © (2007-04-03 12:38) [13]
unit KWizzardActions;
interface
uses
Classes, ActnList;
type
TWizzardStepAction = class(TAction)
strict private
FShowEvent: TNotifyEvent;
published
property OnShow: TNotifyEvent read FShowEvent write FShowEvent;
end;
implementation
initialization
RegisterActions("Wizzard", [TWizzardStepAction], nil);
finalization
UnRegisterActions([TWizzardStepAction]);
end.
Грит Invalid Action Registration при запуске приложения.
← →
Сергей М. © (2007-04-03 12:44) [14]
> при запуске приложения
При запуске какого нафих приложения !?)
Ты же о дизайн-тайм речь ведешь ?!
← →
Kolan © (2007-04-03 13:01) [15]> Ты же о дизайн-тайм речь ведешь ?!
Да, точно, забыл :)
← →
Kolan © (2007-04-03 13:03) [16]Получилось — благодарствую, а то бы я такого напридумывал :)
← →
Kolan © (2007-04-03 13:25) [17]Еще вопрос возник.
Если у меня есть компонент сполем TAction, которое он сам и создает.
Те что-то вроде вот этого:TKSoftWareWizzard = class(TActionList)
private
{ Private declarations }
FAction: TAction;
protected
{ Protected declarations }
procedure DoExecute(Sender: TObject);
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
published
{ Published declarations }
property Action: TAction read FAction write FAction;
end;constructor TKSoftWareWizzard.Create(AOwner: TComponent);
begin
inherited;
FAction := TAction.Create(Self);
FAction.OnExecute := DoExecute;
end;
Как теперь сделать так, чтобы можно было на контролы «вешать» этот Action?
Смысл — событие должно обрабатыватьсяTKSoftWareWizzard
.
← →
Сергей М. © (2007-04-03 13:42) [18]Ну и зачем нужен этот TKSoftWareWizzard ?
Чем обычный TActionList не угодил ?
← →
Kolan © (2007-04-03 13:54) [19]> Ну и зачем нужен этот TKSoftWareWizzard ?
Мне нужно чтобы в нем(TKSoftWareWizzard) были экщены(например вперед, назад). Обработчики должны быть внутри TKSoftWareWizzard тк они всегда одинаково обрабытываются, а вот «подцепить» их нужно иметь возможность на любой контрол…
← →
Сергей М. © (2007-04-03 13:57) [20]Ерунда какая-то ...
TActionList - это всего лишь контейнер для произвольных TAction !
← →
Kolan © (2007-04-03 14:02) [21]
TKSoftWareWizzard = class(TComponent)
Вот допустим так.
← →
Сергей М. © (2007-04-03 14:09) [22]А причем здесь TComponent ?
Тебе же нужен наследник TAction ?
← →
Kolan © (2007-04-03 14:19) [23]> Тебе же нужен наследник TAction ?
Так. Про Taction я разобрался. По нему вопросов нет.
Вопрос по другому, из тоже оперы поэтому не завел ветку.
Еще раз.
Есть класс — допустим наследник TComponent:TKSoftWareWizzard = class(TComponent)
У него естьpublished
{ Published declarations }
property Action: TAction read FAction write FAction;
Кидаю его на форму. И кидаю кнопку. Хочу назначить кнопе этот Action, но список доступных Экшенов пусть.
1. Почему?
2. Как сделать желаемое.
← →
Сергей М. © (2007-04-03 14:28) [24]
> 1. Почему?
Потому что на форме должен лежать контейнер - TActionList, в который должна быть добавлена твоя акция.
Читай справку:
To create actions at design time, place an action list component on a form or data module. Double click the action list to bring up the action list editor. Add actions in the editor using its context menu. Once the actions have been added using the action list editor, they appear in the drop-down list for the Action property in the Object Inspector.
← →
Kolan © (2007-04-03 14:37) [25]> Потому что на форме должен лежать контейнер
Ладно.
А 2? :)
← →
Сергей М. © (2007-04-03 14:44) [26]
> А 2?
см. ответ на 1.
← →
Kolan © (2007-04-03 14:49) [27]> см. ответ на 1.
Ответ понятен. Как сделать пока не понял. :( Что-то я не понимаю имхо :(
← →
Сергей М. © (2007-04-03 14:52) [28]
> Kolan © (03.04.07 14:49) [27]
Ты в справку вчитался ?
ЧТО не понятно ?
← →
Kolan © (2007-04-03 15:03) [29]> ЧТО не понятно ?
То что это не совподает с тем что я хочу…
Double click the action list to bring up the action list editor.
Экшенеы созданы уже:FAction := TAction.Create(Self);
FAction.OnExecute := DoExecute;
Мне надо только назначить их.
Пример:
Я делаю Wizzard, наверно это понятно. Визард — потомок TComponet
У визарда(я упрощаю) есть две команды: Вперед, Назад.
Надо иметь возможность:
1. Назначить срабатывание на любой контрол(необязательно конопки, поэтому я выбрал TAction).
2. Сам визард должен обрабатывать события Action"ов.
Почему?
Пример: Сработало «Далее» показал последний зкран Визарда. Action далее вделал невидимым.
Как это следать я не понял…
← →
Сергей М. © (2007-04-03 15:06) [30]
> Экшенеы созданы уже
Да не твоя это задача - создавать экшны !
Это задача контейнера !
← →
Kolan © (2007-04-03 15:12) [31]>
> Да не твоя это задача — создавать экшны !
А так мне наверно надо просто в этом компоненте объявить поле TactionList и создать в нем нужные экшены — шас попробую…
← →
Kolan © (2007-04-03 15:13) [32]Тока как это сделать :(
← →
Сергей М. © (2007-04-03 15:14) [33]
> Kolan © (03.04.07 15:12) [31]
Вот ты затрахал уже со своим компонентом))
Ты справку читал внимательно ?
← →
Сергей М. © (2007-04-03 15:15) [34]Давай уже дуй в "Компоненты" - там ЮЗ тебя вразумит по полной программе, если дирекций не понимаешь.
← →
Kolan © (2007-04-03 15:17) [35]> Вот ты затрахал
Небыло такого, по крайней мере я не помню :)
Ты справку читал внимательно ?
Угу.
> Давай уже дуй в «Компоненты» — там ЮЗ тебя вразумит по полной
> программе, если дирекций не понимаешь.
Угу пошел :)
← →
Сергей М. © (2007-04-03 15:19) [36]
> Ты справку читал внимательно ?
> Угу.
>
На "угу", увы, не похоже.
← →
Kolan © (2007-04-03 15:26) [37]Благодарю в любом случае. :)
← →
имя (2007-04-21 19:22) [38]Удалено модератором
← →
имя (2007-04-23 23:00) [39]Удалено модератором
← →
имя (2007-05-17 08:04) [40]Удалено модератором
← →
имя (2007-05-18 09:24) [41]Удалено модератором
Страницы: 1 2 вся ветка
Текущий архив: 2007.07.22;
Скачать: CL | DM;
Память: 0.57 MB
Время: 0.024 c