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

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

Popup меню раскрыть и скрыть [D7, WinXP]


Дмитрий_05 ©   (2005-09-13 20:45:00) 

Что-то у меня никак не получается сделать вот как: нажмешь на кнопку, popup раскроется, еще раз нажмешь закроется, и т.д. Я уже незнаю что и делать... ввел переменную типа boolean которая разрешает открыть popup, т.е. если допустим b: boolean; b=true(меню раскрыто), то на повторном нажатии ничего не делать, меню само уберется... Но меню же можно закрыть и простым нажатием на форму и т.д. и т.п... Я отлавливал WM_EXITMENULOOP, думал что это спасет... и нет же... оно происходит до того как произойдет событие MouseDown или Click... что делать ума не приложу... может у кого-то есть какие-то идеи?


Дмитрий_05   (2005-09-14 19:57:00) [1]

Игорь Шевченко, а не могли бы вы поделиться исходником?


Игорь Шевченко   (2005-09-14 18:53:00) [2]

Defunct ©   (14.09.05 18:48) [13]


> PopupMenu не содержит ни метода Hide, ни свойства по которому
> можно отследить отображается он в данный момен или нет


Не содержит. Но оно рассылает сообщения...


Defunct   (2005-09-14 18:48:00) [3]

> Игорь Шевченко

никто и не говорит о невозможности решения задачи, речь идет лишь только о реализованых возможностях TPopupMenu.. PopupMenu не содержит ни метода Hide, ни свойства по которому можно отследить отображается он в данный момен или нет.


Игорь Шевченко   (2005-09-14 18:38:00) [4]

Defunct ©   (14.09.05 18:35) [11]


> реализовано довольно сложно


А никто простых решений не обещал.


> имелось в виду, что нет прямого способа сделать так..
> PopupMenu все-таки управляемый (не только нами) объект.


Этой фразы не понимаю. Дело в том, что компонент (кнопку, с выпадающим меню) я делал три года назад, так что невозможного я в этом не вижу. Делал примерно по тому же принципу, что и в тулбаре.


Defunct   (2005-09-14 18:35:00) [5]

> Игорь Шевченко
> function TToolBar.CheckMenuDropdown(Button: TToolButton): Boolean;

реализовано довольно сложно..

> Умеет.
имелось в виду, что нет прямого способа сделать так..
PopupMenu все-таки управляемый (не только нами) объект.


Игорь Шевченко   (2005-09-14 16:02:00) [6]

Дмитрий_05   (14.09.05 15:32) [8]

Почему бы не посмотреть, как это сделано в TToolbar ?
Особенно метод
function TToolBar.CheckMenuDropdown(Button: TToolButton): Boolean;

Defunct ©   (14.09.05 06:26) [7]


> TPopupMenu так работать не умеет.


Умеет.


Игорь Шевченко   (2005-09-14 16:01:00) [7]

Дмитрий_05   (14.09.05 15:32) [8]

Почему бы не посмотреть, как это сделано в TToolbar ?
Особенно метод
function TToolBar.CheckMenuDropdown(Button: TToolButton): Boolean;

Defunct ©   (14.09.05 06:26) [7]


> TPopupMenu так работать не умеет.


Умеет.


Дмитрий_05   (2005-09-14 15:32:00) [8]

ведь можно же как-нибудь "научить" его... ведь если к ToolButton прикрутить popupmenu оно так и работает, как мне нужно


Defunct   (2005-09-14 06:26:00) [9]

Дмитрий_05   (14.09.05 05:39) [6]

TPopupMenu так работать не умеет.
Все создаваемые PopupMenu автоматически регистрируются в PopupList'е (модуль Menus), который и отвечает за их показ и гашение.


Дмитрий_05   (2005-09-14 05:39:00) [10]

Нужно чтобы при первом нажатии на кнопку меню раскрылось, при втором нажатии меню закрылось.


Defunct   (2005-09-14 05:18:00) [11]

Дмитрий_05   (14.09.05 04:01) [4]
> Закроется, а кнопке же надо как-то об этом сообщить, что меню закрылось...

Зачем?

> А то при следующем нажатии ничего не произойдет...

Зачем этот флажек? Уберите его и не будет проблемы.
Пусть по нажатию на кнопку только создается Popup, а уж закрываться он будет сам.


Дмитрий_05   (2005-09-14 04:01:00) [12]

Закроется, а кнопке же надо как-то об этом сообщить, что меню закрылось... А то при следующем нажатии ничего не произойдет...


Defunct   (2005-09-14 02:48:00) [13]

> Но меню же можно закрыть и простым нажатием на форму и т.д. и т.п...

Так и должно быть, зачем что-то еще выдумывать?


Дмитрий_05   (2005-09-13 23:35:00) [14]

Я неправильно выразился, что меня непонять? Помогите пожалуйста...


Дмитрий_05   (2005-09-13 20:51:00) [15]

P.S. в WM_EXITMENULOOP я какраз и присваиваю переменной b:=false, т.е. меню закрыто, при нажатии на кнопку можно открывать... Но потом тудже сделует событие MouseDown и меню опять открывается...


Наверх

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