![]() |
Ein eigenes menü bei rechtsklick auf taskbar icon
Wie bekomm ich mein eigenes popup menu in den Taskbar eintrag meines progs? (ich meine nicht das tray-ico)
|
Re: Ein eigenes menü bei rechtsklick auf taskbar icon
Dazu musst du das SystemMenu verändern. Das schöne an Delphi ist, dass der Button in der Taskleiste ein eigenes Fenster ist und somit unabhängig von dem eigentlichen ProgrammFormular ein eigenes Menu hat.
Delphi-Quellcode:
Dann musst du noch ein TApplicationEvents-Objekt auf deinem Formular plazieren und für das Event OnMessage folgendes festlegen:
procedure TForm1.FormCreate(Sender: TObject);
var SysMenu: HMENU; i: Integer; begin // Hier holen wir uns das Menu aus der Taskleiste... SysMenu := GetSystemMenu(Application.Handle, False); // und löschen alle Elemente while DeleteMenu(SysMenu, 0, MF_BYPOSITION) do; // Für jedes Element im PopupMenu for i := 0 to Pred(PopupMenu1.Items.Count) do begin // wird abhängig von der Caption... if PopupMenu1.Items[i].Caption = '-' then // entweder ein Seperator... AppendMenu(SysMenu, MF_SEPARATOR, 0, '') else // oder ein MenuItem mit einer ID basierend auf dem Index erzeugt AppendMenu(SysMenu, MF_STRING, WM_USER + Succ(i), PChar(PopupMenu1.Items[i].Caption)); end; end;
Delphi-Quellcode:
Wenn allerdings MenuItems mit Checkhäckchen oder inaktive erstellt werden sollen, ist das etwas aufwändiger. Schau dir doch einfach mal die
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean); begin // Wenn ein eigenes Menu angeklickt wurde... if (Msg.wParam > WM_USER) and (Msg.wParam <= (WM_User + PopupMenu1.Items.Count)) then // einen Klick auf das zugehörige PopupMenuItem simulieren... PopupMenu1.Items[Pred(Msg.wParam - WM_USER)].Click; end; ![]() |
Re: Ein eigenes menü bei rechtsklick auf taskbar icon
Danke!!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:07 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