![]() |
PopupMenu für ein MenuItem
Hallo!
Ich habe in verschiedenen Anwendungen gesehen, dass die für Einträge im MainMenu ein PopupMenu anbieten. Beispiel: Im Firefox das MainMenu mit der linken Maustaste öffnen und dann mit der rechten Maustaste auf einen MenuItem klicken. Es erscheint dann ein PopupMenu. Ist sowas auch mit der VCL realisierbar? Grüße Cody EDIT: Grad gesehen, das war mein 200stes Post hier. Mensch bin ich fleißig, hab nur 8 Jahre dafür gebraucht ^^ |
AW: PopupMenu für ein MenuItem
Hallo Cody,
wenn ich mich richtig erinnere ist es zumindest bei der Verwendung der Action-Kompos auch möglich zusätzliche TActionsClients als ContextItems anzugeben... Gruß, Steku |
AW: PopupMenu für ein MenuItem
Ok, mit ein bissi Gebuddel im PSDK hab ich das hier zusammengezimmert:
Code:
Soweit so schlecht, denn AVG scheint nun in meinem Proggi einen Virus zu entdecken :-( Davon abgesehen funktioniert die Lösung aber.
procedure TForm1.WndProc(var Msg: TMessage);
begin if Msg.Msg = WM_MENURBUTTONUP then begin TrackPopupMenuEx(ppmTest.Handle, TPM_LEFTALIGN or TPM_RECURSE, Mouse.CursorPos.X, Mouse.CursorPos.Y, Handle, 0); end; inherited WndProc(Msg); end; EDIT: Verwendet man statt TrackPopupMenuEx die Routine TrackPopupMenu, dann bleibt AVG ruhig. Verdammte FALSE-FAULTS in den Virenscannern :-( |
AW: PopupMenu für ein MenuItem
das nennt sich dan FalseAlert und ist ein (fehlerhaftes) resultat der Heuristik in deinem AVG.
EDIT: hach, rote box hatte urlaub^^ MFG Memnarch |
AW: PopupMenu für ein MenuItem
Ich kann mich erinnern, die haben es mal FALSE_FAULT genannt. Ist aber Wurscht :-)
Woran ich mir jetzt noch die Zähne ausbeiße ist, herauszufinden, auf welchem MenuItem die rechte Maustaste gedrückt wurde. WM_MENURBUTTONUP liefert nur das Handle des Menüs, im dem der Item steckt, mehr nicht. EDIT: Laut PSDK müßte MenuItemFromPoint einen Rückgabewert vom Typ int haben, in Delphi 7 ist es aber als LongBool implementiert :?: |
AW: PopupMenu für ein MenuItem
Ich schubs den Thread noch mal nach oben. Inzwischen bin ich so weit gekommen dass ich MenuItemFromPoint am Laufen habe. Es liefert mir einen absoluten Index des MenuItem im betreffenden TMainMenu. Nur wie komme ich von dem absoluten Index auf den konkreten MenuItem in der hierarchischen Struktur von TMainMenu?
|
AW: PopupMenu für ein MenuItem
Das ist ziemlich simpel:
Hier ein Beispiel, das die Caption des MenuItems in die Caption des Formulars schreibt.
Delphi-Quellcode:
procedure WMMENURBUTTONUP(var Message: TMessage); message WM_MENURBUTTONUP;
//... procedure TForm58.WMMENURBUTTONUP(var Message: TMessage); begin Caption := MainMenu1.FindItem(Message.LParam, fkHandle)[Message.wParam].Caption; inherited; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:41 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