Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.19;
Скачать: 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 вся ветка

Текущий архив: 2003.05.19;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.015 c
1-59717
Вадим
2003-05-04 23:21
2003.05.19
Настройка панели инструментов


1-59760
Nikos
2003-05-06 15:11
2003.05.19
Как в место символов отобразить *


3-59536
sapsi
2003-04-25 13:22
2003.05.19
рисунок на dbgridtitle


1-59685
lightix
2003-05-07 16:31
2003.05.19
Вопрос по QReport


3-59558
Alexandr3
2003-04-25 18:59
2003.05.19
Процедуры то вроде одинаковые