![]() |
Das Systemmenü der eigenen Anwendung ändern (NonVCL)
Und schon wieder eine NonVCL Frage von mir, ich weiß, aber irgendwann muss man das ja auch mal können :roll:
Wie kann ich das Systemmenü der eigenen Anwendung ändern, also wenn ich oben mit der rechten Maustaste auf Caption klicke, also das wo Maximieren, Minimieren, Schließen usw. steht. Jedoch würde ich das gern NonVCL machen. Vielleicht kann mir jemand helfen. :love: Danke UC |
1000 und 1 Beitrag
Das sagen
![]() |
Re: Das Systemmenü der eigenen Anwendung ändern (NonVCL)
Ich habe das jetzt nochmal probiert, aber leider habe ich es nicht geschafft :(
Bei Assarbards Miscprograms ist auch so eine Funktion dazu dabei, bei LocalIP, aber leider habe ich es nicht hinbekommen das in mein Programm zu machen. Folgende Funktion habe ich für VCL gefunden:
Code:
Nur leider kann man das nicht in NonVCL umwandeln, ich zumindestens nicht :(
private
procedure AppMessage(var Msg: TMsg; var Handled: Boolean); procedure TForm1.FormCreate(Sender: TObject); var Menu: THandle; begin Menu := GetSystemMenu(Application.Handle, False); ModifyMenu(Menu, sc_Close, mf_ByCommand, sc_Close, 'E&xit'#9'Alt+F4'); AppendMenu(Menu, mf_Separator, 0, #0); AppendMenu(Menu, mf_ByCommand, 100, '&wiegehts...'); AppendMenu(Menu, mf_ByCommand, 101, '&Hallo'); Application.OnMessage := AppMessage; end; procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean); begin if Msg.message = WM_SYSCOMMAND then begin if Msg.wParam = 100 then begin ShowMessage('Wie gehts?'); Handled := True; end; if Msg.wParam = 101 then begin ShowMessage('Hallo'); Handled := True; end; end; end; Vielleicht kann mir nochmal jemand helfen. :love: Danke UC |
Re: Das Systemmenü der eigenen Anwendung ändern (NonVCL)
In einem NonVCL-Programm sollte das hier
Delphi-Quellcode:
am Besten bei der Behandlung von WM_CREATE in der Window-Prozedur des entsprechenden Fensters stehen.
Menu := GetSystemMenu(HWnd, False);
ModifyMenu(Menu, sc_Close, mf_ByCommand, sc_Close, 'E&xit'#9'Alt+F4'); AppendMenu(Menu, mf_Separator, 0, #0); AppendMenu(Menu, mf_ByCommand, 100, '&wiegehts...'); AppendMenu(Menu, mf_ByCommand, 101, '&Hallo'); Die Reaktion auf WM_SYSCOMMAND kommt ebenfalls in diese Window-Prozedur. |
Re: Das Systemmenü der eigenen Anwendung ändern (NonVCL)
Hilft auch nicht, nur das ich jetzt mein Programm nicht mehr schließen kann :?
Wenn ich auf den X-Button klicke passiert nix mehr. |
Re: Das Systemmenü der eigenen Anwendung ändern (NonVCL)
Funktionieren bei dir die zusätzlich eingefügten Befehle?
Dein Problem klingt nämlich ganz danach, als ob du bei der Nachricht WM_SYSCOMMAND immer 0 zurückgibst. Das darfst du aber nur, wenn du die entsprechende Nachricht auch wirklich verarbeitet hast, in deinem Beispiel, wenn wParam = 100 oder 101 ist. Sonst verhinderst du, dass Windows die vordefinierten Reaktionen auf bestimmte SYSCOMMAND-Nachrichten ausführt - zum Beispiel das Schließen des Fensters. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 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 by Thomas Breitkreuz