Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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 &#133
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
Вообще не поня как этим пользоваться. Для чего это вроде понял&#133


 
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 тк они всегда одинаково обрабытываются, а вот «подцепить» их нужно иметь возможность на любой контрол&#133


 
Сергей М. ©   (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]

> ЧТО не понятно ?

То что это не совподает с тем что я хочу&#133

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 далее вделал невидимым.

Как это следать я не понял&#133


 
Сергей М. ©   (2007-04-03 15:06) [30]


> Экшенеы созданы уже


Да не твоя это задача - создавать экшны !
Это задача контейнера !


 
Kolan ©   (2007-04-03 15:12) [31]

>
> Да не твоя это задача — создавать экшны !

А так мне наверно надо просто в этом компоненте объявить поле TactionList и создать в нем нужные экшены — шас попробую&#133


 
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
2-1182917165
APXiMEd
2007-06-27 08:06
2007.07.22
Несколько простых (для кого-то) вопросов.


3-1176452864
Nike
2007-04-13 12:27
2007.07.22
отображение DBGrid при пустом датасете


15-1182836940
Kolan
2007-06-26 09:49
2007.07.22
Локализация встроенных констант


15-1182778319
Иксик
2007-06-25 17:31
2007.07.22
Альтернатива HTML Help Workshop


15-1182798566
Kolan
2007-06-25 23:09
2007.07.22
Вернуться с D2007 на BDS2006&#133