|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
||||
|
||||
Цитата:
Код:
procedure TForm1.sbt_StatMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var pt: TPoint; begin with Sender as TButton do begin Perform(BM_SETSTATE, 1, 0); pt := Parent.ClientToScreen(Point(Left, Top + Height)); PopupMenu1.Popup(pt.X, pt.Y); Perform(BM_SETSTATE, 0, 0); end; end; p.s. Хотя конструкцию with я недолюбливаю... |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
DOR (21.10.2012)
|
#17
|
|||
|
|||
Не сочтите за наглость, так чтобы было вообще при вообще, как сделать чтобы при смене фокуса меню закрывалось. Спасибо.
|
#18
|
||||
|
||||
Цитата:
|
#19
|
|||
|
|||
Хм, у меня не скрывается, приходиться щелкнуть в свободном месте, только после этого пропадает.
|
#20
|
||||
|
||||
При смене фокуса на такую же кнопку с выпадающим меню?
|
#21
|
|||
|
|||
Не всегда, иногда это просто кнопка, иногда на выпадающую
|
#22
|
||||
|
||||
Может так? Но я пока только с таймером допер.
ЗЫ Кусок кода Код:
if form1.ControlAtPos(pt,true,true).ClassType = TButton then if form1.ControlAtPos(pt,true,true).Tag=54 then Button1MouseMove(form1.ControlAtPos(pt,true,true),[],pt.X, pt.Y); Последний раз редактировалось YVitaliy, 21.10.2012 в 14:14. |
#23
|
|||
|
|||
Возвращаясь к теме, в выложенном примере, скрытие меню происходит только если перевести курсор на какой нить другой буттон, а не убрать фокус с кнопки и при этом (после скрытия меню) кнопка под которым вылазило меню, остается вжатой (. Помогите пожалуйста добить эту тему.
|
#24
|
||||
|
||||
Цитата:
Код:
keybd_event(VK_ESCAPE, MapVirtualKey(VK_ESCAPE, 0), 0, 0); keybd_event(VK_ESCAPE, MapVirtualKey(VK_ESCAPE, 0), KEYEVENTF_KEYUP,0); Код:
PostMessage(PopupMenu.Handle, WM_NULL, 0, 0); Ещё могу предложить немного модифицнуть в примере процедуру Button1MouseMove, дописав первой строчкой вот это: Код:
if Application.Active then begin ...всё остальное... end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#25
|
||||
|
||||
Вот ещё бы в темочке писатеньки без выпендрёжечка.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Alegun (24.11.2012)
|
#26
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#27
|
|||
|
|||
Цитата:
Ну, если надо отследить именно уход фокуса, то в обработчике события OnExit надо просто проверить, что меню еще открыто, и если да, то просто закрыть его. |
#28
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#29
|
||||
|
||||
Я в самопальном меню использовал WM_MOUSELEAVE.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#30
|
||||
|
||||
Для выхода я в примере использую EndMenu - должна закрывать все меню, так что эмулировать esc нет смысла.
Для "убора" фокуса с кнопки нужно (!) кликнуть по какому-нибудь другому контролу. Сам по себе фокус никуда не денется (если конечно не убирать его "вручную"). А для клика на другой контрол нужно навести на него мышь (при открытом меню tab не работает). А процедура (которая в таймере) отлавливает это наведение, и закрывает все меню, если tag в этого контрола не равен 55. В примере лежит и панель, неужели при наведении на нее меню не закрывается? |