Nehmen wir an, ich habe diesen Knoten-Datensatz:
Type
PPerson = ^TPerson;
TPerson = record
Name: String;
Age: Integer;
SomeBool: Boolean;
end;
Um meinen VirtualStringTree aufzufüllen, würde ich folgendes tun:
Procedure AddToTree(Person: TPerson);
Var
Node: PVirtualNode;
Data: PPerson;
Begin
Node := VT.AddChild(nil);
Data := VT.GetNodeData(Node);
Data.Name := Person.Name;
Data.Age := Person.Age;
Data.SomeBool := Person.SomeBool;
End;
Procedure TMyForm.MyButtonClick(Sender: TObject);
Var
Person: TPerson;
Begin
Person.Name := 'Jeff';
Person.Age := 16;
Person.SomeBool := False;
AddToTree(Person);
End:
Nun, während dies funktioniert völlig in Ordnung, ich möchte es zu vereinfachen, so dass jedes Mal, wenn ich neue Felder zum Datensatz hinzufügen, ich nicht die AddToTree-Methode ändern müssen.
Also habe ich dies versucht:
Procedure AddToTree(Person: TPerson);
Begin
VT.AddChild(nil,@Person);
End;
Dies kompiliert, sondern scheint es, dass die PVirtualNode
habe die Daten nicht erhalten, weil mein VT nichts anzeigt, und wenn ich im OnGetText-Ereignis breche, sehe ich, dass die Variablen leer sind.
Was mache ich falsch? :)