ich habe ein Problem mit dem Streaming von TTreeNode-Properties. Ich fülle ein TTreeView mit diversen TTreeNodes und streame das mittels Komponentenstreaming
Code: Alles auswählen
// schreiben
WriteComponentAsBinaryToStream(MemoryStream, TreeView1);
// und lesen
ReadComponentFromBinaryStream(MemoryStream, TComponent(TreeView1), @OnFindClass, self, nil, nil);
Nun will ich aber die TreeNodes erweitern mit:
Code: Alles auswählen
type
TExtendedTreeNode = class(TTreeNode)
private
FValue: Integer;
public
constructor Create(AOwner: TTreeNodes); override;
published
property Value: Integer read FValue write FValue;
end;
Code: Alles auswählen
procedure TMeinFormular.FormCreate(Sender: TObject);
begin
TreeView1.OnCreateNodeClass := @CreateExtendedNodeClass;
TreeView1.OnCustomCreateItem := @CreateExtendedNodeItem;
end...
// und weiter
procedure TMeinFormular.CreateExtendedNodeClass(Sender: TCustomTreeView; var NodeClass: TTreeNodeClass);
begin
NodeClass := TExtendedTreeNode;
end;
procedure TMeinFormular.CreateExtendedNodeItem(Sender: TCustomTreeView; var ATreeNode: TTreeNode);
begin
ATreeNode := TMeinFormular.Create(Sender.Items) as TTreeNode;
end;
Ich habe zwar einen häßlichen Workaround, indem ich diese nach WriteComponentAsBinaryToStream einfach in den MemoryStream mit hineinschreibe, aber das ist natürlich nicht das Wahre.
Hat jemand von Euch schonmal sowas gemacht oder erkennt jemand, wo bei mir der Denkfehler liegt?
Vielen Dank für Eure Hinweise!
Schöne Weihnachten!