Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TPopupMenu.OnClose? (https://www.delphipraxis.net/32650-tpopupmenu-onclose.html)

Shaman 26. Okt 2004 17:17


TPopupMenu.OnClose?
 
Hallo zusammen

Ich vermisse beim PopupMenu das Ereignis, wenn es geschlossen wird - egal wie, auch durch Klick irgendwo ausserhalb. Wie bekomme ich das mit?

Gruss
Shaman

Shaman 27. Okt 2004 21:24

Re: TPopupMenu.OnClose?
 
Schwupps

Sprint 27. Okt 2004 22:22

Re: TPopupMenu.OnClose?
 
Zitat:

Zitat von Shaman
Ich vermisse beim PopupMenu das Ereignis, wenn es geschlossen wird - egal wie, auch durch Klick irgendwo ausserhalb. Wie bekomme ich das mit?

Windows sendet dazu die Nachricht WM_EXITMENULOOP. Bei TMainMenu kannst du die ohne weiters abfangen, weil dort die Nachricht an
die Form geschickt wird. Bei TPopupMenu's musst du das Fensterhandle von TPopupList subclassen. Das kannst du zum Beispiel so machen...

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  ...
  private
    { Private-Deklarationen }
    OldPopupListWndProc: TFNWndProc;
    NewPopupListWndProc: TFNWndProc;
    procedure PopupListWndProc(var Message: TMessage);
  ...
  end;
Delphi-Quellcode:
{--------------------------------------------------------------------------------------------------}

procedure TForm1.FormCreate(Sender: TObject);
begin
  NewPopupListWndProc := MakeObjectInstance(PopupListWndProc);
  OldPopupListWndProc := TFNWndProc(GetWindowLong(PopupList.Window, GWL_WNDPROC));
  SetWindowLong(PopupList.Window, GWL_WNDPROC, Longint(NewPopupListWndProc));
end;

{--------------------------------------------------------------------------------------------------}

procedure TForm1.FormDestroy(Sender: TObject);
begin
  SetWindowLong(PopupList.Window, GWL_WNDPROC, Longint(OldPopupListWndProc));
end;

{--------------------------------------------------------------------------------------------------}

procedure TForm1.PopupListWndProc(var Message: TMessage);
begin
  with Message do
  begin
    case Msg of
      WM_ENTERMENULOOP:; // PopupMenu wird geöffnet
      WM_EXITMENULOOP:; // PopupMenu wird geschlossen
    end;
    Result := DefWindowProc(PopupList.Window, Msg, WParam, LParam);
  end;
end;

{--------------------------------------------------------------------------------------------------}

Shaman 28. Okt 2004 12:04

Re: TPopupMenu.OnClose?
 
Vielen Dank! :thumb:

Gruss
Shaman


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz