Форум: "Основная";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c