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 Nodedarstellung im TTreeView verschieben (https://www.delphipraxis.net/141691-nodedarstellung-im-ttreeview-verschieben.html)

peschai 14. Okt 2009 08:26


Nodedarstellung im TTreeView verschieben
 
Hallo

Wenn ich eine einen Knoten im TTreeView selektiere möchte ich, daß der jeweils selektierte Knoten immer mit demselben Abstand zum linken Rand dargestellt wird. Wenn also ein Kind selektiert wird, so verschiebt sich automatisch eine evt. vorhandene Horzscrollbar.Position. Sinn des ganzen ist die TreeView Breite schmal halten zu können und nicht manuell den Scrollbar bemühen zu müssen. Bitte mit Bezug auf original TTreeView anworten. Danke

peschai 26. Okt 2009 23:12

Re: Nodedarstellung im TTreeView verschieben
 
push...

himitsu 26. Okt 2009 23:38

Re: Nodedarstellung im TTreeView verschieben
 
TreeView1.Selected.DisplayRect(True).Left liefert schonmal die Linke Position des Textes,

Allerdings wird hier das horizontale Scolling ignoriert (das Vertikale ist in den werten enthalten),
sonst könnte man z.B. in TreeView1Change ganz einfach per TreeView1.ScrollBy(Abstand - xxx.Left, 0); die Position anpassen.

Leider stimmt halt die Linke/Rechte Position nicht ganz mit den ScrollPositionen überein,
also müßte man erstmal irgendwie die aktuelle Scrollposition rausfinden.


Weiß zufällig wer, wie man bei einem TreeView due horizontale Scrollposition ausliest?



'ne einfache Lösung wäre erstmal
Delphi-Quellcode:
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  if Assigned(TreeView1.Selected) then
    TreeView1.Selected.MakeVisible;
end;
Hier gibt es zwar keine Feste Position, aber der aktuelle Knoten wird in den sichtbaren Bereich reinverschoben.


[edit]
komisch, jetzt liefert DisplayRect.Left doch die richtige Prosition :gruebel:

omata 26. Okt 2009 23:43

Re: Nodedarstellung im TTreeView verschieben
 
Was spricht gegen Node.MakeVisible?

himitsu 27. Okt 2009 00:03

Re: Nodedarstellung im TTreeView verschieben
 
Wäre wohl zu einfach?

Delphi-Quellcode:
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  if Assigned(TreeView1.Selected) then
    TreeView1.ScrollBy(19 - TreeView1.Selected.DisplayRect(True).Left, 0);
end;
Theoretisch sollte es klappen, aber irgendwas stimmt mit dem ScrollBy nicht.
Jedenfalls funktioniert es innerhalb dieser Ereignisprozedur nicht richtig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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 by Thomas Breitkreuz