Einzelnen Beitrag anzeigen

Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Initialisierung von VirtualTreeView mit ivsExpanded sehr langsam

  Alt 6. Jun 2020, 18:25
Der VirtualTreeView hat genau deshalb seinen Namen, weil eben alles virtuell gemacht werden sollte. Allen Nodes direkt den State ivsExpanded zu geben macht keinen wirklichen Sinn. Du klappst dann 1 Million Nodes auf, obwohl du im schlimmsten Fall nur eine einzige Node sehen müsstest.

Normalerweise gibt man einer Node den InitialState ivsHasChildren . Dann erhalten die Nodes ein Plus-Zeichen und man kann die Node manuell aufklappen. In dem Moment wird dann OnInitChildren aufgerufen und du teilst dem Tree mit, wie viele Child Nodes die Node hat. Das kannst du natürlich mit deiner Variante kombinieren, dass die Node aufgeklappt wird, wenn sie in den sichtbaren Bereich des Trees scrollt. Einfach ExpandNode() aufrufen in dem Moment und alle anderen Events laufen automatisch.

Das hat aber leider den Nebeneffekt, dass es nicht möglich ist, z.B. den Knoten mit Index 123456 mittels ScrollIntoView() genau nach oben zu bugsieren.
Es gibt auch noch die Property TopNode . Damit kannst du dann festlegen, welche Node ganz oben sein soll.
  Mit Zitat antworten Zitat