Вниз
Скачать: CL | DM;

"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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.022 c
14-1099060525
Pat
2004-10-29 18:35
2004.11.14
Подскажите форум по Java2


14-1098016249
GanibalLector
2004-10-17 16:30
2004.11.14
Киев ???


1-1099106540
AZ
2004-10-30 07:22
2004.11.14
Недоступность значения свойства типа массив


1-1099303347
Ш-К
2004-11-01 13:02
2004.11.14
Объединение двух XML


10-1031254876
iZEN
2002-09-05 23:41
2004.11.14
CORBA умирает?




   Наверх