Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > обработка закрытия popup menu


Автор: Knuckles 8.3.2006, 19:18
На появление у нас есть OnPopup().
А как быть с закрытием?
Заранее спасибо.

Автор: _hunter 9.3.2006, 11:46
OnChange
а вообще, что у тебя за задача?

Автор: Knuckles 9.3.2006, 12:25
дык, я так понял, этот OnChange() вызывается при создании и показе меню.
а мне надо при закрытии.

есть форма, которая автоматически прячется после покидания мыши ее пределов.
у формы есть попап меню с пунктами типа настройка и т.п.
проблемма в том, что форма небольших размеров (типа всплывающая панель) и некоторые пункты меню часто оказываются за пределами формы. естественно, что подвести мышь к таким пунктам оказывается невозможно, так как форма сразу исчезает.
так вот на то время, пока меню видно, нужно убрать автоскрытие, а когда меню закрывается (кликнул мимо или пункт выбрал), нужно это автоскрытие вернуть.
теперь понятнее?
ПС: по-моему сути дела это не меняет.

Автор: Snowy 9.3.2006, 12:36
Помню, что Girder когда-то писал...

Фуф. Вот. Еле нашел.
http://forum.vingrad.ru/index.php?showtopic=32490&view=findpost&p=240839

Автор: Knuckles 10.3.2006, 22:49
Такой способ я уже видел.
И он, к сожалению, не работает. Т.е. он работает в этом конкретном примере (похоже только с TMainMenu).
Там к месаге Гирдера приложен пример: кидаю на форму PopupMenu и его закрытие все равно не контролируется. Честно говоря, сам не пойму, почему. Механизм вроде неплохой. Еще идеи будут?

Автор: Snowy 12.3.2006, 17:33
Грубо, но работает:
Код

procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
  popupped := true;
end;

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if popupped then begin
    popupped := false;
    ShowMessage('Попупка спряталась');
  end;
end;

Автор: FRAGNATIC 12.3.2006, 17:43
Цитата(Knuckles @ 9.3.2006, 12:25 Найти цитируемый пост)
некоторые пункты меню часто оказываются за пределами формы. естественно, что подвести мышь к таким пунктам оказывается невозможно, так как форма сразу исчезает.
так вот на то время, пока меню видно, нужно убрать автоскрытие, а когда меню закрывается (кликнул мимо или пункт выбрал),

если пункт выбираешь который за пределами формы то после закрытия попап курсор остатёся всё ровно за пределами формы и если ты сразу врубишь автоскрывание то форма всё ровно исчезнет - что не очень удобно
предусмотри такой вариант и перед включением автоскрытия проверяей если мыша за пределами то верни курсор в область формы а потом врубай =)
так офтоп просто) сорри если чё)

Автор: Knuckles 12.3.2006, 17:55
Гм. Действительно работает smile
Только совершенно непонятно, как именно. Т.е. на что реагирует этот ApplicationEvents? Он же наверное месагу ловит? Вот интересно, какую.
Спасибо, Snowy, за помощ.
2Fragnatic: тоже спасибо, учту. Вообще все эти мелочи я собираюсь доработать на этапе тестирования, когда нужно будет добавлять юзабельности и удобств.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)