Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.22;
Скачать: CL | DM;

Вниз

Уничтожение popup меню вручную   Найти похожие ветки 

 
far ©   (2004-08-09 16:24) [0]

Мое почтение, уважаемые мастера, доброго времени суток.

У меня возникло желание по right-клику на некоем control-элементе отображать popup menu, причем создавать его динамически после собственно клика, и дестроить его после того, как оно убирается с экрана.
Но вот проблема - не знаю как отследить момент для уничтожения меню. Можно это делать в процедуре обработки клика на элементах меню. Но что делать, если пользователь раздумал кликать на меню, и кликнул мимо него, чтобы его скрыть?


 
Anatoly Podgoretsky ©   (2004-08-09 16:33) [1]

http://delphimaster.net/view/4-1092046870/


 
oldman ©   (2004-08-09 16:35) [2]

А по новому клику снова создавать - дестроить???
Маразм...
Не те желания у тебя возникают :)))


 
far ©   (2004-08-09 17:01) [3]

To Anatoly Podgoretsky:
Спасибо. А как мне перехватить WM_EXITMENULOOP? Если я не ошибаюсь, TPopupMenu не имеет WndProc и подходящих обработчиков событий...

То oldman:
Это меню использует моя компонента.
Я подумал, что если каждая из размещаемых в приложении компонент будет создавать меню при своем создании, то получится неэффективное использование памяти.
А если разместить где-нибудь отдельную компоненту-меню и потом задавать на него ссылку вручную в design-time для каждой добавляемой в приложение компоненты, то это будет неудобно программистам, которые будут использовать мою компоненту. Тем более, что меню вообще-то не одно :)
Буду благодарен, если Вы выскажите свои соображения по этому поводу.


 
far ©   (2004-08-09 17:04) [4]

To Anatoly Podgoretsky:
Извиняюсь, не дошло сразу, что WM_EXITMENULOOP посылается не меню, а окну приложения :)


 
VMcL ©   (2004-08-09 17:17) [5]

AFAIK, хватать WM_EXITMENULOOP нужно в Menus.PopupList или что-то в этом роде (по крайней мере в D6).


 
афвуд   (2004-08-09 17:47) [6]


> У меня возникло желание по right-клику на некоем control-элементе
> отображать popup menu, причем создавать его динамически
> после собственно клика, и дестроить его после того, как
> оно убирается с экрана.


У меня тоже возникало. В конце концов пришлось создать в начале менюшку, а перед тем как показать очищать его и динамически его заполнять. Многих Access Violation этим избежал. И не понимаю зачем тебе менюшку то каждый раз конструктить когда можно только его содержимое менять.


 
far ©   (2004-08-09 17:58) [7]

To VMcL:
К сожалению не могу разобраться, как это сделать. Тип TPopupList не имеет подходящего своства типа TNotifyEvent. Значит для перехвата мне нужно написать наследника TPopupList и перекрыть WndProc, но как мне создать его объект? Ведь PopupList - глобальная переменная, создаваемая каркасом...


 
far ©   (2004-08-09 18:04) [8]

To афвуд:
О! Вот оно!
Пожалуй это очень разумный компромисс :)


 
VMcL ©   (2004-08-09 18:04) [9]

>>far ©  (09.08.04 17:58) [7]

GetWindowLong(PopupList.Handle, GWL_WNDPROC);
SetWindowLong(PopupList.Handle, GWL_WNDPROC, ...);


 
far ©   (2004-08-09 18:19) [10]

Ага, понятно... thanks.
Думаю тему можно считать закрытой, всем спасибо!



Страницы: 1 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.024 c
14-1091692034
GRAND25
2004-08-05 11:47
2004.08.22
Мы тут все отдыхаем, что ли?


1-1092079629
k-sergey
2004-08-09 23:27
2004.08.22
как узнать запущен ли поток?


3-1091101066
Andrey
2004-07-29 15:37
2004.08.22
Создание индекса


14-1091463326
Cerberus
2004-08-02 20:15
2004.08.22
Linux под Win


4-1089495562
_Stalker_
2004-07-11 01:39
2004.08.22
Путь к программе