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 VirtualTreeView: Node Expanded hinzufügen (https://www.delphipraxis.net/106581-virtualtreeview-node-expanded-hinzufuegen.html)

KingIR 13. Jan 2008 11:30


VirtualTreeView: Node Expanded hinzufügen
 
Hallihallo,

ich würde gerne einzelne Nodes meiner VTW schon direkt beim Hinzufügen Expanded haben.

Ich füge meine Nodes über AddChild bzw. InsertNode ein. Ich weiß, dass das nicht der bevorzugte Weg ist, aber da die Nodes alle erst nach und nach eintreffen und ich vorher keinerlei Informationen über Anzahl oder Art habe, ist das so für mich einfacher als im Hintergrund die komplette Struktur zu modellieren und dann "echt virtuell" an die VTW zu übergeben.

Jedenfalls sind einige Knoten mit einem Flag versehen, dass dazu führen soll, dass sie gleich ausgeklappt bzw. Expanded dargestellt werden.

Folgendes habe ich schon probiert, klappt jedoch leider nicht (Nodes bleiben alle eingeklappt):

Delphi-Quellcode:
// Meine OnInitNode-Prozedur:

procedure TTrillListMgr.TV_OnInitNode(Sender: TBaseVirtualTree; ParentNode,
  Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var
  NodeData: PListNodeData;
begin
  // ... NodeData ermitteln und überprüfen ...

  if (NodeData sagt dass dieses Element Children haben wird) then
  begin
    Include(InitialStates, ivsHasChildren);
  end;

  if (NodeData sagt dass dieses Element Expanded sein soll) then
  begin
    Include(InitialStates, ivsExpanded);
  end;

  Sender.InvalidateNode(Node);
end;
Die Prozedur wird auch korrekt aufgerufen und die States werden korrekt gesetzt. OnInitChildren verwende ich nicht, da ich ja nicht weiß wieviele Childs die Node haben wird. Direkt nach dem Hinzufügen der Nodes mit AddChild TV.Expanded[NewNode] auf True zu setzen bringt auch nichts.

Mein Verdacht ist dass ich da mit der Reihenfolge der Events irgendwas noch nicht so ganz verstanden habe, daher HILFE!! :wink:

Oder ist das alles Mist was ich da versuche und ich sollte doch den "echt virtuellen" Weg über einen Datenbaum im Hintergrund gehen...? Da habe ich dann nur auch das Problem, dass sich die Anzahl der Childs ständig ändert und ich Probleme bekomme nur aus dem Node.Index, der mit dem OnInitChild-Event eintrifft, den richtigen "Datensatz" für die Node zu ermitteln, vor allem da der Index sich ja zB durch Löschen von Elementen ändert...

Vielen Dank für jegliche Hilfe schonmal :dance:

semo 13. Jan 2008 21:16

Re: VirtualTreeView: Node Expanded hinzufügen
 
Zitat:

AddChild TV.Expanded[NewNode] auf True zu setzen bringt auch nichts.
wenn du addchild aufrufst,
wird die oninitnode procedure nicht sofort ausgeführt.
dies kannst du aber forcieren.
mir fällt nur gerade nicht die entsprechende methode ein.
erst nach dem erfolgten init kannst du dann deinen node auf expanded setzen.

generic 13. Jan 2008 21:32

Re: VirtualTreeView: Node Expanded hinzufügen
 
von den internen states würde ich die finger lassen.
das gibt interessante seiten effekte.

du solltest mit über die funktionen gehen:
Delphi-Quellcode:
node:=vst.addchild(nil);

vst.expanded[node]:=true;
oder
vst.fullexpand(node);
allerdings kannst du erst aufklappen, wenn was zum aufklappen da ist.
sprich du musst erst alle childs einfügen und dann aufklappen.

KingIR 13. Jan 2008 21:48

Re: VirtualTreeView: Node Expanded hinzufügen
 
Zitat:

Zitat von generic
von den internen states würde ich die finger lassen.
das gibt interessante seiten effekte.

Hab auch nur die InitialStates verändert, nicht die internen ... dafür ist OnInitNode ja unter anderem da ;)

Zitat:

allerdings kannst du erst aufklappen, wenn was zum aufklappen da ist.
Juhu, das war der entscheidende Tipp :) Hätte ich ja auch selber drauf kommen können. :drunken: Viielen Dank jedenfalls, funzt nun einwandfrei!


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