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 Das Systemmenü der eigenen Anwendung ändern (NonVCL) (https://www.delphipraxis.net/13745-das-systemmenue-der-eigenen-anwendung-aendern-nonvcl.html)

Uncle Cracker 25. Dez 2003 21:30


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

MathiasSimmack 25. Dez 2003 21:36

1000 und 1 Beitrag
 
Das sagen Luckie und Motzi zum Thema Änderung. Wenn du eigene Punkte hinzufügen bzw. vorhandene entfernen willst, da muss der Luckie mal was posten, der hatte schon mal irgendwo Code dafür.

Uncle Cracker 29. Dez 2003 21:06

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:
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;
Nur leider kann man das nicht in NonVCL umwandeln, ich zumindestens nicht :(

Vielleicht kann mir nochmal jemand helfen.


:love: Danke UC

Niko 29. Dez 2003 21:33

Re: Das Systemmenü der eigenen Anwendung ändern (NonVCL)
 
In einem NonVCL-Programm sollte das hier
Delphi-Quellcode:
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');
am Besten bei der Behandlung von WM_CREATE in der Window-Prozedur des entsprechenden Fensters stehen.
Die Reaktion auf WM_SYSCOMMAND kommt ebenfalls in diese Window-Prozedur.

Uncle Cracker 29. Dez 2003 21:44

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.

Niko 30. Dez 2003 17:54

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