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 Treeview & PopupMenue & GetNodeAt (https://www.delphipraxis.net/55317-treeview-popupmenue-getnodeat.html)

Sidores 19. Okt 2005 14:27


Treeview & PopupMenue & GetNodeAt
 
Moin,

Ich möchte das wenn man mit der rechten Maustaste auf ein Treenode klickt sich ein PopupMenue öffnet. Das klappt auch soweit, jedoch öffnet sich auch das PopupMenue, wenn ich neben das Treenode klicke.(GetNodeAt rufe ich in dem Ereignis OnContextPopup auf)Kann ich das irgendwie abfangen? Ich benutze für dieses Projekt Delphi 6. Geht das vielleicht bei Delphi 7,..?


Mfg
Sidores

s14 19. Okt 2005 14:59

Re: Treeview & PopupMenue & GetNodeAt
 
Du könntest das Ereignis OnMouseDown verwenden und von dort das PopupMenu manuell anzeigen.

Delphi-Quellcode:
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  p: TPoint;
  n: TTreeNode;
begin

  n := TreeView1.GetNodeAt(X, Y);

  if (Button = mbRight) and (n <> nil) and (X in [n.DisplayRect(True).Left..n.DisplayRect(True).Right]) then
    if GetCursorPos(p) then PopupMenu1.Popup(p.X, p.Y);
end;

Lannes 19. Okt 2005 19:05

Re: Treeview & PopupMenue & GetNodeAt
 
Hallo,

oder so:
Delphi-Quellcode:
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var p : TPoint;
begin
  if (htOnItem in TreeView1.GetHitTestInfoAt(x,y)) then
    begin
      p.x := X;
      p.y := Y;
      p := TreeView1.ClientToScreen(p);
      PopupMenu1.Popup(p.x,p.y);
    end;
end;

marabu 19. Okt 2005 21:38

Re: Treeview & PopupMenue & GetNodeAt
 
Hallo Leute,

in D7 kann man TreeView.RightClickSelect auf TRUE setzen, ordnet der TreeView ein PopupMenu zu und schreibt einen Event-Handler für OnPopup():

Delphi-Quellcode:
procedure TDemoForm.TreeMenuPopup(Sender: TObject);
begin
  with TreeView.ScreenToClient(Mouse.CursorPos) do
    if not (htOnItem in TreeView.GetHitTestInfoAt(x, y)) then
      Abort;
end;
Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:21 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