![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
"Cистемное" PopupMenu... [D5, Win2k, WinXP]
BillyJeans © (2004-10-31 12:33:00)Подскажите каким образом добраться до "системного" PopupMenu (с пунктами "копировать", "вставить" и т.д.), которое появляется над TEdit, TMemo и т.п. при нажатии правой кнопкой мыши?
Хочу добавить туда еще один пункт...
BillyJeans (2004-11-01 13:38:00) [1]2 Юрий Зотов © (01.11.04 13:03) [9]
мысль хорошая, но как быть с pupupmenu других процессов?
Юрий Зотов (2004-11-01 13:03:00) [2]Глобальная подмена системного 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 11:45:00) [3]Может есть возможность поставить хук на появление такого popup и добавлять в него свой пункт?
BillyJeans (2004-11-01 11:37:00) [4]1. стандартный popupmenu достаточно изменить один раз
2. некоторые из полей уже могут содержать popupmenu отличный от системного
BillyJeans (2004-11-01 11:35:00) [5]1. стандартный popupmenu достаточно изменить один раз
2. некоторые из полей уже могут содержать popupmenu отличный от системного
Андерсон (2004-11-01 10:31:00) [6]ты мне объясни зачем тебе менять стандартный PopupMenu ???
когда намного легче сделать свой и назначить всем...
BillyJeans (2004-11-01 10:11:00) [7]2 Андерсон
а если пользователь запустит еще программу...
придется постоянно заниматься таким назначением :(
Андерсон (2004-11-01 09:59:00) [8]BillyJeans (01.11.04 08:26) [2]
... и назначить его всем полям системы???
... а почему бы и нет???
BillyJeans (2004-11-01 08:26:00) [9]2 DVM
... и назначить его всем полям системы???
DVM (2004-10-31 13:03:00) [10]проще создать свое меню и назначить его полю