![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамически создать Action в TActionList-e [D7]
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]
не особо понял :(