![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Уничтожение popup меню вручную [D7]
far © (2004-08-09 16:24:00)Мое почтение, уважаемые мастера, доброго времени суток.
У меня возникло желание по right-клику на некоем control-элементе отображать popup menu, причем создавать его динамически после собственно клика, и дестроить его после того, как оно убирается с экрана.
Но вот проблема - не знаю как отследить момент для уничтожения меню. Можно это делать в процедуре обработки клика на элементах меню. Но что делать, если пользователь раздумал кликать на меню, и кликнул мимо него, чтобы его скрыть?
far (2004-08-09 18:19:00) [1]Ага, понятно... thanks.
Думаю тему можно считать закрытой, всем спасибо!
far (2004-08-09 18:04:00) [2]To афвуд:
О! Вот оно!
Пожалуй это очень разумный компромисс :)
VMcL (2004-08-09 18:04:00) [3]>> far © (09.08.04 17:58) [7]
GetWindowLong(PopupList.Handle, GWL_WNDPROC);
SetWindowLong(PopupList.Handle, GWL_WNDPROC, ...);
far (2004-08-09 17:58:00) [4]To VMcL:
К сожалению не могу разобраться, как это сделать. Тип TPopupList не имеет подходящего своства типа TNotifyEvent. Значит для перехвата мне нужно написать наследника TPopupList и перекрыть WndProc, но как мне создать его объект? Ведь PopupList - глобальная переменная, создаваемая каркасом...
афвуд (2004-08-09 17:47:00) [5]
> У меня возникло желание по right-клику на некоем control-элементе
> отображать popup menu, причем создавать его динамически
> после собственно клика, и дестроить его после того, как
> оно убирается с экрана.
У меня тоже возникало. В конце концов пришлось создать в начале менюшку, а перед тем как показать очищать его и динамически его заполнять. Многих Access Violation этим избежал. И не понимаю зачем тебе менюшку то каждый раз конструктить когда можно только его содержимое менять.
VMcL (2004-08-09 17:17:00) [6]AFAIK, хватать WM_EXITMENULOOP нужно в Menus.PopupList или что-то в этом роде (по крайней мере в D6).
far (2004-08-09 17:04:00) [7]To Anatoly Podgoretsky:
Извиняюсь, не дошло сразу, что WM_EXITMENULOOP посылается не меню, а окну приложения :)
far (2004-08-09 17:01:00) [8]To Anatoly Podgoretsky:
Спасибо. А как мне перехватить WM_EXITMENULOOP? Если я не ошибаюсь, TPopupMenu не имеет WndProc и подходящих обработчиков событий...
То oldman:
Это меню использует моя компонента.
Я подумал, что если каждая из размещаемых в приложении компонент будет создавать меню при своем создании, то получится неэффективное использование памяти.
А если разместить где-нибудь отдельную компоненту-меню и потом задавать на него ссылку вручную в design-time для каждой добавляемой в приложение компоненты, то это будет неудобно программистам, которые будут использовать мою компоненту. Тем более, что меню вообще-то не одно :)
Буду благодарен, если Вы выскажите свои соображения по этому поводу.
oldman (2004-08-09 16:35:00) [9]А по новому клику снова создавать - дестроить???
Маразм...
Не те желания у тебя возникают :)))
Anatoly Podgoretsky (2004-08-09 16:33:00) [10]http://delphimaster.ru/cgi-bin/forum.pl?id=1092046870&n=5