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/)
-   -   TTreeView.GetNodeAt (https://www.delphipraxis.net/161999-ttreeview-getnodeat.html)

Sailor 1. Aug 2011 14:28

TTreeView.GetNodeAt
 
Ich benutze eine Komponente TTreeView, die auf einer TCustomForm platziert ist und einige hundert Knoten enthält.
Im MouseDownEvent liefert lt. Hilfe die Funktion TTreeView.GetNodeAt(x,y) den Knoten zurück, der sich an der Position [x,y] befindet. Wenn der TreeView aber nun auf den interessierenden Knoten gescrollt werden muß, erhalte ich in OnMouseDown nie diesen Knoten, sondern stets den, der unter der Mausposition [x,y] steht, die hier als absolute Position interpretiert wird, nicht aber als relative Position zum ersten Knoten im TreeView. Woher bekomme ich den Wert Add, der zu y addiert werden muß, um den korrekten Knoten, d.h. den unter der absoluten Position [x,y+Add] zu finden?

FredlFesl 1. Aug 2011 17:03

AW: TTreeView.GetNodeAt
 
Ich verstehe dein Problem nicht.

Ich erstelle eine TreeViewe mit 20x20 Knoten, expandiere einige, scrolle runter, klicke auf einen X-beliebigen Knoten und bekomme immer genau den, auf den ich klicke.

Delphi-Quellcode:
unit Unit3;

interface

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

type
  TForm3 = class(TForm)
    TreeView1: TTreeView;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
Var
  i,j : Integer;
  n : TTreeNode;

begin
  for I := 0 to 20 do begin
  n := TreeView1.Items.Add(nil,IntToStr(i));
    for j := 0 to 20  do
      TreeView1.Items.AddChild(n,n.text+'/'+intToStr(j));
  end;
end;

procedure TForm3.TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  n : TTreeNode;

begin
  n := TreeView1.GetNodeAt(X,Y);
  if n<>nil then
    label1.Caption := n.Text;
end;

end.

Sailor 1. Aug 2011 17:31

AW: TTreeView.GetNodeAt
 
Ja, das scheint ein spezielles Problem in meiner Umgebung zu sein. Habe gerade eine Testdemo mit einem TreeView erstellt, klappt einwandfrei. In meiner Anwendung ist der TreeView Bestandteil einer Komponente, die eine TForm (ToolWindow) ist und diese wird dynamisch erzeugt. Wahrscheinlich gibt es da Wechselwirkungen mit anderen Events, muß ich ausforschen. Thanx to you, das Problem liegt also an mir und diese Gewißheit ist schon mal hilfreich.


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