Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.14;
Скачать: 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 вся ветка

Текущий архив: 2004.11.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.05 c
1-1098863269
digger
2004-10-27 11:47
2004.11.14
Hint


1-1099319598
Kat
2004-11-01 17:33
2004.11.14
Как Word преобразовать в String?


1-1099377678
Gawk
2004-11-02 09:41
2004.11.14
Выполнение действия через определённые промежутки времени...


3-1097930940
TSL
2004-10-16 16:49
2004.11.14
Проблема с полем Image в mssql2000


9-1090363698
Profi
2004-07-21 02:48
2004.11.14
DirectDraw