Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Узнать когда закроеться TPopupMenu 
V
    Опции темы
spider13
Дата 17.2.2009, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 7.2.2009

Репутация: нет
Всего: нет



Вообщем сабж. Если кнопка, которая вызывает TPopupMenu, нужно отловть момент когда PopupMenu закроеться
PM MAIL   Вверх
morpheyushka
Дата 17.2.2009, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


Профиль
Группа: Участник
Сообщений: 563
Регистрация: 26.2.2008
Где: Киев

Репутация: 3
Всего: 8



А для чего?
Не то, что бы мне так интересно было...просто вдруг альтернативу найдем


--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
Poseidon
Дата 17.2.2009, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



PopupMenu зактроется в двух случаях: потеряет фокус или будет выбран какой-то пункт. Почему бы не отлавливать эти события?


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Snowy
Дата 17.2.2009, 13:32 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Если меню всплывает автоматом, то, пока оно не закроется, тред будет занят.
А раз тред занят, то Application.OnIdle вызываться не будет.
Значит первый же вызов OnIdle, после OnPopup и будет моментом пропадания меню.
Код
type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    ApplicationEvents1: TApplicationEvents;
    procedure PopupMenu1Popup(Sender: TObject);
    procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
  end;

var  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
  PopupMenu1.Tag := 1;
end;

procedure TForm1.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
begin
  if PopupMenu1.Tag = 1 then
  begin
    PopupMenu1.Tag := 0;
    ShowMessage('Меню исчезло');
  end;
end;


Ну а, если вызываем меню вручную, то тут еще проще - пока меню не исчезнет, код дальше вызова не идёт.
То есть 
Код
  PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
  ShowMessage('Меню исчезло');

PM MAIL   Вверх
spider13
Дата 17.2.2009, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 7.2.2009

Репутация: нет
Всего: нет



Цитата(Snowy @ 17.2.2009,  13:32)
Если меню всплывает автоматом, то, пока оно не закроется, тред будет занят.
А раз тред занят, то Application.OnIdle вызываться не будет.
Значит первый же вызов OnIdle, после OnPopup и будет моментом пропадания меню.
Код
type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    ApplicationEvents1: TApplicationEvents;
    procedure PopupMenu1Popup(Sender: TObject);
    procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
  end;

var  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
  PopupMenu1.Tag := 1;
end;

procedure TForm1.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
begin
  if PopupMenu1.Tag = 1 then
  begin
    PopupMenu1.Tag := 0;
    ShowMessage('Меню исчезло');
  end;
end;


Ну а, если вызываем меню вручную, то тут еще проще - пока меню не исчезнет, код дальше вызова не идёт.
То есть 
Код
  PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
  ShowMessage('Меню исчезло');

Сенq, помог.
PM MAIL   Вверх
dmsmeat
Дата 16.3.2009, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 8.11.2008

Репутация: нет
Всего: нет



окну приходят сообщения

WM_ENTERMENULOOP
WM_EXITMENULOOP
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.