AGB  ·  Datenschutz  ·  Impressum  







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

Popupmenu TMenuItem Rechtsklick

Ein Thema von Shark99 · begonnen am 27. Jul 2015 · letzter Beitrag vom 29. Jul 2015
Antwort Antwort
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.960 Beiträge
 
Delphi 12 Athens
 
#1

AW: Popupmenu TMenuItem Rechtsklick

  Alt 28. Jul 2015, 06:02
Ich war eben unterwegs, auf dem Handy wollte ich nicht mehr dazu schreiben.
Jedenfalls findet man dazu eigentlich leicht einiges bei Google:
Bei Google suchendelphi tmenuitem right mouse click
Unter anderem auch fertigen Code zu der Message, die ich gepostet habe:
http://stackoverflow.com/questions/3...em-right-click
http://www.delphipages.com/forum/sho...d.php?t=180337

Zum Sinn:
Man denke an die Favoriten in diversen Browsern, die Jumplist ab Windows 7 in der Taskleiste, schon genannt wurden Dateien in Menüs, ...
Sebastian Jänicke
AppCentral

Geändert von jaenicke (28. Jul 2015 um 07:01 Uhr)
  Mit Zitat antworten Zitat
Shark99

Registriert seit: 16. Mai 2007
403 Beiträge
 
#2

AW: Popupmenu TMenuItem Rechtsklick

  Alt 28. Jul 2015, 10:46
Ich war eben unterwegs, auf dem Handy wollte ich nicht mehr dazu schreiben.
Jedenfalls findet man dazu eigentlich leicht einiges bei Google:
Bei Google suchendelphi tmenuitem right mouse click
Unter anderem auch fertigen Code zu der Message, die ich gepostet habe:
http://stackoverflow.com/questions/3...em-right-click
http://www.delphipages.com/forum/sho...d.php?t=180337

Zum Sinn:
Man denke an die Favoriten in diversen Browsern, die Jumplist ab Windows 7 in der Taskleiste, schon genannt wurden Dateien in Menüs, ...
Ich habe doch gepostet dass ich Code gefunden hab und sogar zu Stackoverflow gelinkt. Die RCPopupMenu Lösung (hab gleichen Code verlinkt wie dein DelphiPages Link) funktioniert nicht sobald man entweder Menüeinträge dymanisch erzeugt oder einige per Visible nicht anzeigt.

Die zweite Lösung mit WM_MENURBUTTONUP hab ich auch versucht. Hätte es mit dazu schreiben sollen.

Mit WM_MENURBUTTONUP funktionieren die Klicks zwar aber es gibt zwei Probleme.

1. Ich bekomme nicht mit ob ein Rechtsklick oder ein Linksklick durchgeführt wurde.
2. Das Popupmenü verschwindet sofort nach dem Klick. Wenn ich in Word, IE oder Firefox einen Menüeintrag rechtsklicke wird ein neues Popup-Menü angezeigt, das alte Menü bleibt aber sichtbar so lange bis im neuem Popupmenü etwas ausgewählt wurde.

Geändert von Shark99 (28. Jul 2015 um 10:54 Uhr)
  Mit Zitat antworten Zitat
Shark99

Registriert seit: 16. Mai 2007
403 Beiträge
 
#3

AW: Popupmenu TMenuItem Rechtsklick

  Alt 28. Jul 2015, 13:19
Hab noch was Interessantes entdeckt bei der zweiten Lösung (die mit den zwei problematischen Punkten).

Auch wenn der Rechtsklick damit funktioniert, wird die Funktion MenuRButtonUp() überhaupt nicht aufgerufen. Label1.Caption ändert sich nie. Projekt hab ich angehängt.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls;

type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    PopupItem11: TMenuItem;
    popupitem21: TMenuItem;
    submenu1: TMenuItem;
    Label1: TLabel;
    procedure PopupItem11Click(Sender: TObject);
    procedure PopupItem21Click(Sender: TObject);
    procedure PopupItemClick(Sender: TObject);
    procedure PopupMenu1Popup(Sender: TObject);
  private
    FSelectedItem: TMenuItem;
    FTracking: Boolean;
    procedure MenuRButtonUp(var Msg: TMessage); message WM_MENURBUTTONUP;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.MenuRButtonUp(var Msg: TMessage); // ??? wird nie aufgerufen
var
  Cmd: UINT;
begin
  Label1.Caption := TimeToStr(now);
  LongBool(Cmd) := TrackPopupMenuEx(PopupMenu1.Handle,
                            TPM_RECURSE or TPM_BOTTOMALIGN or TPM_RETURNCMD,
                            Mouse.CursorPos.X, Mouse.CursorPos.Y, Handle, nil);
  if Cmd <> 0 then
    PopupMenu1.DispatchCommand(Cmd);
  inherited;
end;


procedure TForm1.PopupItem11Click(Sender: TObject);
begin
  Caption := TimeToStr(Now)+' Popup Item 1 clicked on ';
end;

procedure TForm1.PopupItem21Click(Sender: TObject);
begin
  // whatever..
  Caption := TimeToStr(Now)+' Popup Item 2 clicked on ';
end;

procedure TForm1.PopupItemClick(Sender: TObject);
begin
  Caption := TimeToStr(Now)+' clicked on '+TMenuItem(Sender).Caption;
end;

procedure TForm1.PopupMenu1Popup(Sender: TObject);
var mi : TMenuItem;
begin
  submenu1.Clear;
  mi := TMenuItem.Create(PopupMenu1);
  mi.Caption := 'Test1';
  mi.OnClick := PopupItemClick;
  submenu1.Add(mi);
  mi := TMenuItem.Create(PopupMenu1);
  mi.Caption := 'Test2';
  mi.OnClick := PopupItemClick;
  submenu1.Add(mi);
end;

end.
Angehängte Dateien
Dateityp: zip MenuTest.zip (251,5 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.960 Beiträge
 
Delphi 12 Athens
 
#4

AW: Popupmenu TMenuItem Rechtsklick

  Alt 28. Jul 2015, 13:40
Füge mal in dem PopupMenu1Popup am Ende noch hinzu:
Delphi-Quellcode:
  TrackPopupMenuEx(PopupMenu1.Handle,
                            TPM_RECURSE or TPM_BOTTOMALIGN or TPM_RETURNCMD,
                            Mouse.CursorPos.X, Mouse.CursorPos.Y, Handle, nil);
Funktioniert auch noch nicht alles (das erste Menü reagiert nicht auf Klicks), aber mehr als vorher.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Shark99

Registriert seit: 16. Mai 2007
403 Beiträge
 
#5

AW: Popupmenu TMenuItem Rechtsklick

  Alt 28. Jul 2015, 13:51
Verstehe ehrlich gesagt den Sinn deines Codes nicht. Damit geht bei jedem Klick das Popupmenü nochmal auf, und zwar auch beim Linksklick.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.960 Beiträge
 
Delphi 12 Athens
 
#6

AW: Popupmenu TMenuItem Rechtsklick

  Alt 28. Jul 2015, 14:09
Setz mal einen Haltepunkt auf MenuRButtonUp. Da kommst du nämlich nun an. Du kannst das auch anderswo einbauen, ich wollte nur zeigen, dass du so den Rechtsklick bekommst.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Shark99

Registriert seit: 16. Mai 2007
403 Beiträge
 
#7

AW: Popupmenu TMenuItem Rechtsklick

  Alt 28. Jul 2015, 14:17
Das stimmt, allerdings bekommt man 2+ Popupmenüs angezeigt, und zwar auch beim Linksklicks.

TrackPopupMenuEx() zeigt zwangsläufig das Menü an. Man kann aber .Popup() durch TrackPopupMenuEx() nicht ersetzen, weil TrackPopupMenuEx() keine Events auslöst (kein OnPopup etc).

p.s.

Habe nun versucht WM_MENURBUTTONUP in WndProc() abzufangen und dort einen Timer für 500ms zu starten damit ich erkenne dass ein Menü-Rechsklick stattgefunden hat. Aber MENURBUTTONUP wird in WndProc nie ausgelöst. Bin langsam am verzweifeln.

Geändert von Shark99 (28. Jul 2015 um 14:26 Uhr)
  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 02: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