Главная страница
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.011 c
3-59584
Morgan
2003-04-28 07:44
2003.05.19
Хелп с фильтрацией


1-59715
SiJack
2003-05-05 08:22
2003.05.19
OpenDialog возвращает путь к файлу, например с: programm


14-59938
Dim!S
2003-04-29 09:21
2003.05.19
Программирование для КПК


4-59978
Пушкина Александра
2003-03-18 14:40
2003.05.19
JPEG - изображение в качестве обоев для Windows


14-59863
_exciter
2003-04-28 10:50
2003.05.19
Где достать FBPlus ?