Einzelnen Beitrag anzeigen

Aviator

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

AW: VirtualStringTree und Klasseninstanzen - Node Data finden

  Alt 17. Apr 2018, 10:50
Zitat:
Auch da hat er Recht wenn er sagt, dass das schlechtes Design ist.
Oh ich wollte nicht, dass ihr mich falsch versteht. Ich stelle eure aller Kenntnisse nicht in Frage.
Ich frage nur in die Runde.
Ich habe das auch nicht falsch verstanden. Ich wollte nur die Aussage von TiGü untermauern und damit sagen, dass er das bereits korrekt gesagt hat.

Zitat:
Wenn Daten hinzugefügt oder gelöscht werden, dann solltest du die Daten auch im VST aktualisieren - sprich löschen und neu erstellen.
Also Clear aufrufen und RootNodeCount setzen. Dass das Setzen von RootNodeCount alles neuzeichnet, das muss man erst einmal wissen. Denn der Name sagt was komplett anderes.
Mit erstellen meinst du ja RootNodeCount setzen denke ich doch?
Ja, das meine ich damit. Ich finde es ja schonmal gut, dass du überhaupt RootNodeCount nutzt. Das ist auch die richtige Vorgehensweise. Viele fangen mit AddChild() an und müssen sich dann irgendwann später wieder umstellen.

Wie ich sehe, nimmt das langsam vernünftige Formen an.
Höre auf das, was Aviator sagt. Er ist sehr erfahren mit dem VST.
Danke für das Lob.

Alternativ zum RootNodeCount und OnInitNode-Eventhandler kannst du natürlich auch versuchen mit AddChild zu arbeiten.
Delphi-Quellcode:
 
  // PseudoCode
  for deinTyp in deinerListe do
  begin
    vst.AddChild(nil, deinTyp);
  end;
Kommt auf das gleiche hinaus, aber vielleicht verstehst du das in zwei Monaten noch, wenn du dir den Code nochmal anguckst.
Bloß nicht. Zum Glück habe ich vorm Absenden deinen Post, der zwischenzeitlich erstellt wurde, nochmal gelesen.

Er ist mit RootNodeCount schon auf dem richtigen Weg. AddChild() ist zwar anfängerfreundlicher, aber wenn er sowieso schon richtig angefangen hat, dann sollten wir ihn auf keinen Fall auf die falsche Spur locken.

Anbei mal noch ein Auszug aus dem Source der VirtualTreeView Komponente (Hervorhebung von mir):

Zitat von VirtualTreeView Source:
function TBaseVirtualTree.AddChild(Parent: PVirtualNode; UserData: Pointer = nil): PVirtualNode;

// Adds a new node to the given parent node. This is simply done by increasing the child count of the
// parent node. If Parent is nil then the new node is added as (last) top level node.
// UserData can be used to set the first sizeof(Pointer) bytes of the user data area to an initial value which can be used
// in OnInitNode and will also cause to trigger the OnFreeNode event (if <> nil) even if the node is not yet
// "officially" initialized.
// AddChild is a compatibility method and will implicitly validate the parent node. This is however
// against the virtual paradigm and hence I dissuade from its usage.
  Mit Zitat antworten Zitat