Форум: "Основная";
Текущий архив: 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