скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

Проверить открыто ли контекстное меню



Оформил: DeeCo

{ 
  Using the WM_MENUSELECT message of the form won’t work to check if 
  the popup is open. Simply because the parent of the popup is not the 
  form (check the popup method of TPopupMenu). A workaround is to use 
  the api call yourself : 
}

 type
   TForm1 = class(TForm)
     {...}
     procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
       Shift: TShiftState; X, Y: Integer);

   private
     IsMenuOpen: Boolean;
     procedure WMMENUSELECT(var msg: TWMMENUSELECT); message WM_MENUSELECT;
   end;

    {...}
 implementation

 {...}

 procedure TForm1.WMMENUSELECT(var msg: TWMMENUSELECT);
 begin
   inherited;
   IsMenuOpen := not ((msg.MenuFlag and $FFFF > 0) and
     (msg.Menu = 0));
 end;

 procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
 begin
   if Button = mbRight then
     with ClientToScreen(Point(X, Y)) do
       TrackPopupMenuEx(PopupMenu1.Handle, TPM_LEFTALIGN, X, Y,
         Self.Handle, nil);
 end;





Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook