![]() |
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 |
Re: Nodedarstellung im TTreeView verschieben
push...
|
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:
Hier gibt es zwar keine Feste Position, aber der aktuelle Knoten wird in den sichtbaren Bereich reinverschoben.
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin if Assigned(TreeView1.Selected) then TreeView1.Selected.MakeVisible; end; [edit] komisch, jetzt liefert DisplayRect.Left doch die richtige Prosition :gruebel: |
Re: Nodedarstellung im TTreeView verschieben
Was spricht gegen Node.MakeVisible?
|
Re: Nodedarstellung im TTreeView verschieben
Wäre wohl zu einfach?
Delphi-Quellcode:
Theoretisch sollte es klappen, aber irgendwas stimmt mit dem ScrollBy nicht.
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin if Assigned(TreeView1.Selected) then TreeView1.ScrollBy(19 - TreeView1.Selected.DisplayRect(True).Left, 0); end; 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