Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
Вниз"Cистемное" PopupMenu... Найти похожие ветки
← →
BillyJeans (2004-10-31 12:33) [0]Подскажите каким образом добраться до "системного" PopupMenu (с пунктами "копировать", "вставить" и т.д.), которое появляется над TEdit, TMemo и т.п. при нажатии правой кнопкой мыши?
Хочу добавить туда еще один пункт...
← →
DVM © (2004-10-31 13:03) [1]проще создать свое меню и назначить его полю
← →
BillyJeans (2004-11-01 08:26) [2]2 DVM
... и назначить его всем полям системы???
← →
Андерсон (2004-11-01 09:59) [3]BillyJeans (01.11.04 08:26) [2]
... и назначить его всем полям системы???
... а почему бы и нет???
← →
BillyJeans (2004-11-01 10:11) [4]2 Андерсон
а если пользователь запустит еще программу...
придется постоянно заниматься таким назначением :(
← →
Андерсон (2004-11-01 10:31) [5]ты мне объясни зачем тебе менять стандартный PopupMenu ???
когда намного легче сделать свой и назначить всем...
← →
BillyJeans (2004-11-01 11:35) [6]1. стандартный popupmenu достаточно изменить один раз
2. некоторые из полей уже могут содержать popupmenu отличный от системного
← →
BillyJeans (2004-11-01 11:37) [7]1. стандартный popupmenu достаточно изменить один раз
2. некоторые из полей уже могут содержать popupmenu отличный от системного
← →
BillyJeans (2004-11-01 11:45) [8]Может есть возможность поставить хук на появление такого popup и добавлять в него свой пункт?
← →
Юрий Зотов © (2004-11-01 13:03) [9]Глобальная подмена системного Popup-меню собственным для всех окон редактирования (а у других окон я системного popup-меню не встречал).
1. На главную форму кладем TPopupMenu (далее - MyPopupMenu) и создаем в нем пункты, аналогичные стандартному системному popup-меню для окон класса EDIT (Cut, Copy, Paste...). Всем пунктам назначаем один и тот же обработчик.
2. В Application.OnMessage ловим WM_RBUTTTONUP и пишем примерно следующее:
type
TFriendEdit = class(TCustomEdit);
if Screen.ActiveControl is TCustomEdit then
with TFriendEdit(Screen.ActiveControl) do
begin
if PopupMenu = nil then
PopupMenu := MyPopupMenu;
if PopupMenu = MyPopupMenu then
MyPopupMenu.PopupComponent := Screen.ActiveControl
end;
3. Если надо, пишем обработчик MyPopupMenu.OnPopup, где в зависимости от TFriendEdit(MyPopupMenu.PopupComponent), его сотояния и от текущей ситуации в программе можем добавлять и удалять пункты меню, скрывать их или показывать, запрещать или разрешать, а также назначать добавленным пунктам нужные обработчики.
4. В общем обработчике всех стандартных пунктов MyPopupMenu (см. п. 1) смотрим, что за Sender в него пришел и вызываем нужный метод (Copy, Cut, Paste...) для TFriendEdit(MyPopupMenu.PopupComponent).
Вот и все. Этот механизм работает даже если поднять popup-меню не мышью, а с клавиатуры.
← →
BillyJeans (2004-11-01 13:38) [10]2 Юрий Зотов © (01.11.04 13:03) [9]
мысль хорошая, но как быть с pupupmenu других процессов?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.033 c