Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.006 c
14-59922
crash
2003-04-28 00:21
2003.05.19
отправить сообщение другим приложениям


1-59705
Валерий
2003-05-05 14:12
2003.05.19
TAction в SDI-приложении


1-59774
Tatiana
2003-05-05 18:13
2003.05.19
Illegal type in Write/Writeln statement


14-59914
Сергей Резников
2003-04-28 16:52
2003.05.19
Скины


1-59691
DNK
2003-05-06 09:02
2003.05.19
Меню на MDI форме





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский