Главная страница
    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.034 c
1-1098873200
Phoenix
2004-10-27 14:33
2004.11.14
Проблема при сбросе данный в Exel


14-1099100990
Думкин
2004-10-30 05:49
2004.11.14
С днем рождения! 30 октября


1-1099392641
dolphin
2004-11-02 13:50
2004.11.14
Собития в динамически создаваемых формах


1-1098971775
Константинов
2004-10-28 17:56
2004.11.14
Как выделить часть текста в StringGrid


1-1098871447
Alexious
2004-10-27 14:04
2004.11.14
Chart





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