Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1099239142
Piero
2004-10-31 19:12
2004.11.14
Проблемма с собственным классом


1-1099039366
Aleksandr.
2004-10-29 12:42
2004.11.14
Как получить поток по его ThreadID?


1-1098958255
Max Ivanych
2004-10-28 14:10
2004.11.14
Как изменить шрифт у нескольких записей в ListBox ?


14-1098715661
YurikGL
2004-10-25 18:47
2004.11.14
Компьютеры в США, Европе


1-1098960063
_Kirill_
2004-10-28 14:41
2004.11.14
Способы хранения на диске большого кол-ва переменных НЕ в БД





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский