Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Уничтожение 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


Наверх

Титульная страница Поиск, карта сайта Написать письмо