AGB  ·  Datenschutz  ·  Impressum  







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

TTreeView.GetNodeAt

Ein Thema von Sailor · begonnen am 1. Aug 2011 · letzter Beitrag vom 1. Aug 2011
Antwort Antwort
Sailor

Registriert seit: 20. Jul 2008
Ort: Balaton
112 Beiträge
 
Delphi 2010 Professional
 
#1

TTreeView.GetNodeAt

  Alt 1. Aug 2011, 14:28
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?
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#2

AW: TTreeView.GetNodeAt

  Alt 1. Aug 2011, 17:03
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.
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Sailor

Registriert seit: 20. Jul 2008
Ort: Balaton
112 Beiträge
 
Delphi 2010 Professional
 
#3

AW: TTreeView.GetNodeAt

  Alt 1. Aug 2011, 17:31
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.
  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 07:11 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