AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PopupMenu für ein MenuItem

Ein Thema von Codehunter · begonnen am 19. Aug 2011 · letzter Beitrag vom 22. Aug 2011
Antwort Antwort
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

PopupMenu für ein MenuItem

  Alt 19. Aug 2011, 13:39
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 ^^
  Mit Zitat antworten Zitat
Steku

Registriert seit: 12. Mai 2008
181 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: PopupMenu für ein MenuItem

  Alt 19. Aug 2011, 13:48
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
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: PopupMenu für ein MenuItem

  Alt 19. Aug 2011, 14:01
Ok, mit ein bissi Gebuddel im PSDK hab ich das hier zusammengezimmert:
Code:
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;
Soweit so schlecht, denn AVG scheint nun in meinem Proggi einen Virus zu entdecken Davon abgesehen funktioniert die Lösung aber.

EDIT: Verwendet man statt TrackPopupMenuEx die Routine TrackPopupMenu, dann bleibt AVG ruhig. Verdammte FALSE-FAULTS in den Virenscannern

Geändert von Codehunter (19. Aug 2011 um 14:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#4

AW: PopupMenu für ein MenuItem

  Alt 19. Aug 2011, 14:10
das nennt sich dan FalseAlert und ist ein (fehlerhaftes) resultat der Heuristik in deinem AVG.

EDIT: hach, rote box hatte urlaub^^


MFG
Memnarch
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: PopupMenu für ein MenuItem

  Alt 19. Aug 2011, 15:07
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

Geändert von Codehunter (19. Aug 2011 um 15:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: PopupMenu für ein MenuItem

  Alt 22. Aug 2011, 08:25
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?
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#7

AW: PopupMenu für ein MenuItem

  Alt 22. Aug 2011, 09:44
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;
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz