![]() |
Systemmenü - Fenster schließen abfangen...
Hallo,
ich möchte, dass das schließen aus dem Systemmenü abgefangen wird: "Fenster schließen Alt+F4". Ich habe es mit folgendem Code probiert, doch er fängt nur die Tastenkombination Alt+F4 ab und nicht den Klick auf den Item in dem Menü.
Delphi-Quellcode:
Dies funktioniert beim drücken von Alt-F4 und beim Klicken auf die Windows Schließen Schaltfläche rechts oben, jedoch nicht aus dem Menü heraus. Was kann ich machen, damit auch dies funktioniert?
procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
procedure TForm1.WMSysCommand(var Message: TWMSysCommand); begin If Message.CmdType and $FFF0 = SC_CLOSE then Hide; inherited; end; Gruß Mazel |
Re: Systemmenü - Fenster schließen abfangen...
Zitat:
Schau dir doch mal das Ereignis OnFormClose deines Formulars an! Speziell den var-Parameter Action! In der Hilfe steht was er bewirkt! |
Re: Systemmenü - Fenster schließen abfangen...
Moin Marcel,
Du könntest, statt die Messages abzufangen, einfach im OnCloseQuery dass Schliessen des Fensters verbieten, bis, z.B., eine Bestimmte Bedinungung zutrifft, damit Du es überhaupt mal schliessen kannst. Oder Du müsstest das Programm dann per Application.Terminate beenden, da hier, u.a., OnCloseQuery übergangen wird. |
Re: Systemmenü - Fenster schließen abfangen...
Danke, :thumb:
mit OnClose oder OnCloseQuery funktioniert es. Warum bin ich nicht darauf gekommen? Warum habe ich das mit WMSysCommand probiert, wo es doch so einfach ist mit OnClose? :wall: Jedenfalls klappt es! Gruß Mazel |
Re: Systemmenü - Fenster schließen abfangen...
Wer es über das Abfangen von Messages machen möchte, kann dafür auch die Message WM_CLOSE verwenden:
Delphi-Quellcode:
cya Felix
private
procedure WMClose(var Msg: TWMClose); message WM_CLOSE; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz