Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Вниз

Динамически создать Action в TActionList-e   Найти похожие ветки 

 
Silver... ©   (2005-11-10 23:56) [0]

наверное вопрос банальный :( но не усеку как динамически создать Action-ы в TActionList-e


 
Eraser ©   (2005-11-11 00:40) [1]


> Silver... ©   (10.11.05 23:56)

Creates and initializes a TAction object.

Delphi syntax:

constructor Create(AOwner: TComponent); override;

Description

Applications do not usually create action objects explicitly. Actions are created automatically when you add them to an action manager or action list component at design time. When instantiating TAction at runtime, assign a TActionList or TActionManager component to the new action’s ActionList property after calling Create.

Дуаю просто создать надо экшн.

А вообще
Note: TActionList is intended primarily for managing the actions in cross-platform applications. While it is always possible to maintain the actions for an application using TActionList, it can be simpler to use an action manager instead.


 
Silver... ©   (2005-11-11 01:10) [2]

мне надо реализовать ShortCut-ы для некоторых действий, заранее неизвестно их количество (не много :) )


> Eraser ©   (11.11.05 00:40) [1]


не особо понял :(


 
Silver... ©   (2005-11-11 02:14) [3]

по разному пробовал не выходит :(

мож подругому можно...  [2]


 
tesseract ©   (2005-11-11 10:59) [4]


> мне надо реализовать ShortCut-ы для некоторых действий,
> заранее неизвестно их количество (не много :) )


Тогда проще реализовать перехват клавиатуры.

Или сделай все реакции на действия,  а потом меняй им шоткаты.


 
Игорь Шевченко ©   (2005-11-11 11:17) [5]

   AAction := TAction.Create(Self);
   with AAction do begin
     Name        := ActionNamePrefix + APlugin.ActionInfo.Name;
     Caption     := APlugin.ActionInfo.Caption;
     HelpContext := APlugin.ActionInfo.HelpContext;
     Hint        := APlugin.ActionInfo.Hint;
     ShortCut    := APlugin.ActionInfo.ShortCut;
     if Assigned(APlugin.ActionInfo.Glyph) AND
        Assigned(Self.CustomizeActionList.Images) then
       ImageIndex := Self.CustomizeActionList.Images.Add(APlugin.ActionInfo.Glyph, nil);
     Enabled     := APlugin.Enabled;
     Checked     := APlugin.Checked;
     OnExecute   := APlugin.Execute;
     OnUpdate    := APlugin.OnActionUpdate;
     ActionList  := Self.CustomizeActionList;
     Tag         := LongInt(Pointer(APlugin));
   end;


 
Silver... ©   (2005-11-11 16:29) [6]


> Или сделай все реакции на действия

на самом деле у меня сейчас так и рялизованно. Пока Action-ов 4 но это не хорошо так как на сегодня так пойдет а завтра если надо будет больше че прогу переписывать?


> Тогда проще реализовать перехват клавиатуры

с ActionList-ом проще тока не знаю как Action-ы плодить-то


> Игорь Шевченко ©   (11.11.05 11:17) [5]

Тока я так понимаю это создание TAction (одного) не так ли?
 Типа мне создать все нужные и не трепать TActionList ибо он не нужен даже в принципе.

 тут же вопрос хранить их где?

... TList  ?   .....   Иное ???


> AAction := TAction.Create(Self);

убивать мне надо?


 
jack128 ©   (2005-11-11 17:13) [7]

Silver... ©   (11.11.05 16:29) [6]
Типа мне создать все нужные и не трепать TActionList ибо он не нужен даже в принципе.


Как раз в примере ИШ показывается как линковать TAction к TActionList"у .

Но вообще, как я понимаю, ActionList нужен только в дезигн тайм, если ты создаешь экшены в ран тайм, то от него никакого смысла нету.
Silver... ©   (11.11.05 16:29) [6]
убивать мне надо?

Можно не убивать.


 
Silver... ©   (2005-11-11 17:30) [8]


> то от него никакого смысла нету

самому понятно вопрос так встал потому как нужно много Action-ов.

TAction первое что на ум пришло
др. варянты (более елегантны) я не проч принять на усмотрение


> как линковать

сейчас буду пробовать, заканчиваю пред. задачю (не многозадачен я :(, паралельно тока информируюсь а пишу по одной задаче за раз :)) )


 
Silver... ©   (2005-11-11 17:51) [9]


> Игорь Шевченко ©   (11.11.05 11:17) [5]


APlugin ???


 
Silver... ©   (2005-11-11 17:59) [10]

да и на это

> Self.CustomizeActionList

ругань. Чет ваще торможу :(    не въезжаю


 
Silver... ©   (2005-11-11 21:03) [11]


> Тогда проще реализовать перехват клавиатуры.


а какую месагу ловить ???


 
Игорь Шевченко ©   (2005-11-11 22:04) [12]

Silver... ©   (11.11.05 17:59) [10]

Головой подумать, а не бездумно копировать код ?

Вопрос был задан "как создать", а не "дайте мне код под мою задачу".


 
Игорь Шевченко ©   (2005-11-11 22:10) [13]

jack128 ©   (11.11.05 17:13) [7]


> Но вообще, как я понимаю, ActionList нужен только в дезигн
> тайм, если ты создаешь экшены в ран тайм, то от него никакого
> смысла нету.


Ну да, смысла нету. Если не считать, что у него зачем-то события и методы и свойства придуманы. Например, Images есть у TActionList, а у TAction вроде как и нету...Но настоящему индейцу это не помеха.


 
Silver... ©   (2005-11-16 01:56) [14]


> бездумно копировать код

тока подсматривал :) так и не получилось "динамически создать Action-ы в TActionList-e"


> Ну да, смысла нету.

Согласен (вроде здесь Silver... ©   (11.11.05 17:30) [8] объяснил как до етого дошел, других методов никто не предложил исключая <tesseract ©   (11.11.05 10:59) [4]>
 ...откуда и вопрос: Silver... ©   (11.11.05 21:03) [11])

PS. Зачем тогда ответы давать-то если ими пользоваться (смотреть, юзать) нельзя; кстати копировать и не стал, при изучении не понял чего к чему вот и спрашивал


 
Eraser ©   (2005-11-16 02:07) [15]


> Silver... ©   (16.11.05 01:56) [14]

Поясню ещё раз (см. исходник VCL):

property ActionList: TCustomActionList read FActionList write SetActionList;
...
procedure TContainedAction.SetActionList(AActionList: TCustomActionList);
begin
 if AActionList <> ActionList then
 begin
   if ActionList <> nil then ActionList.RemoveAction(Self);
   if AActionList <> nil then AActionList.AddAction(Self);
 end;
end;


 
Silver... ©   (2005-11-16 02:37) [16]

да смотрел я исходники но заешь как бывает смотришь в книгу видишь...:(

ты-б меньше времени потерял если-б не намеками...


 
Игорь Шевченко ©   (2005-11-16 11:57) [17]


> так и не получилось "динамически создать Action-ы в TActionList-
> e"


Отгадал все буквы, не смог назвать слово


 
Eraser ©   (2005-11-16 16:56) [18]


> Silver... ©   (16.11.05 02:37) [16]

см. 15 строку листинга Игорь Шевченко ©   (11.11.05 11:17) [5]. Это и есть ответ на сабж.


 
Silver... ©   (2005-11-16 19:20) [19]

сделал:

begin
 MyActionList := TActionList.Create(Self);
 with TAction.Create(Self) do
   begin
     ShortCut := ...
     Tag := ...
     OnExecute := MyActionExecute;
     ActionList := MyActionList;
   end;
end;


работает, тока опять недоволен: "Зачем плодить Обиекты" по такому случаю
  Смотрю сырцы Action-ов не могу понять как возбуждает событие OnExecute
??? какую месагу ловить... ???

PS. я-ж говорил что с намеками у меня туго :( а все потому что выделенное я уже пробовал тока видимо забыл OnExecute прилинковать (раз не прошло, потому как сейчас опять таки забыл и не похало после очредного почесывания репы начал нецензурно выражатся :) )


 
Eraser ©   (2005-11-16 19:24) [20]


> Silver... ©   (16.11.05 19:20) [19]


> работает, тока опять недоволен: "Зачем плодить Обиекты"
> по такому случаю

Не хочешь плодить объекты - не используй экшины и все их достоинства.


 
Silver... ©   (2005-11-17 16:01) [21]


> не используй экшины и все их достоинства

да мне всего-то нужно (на данный момент) по нажатю опр. клавиш виполнить заданное действие с разными параметрами/опциям

так как набор параметров определяет юзверь их количество не константно.

  смотрел как ActionList работает при определении какой Action выполнить: ищет во всех Action-ах нужный ShortCut
   в таком случае почему бы мне не хранить, скажем в динамическом массиве мои ShortCut*ы и сканировать этот массив самому, таким образом не плодя обьекты ...

  Но тут-же возник вопрос а какую месагу ловить ... ???



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.013 c
14-1133159149
Ega23
2005-11-28 09:25
2005.12.18
С днем рождения! 27 ноября


3-1130765115
Ega23
2005-10-31 16:25
2005.12.18
Почему при обновлении ClientDataSet


2-1133766692
RealMan
2005-12-05 10:11
2005.12.18
Проблема с Media Player -ом. При открытии *.AVI файлов.


2-1133123140
PVasili
2005-11-27 23:25
2005.12.18
Как правильно хранить данные в Data TTreeView


2-1133591479
Roadroller
2005-12-03 09:31
2005.12.18
Как быть и как с этим бороться(Canvas)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский