Вниз
Скачать: CL | DM;

TAction в SDI-приложении   Найти похожие ветки 

 
Валерий   (2003-05-05 14:12) [0]

Подскажите, пожалуйста, как заставить работать стандартные TAction( например, TEditCut или TDataSetRefresh), повешенные на tool-кнопки и пункты меню в главном окне SDI-приложения(в MDI все просто). Нужно чтобы эти TAction выполнялись над объектами в дочерних окнах. Такую реализацию UI мы видим, например в самой Delphi, т.е. находясь в любом окне и выделив блок текта мы можем кликнуть пункт главного меню Cut или Copy. Эту проблему кажется можно решить путем написания некоторого количества кода. Но может есть простое стандартное решение путем установки свойств в инспекторе объектов.
Спасибо !
Валерий.


 
Валерий   (2003-05-08 03:25) [1]

P.S. к моему вопросу:

Неужели все пишут только MDI-приложения или SDI-прил-я с одной главной формой и только модальными формами. Если нет - то ведь неудобно дублировать стандартные TAction(TDataSetRefresh, TClientDataSetApply, TSataSetNext, ...) в каждой дочерней форме.

P.P.S.
Action-ы не работают потому что при клике на них - фокус переходит на главную форму, где расположено главное меню и toolbar-ы на которых и висят эти TEditCopy,TDataSetRefresh,TClientDataSetApply и т.д. А DBGrid-ы, и проч, т.е. target-ы над которыми должны выполняться Action-ы находятся в другой форме которая уже не астивна.

Короче я так понял - в Delphi все Action-ы могут работать только в своей форме. Наверное можно сделать компонент из трех пальцев. Кладу его на все дочерние формы(у него нет ни свойств ни событий ни методов), в своем конструкторе этот компонент сам вешает три обработчика на
- на FormXXX.OnDeactivate
- на MainForm.ActionManager1.OnUpdate
- на MainForm.ActionManager1.OnExecute
причем если в design-time на эти события уже повешены какие-то обработчики - они естественно будут вызваны.

В FormXXX.OnDeactivate - запоминаю значения свойств Enable интересующих меня Action-ов , а так же
FormXXX.ActiveControl.SelStart и FormXXX.ActiveControl.SelLength если это TCustomEdit.

В MainForm.ActionManager1.OnUpdate - if MainForm.Active then восстанавливаю запомненные TAction.Enable

В MainForm.ActionManager1.OnExecute -
if (это интересующий меня Action) then
Handled:=True;
FormXXX.SetFocus
Восстанавливаю FormXXX.ActiveControl.SelStart и FormXXX.ActiveControl.SelLength если нужно
Action.Execute;
end;



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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.011 c
3-59552
РВА
2003-04-25 14:03
2003.05.19
Запросы к лок. таблицам


9-59528
anatol
2002-12-09 19:28
2003.05.19
Помогите найти исходники для карточной игры


3-59568
Officeman
2003-04-25 19:33
2003.05.19
Помогите с DBGRID-ом и MEMO ! Спасибо!


14-59886
Лана Розанова
2003-04-28 08:34
2003.05.19
Web


3-59549
Иван
2003-04-25 16:24
2003.05.19
Как работать с DBF и Paradox, используя ADO-компоненты?




   Наверх