Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамически создать Action в TActionList-e [D7]


Страницы:   1 2

Silver... ©   (2005-11-10 23:56:00) 

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


Silver...   (2005-11-17 16:01:00) [1]


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

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

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

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

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


Eraser   (2005-11-16 19:24:00) [2]


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


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

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


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

сделал:

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 16:56:00) [4]


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

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


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


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


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


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

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

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


Eraser   (2005-11-16 02:07:00) [7]


> 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 01:56:00) [8]


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

тока подсматривал:) так и не получилось "динамически создать 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. Зачем тогда ответы давать-то если ими пользоваться (смотреть, юзать) нельзя; кстати копировать и не стал, при изучении не понял чего к чему вот и спрашивал


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

jack128 ©   (11.11.05 17:13) [7]


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


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


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

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

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

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


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


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


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


Silver...   (2005-11-11 17:59:00) [12]

да и на это

> Self.CustomizeActionList

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


Silver...   (2005-11-11 17:51:00) [13]


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


APlugin ???


Silver...   (2005-11-11 17:30:00) [14]


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

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

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


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

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


jack128   (2005-11-11 17:13:00) [15]

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


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

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

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


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


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

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


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

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


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

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

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

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


> AAction := TAction.Create( Self);

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


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

   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;


tesseract   (2005-11-11 10:59:00) [18]


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


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

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


Silver...   (2005-11-11 02:14:00) [19]

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

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


Silver...   (2005-11-11 01:10:00) [20]

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


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


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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо