Einzelnen Beitrag anzeigen

Benutzerbild von KingIR
KingIR

Registriert seit: 19. Feb 2006
81 Beiträge
 
Delphi 2006 Professional
 
#1

VirtualTreeView: Node Expanded hinzufügen

  Alt 13. Jan 2008, 12:30
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!!

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
  Mit Zitat antworten Zitat