![]() |
VirtualStringTree Daten kopieren und speichern
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,
ich kopiere je nach Auswahl Daten von einem VST in ein anderes VST(siehe Bild).
Delphi-Quellcode:
Da die Datensätze im unteren VST angezeigt werden, scheint das ganze zu funktionieren.
procedure TSourceButtonPanel.DataFromSourceToTarget(All : Boolean);
var NE : TVTVirtualNodeEnumerator; SourceData : PNodeData; DestData : PNodeData; begin if (Assigned(FSourceView) and Assigned(FTargetView)) then begin if All then FSourceView.SelectAll(true); NE := FSourceView.SelectedNodes(false).GetEnumerator; while NE.MoveNext do begin SourceData := FSourceView.GetNodeData(Ne.Current); DestData := FTargetView.GetNodeData(FTargetView.AddChild(nil)); CopyNodeData(DestData, SourceData); end; FSourceView.DeleteSelectedNodes; end; end; Nur funktioniert das Speichern nicht:(
Delphi-Quellcode:
Data ist zwar ungleich NIL, aber leer. Nachdem Zugriff sind im VST die Nodes zwar noch da, aber GetText bringt nur ''.
procedure TToolIniLoader.WriteFile;
var Node : PVirtualNode; Data : PNodeData; begin FEntryCount := 0; FVST.BeginUpdate; Node := FVST.GetFirst(); while Node <> nil do begin Data := FVST.GetNodeData(Node); NodeDataToIni(Data^); Node := FVST.GetNext(Node); Inc(FEntryCount); end; FVST.EndUpdate; end; Kennt jemand das Problem und/oder die Lösung? |
AW: VirtualStringTree Daten kopieren und speichern
Habe ich etwas verbrochen?
|
AW: VirtualStringTree Daten kopieren und speichern
Ja, du verschweigst uns, wie
Delphi-Quellcode:
deklariert ist :stupid:
TNodeData
Ich vermute mal ein Record mit
Delphi-Quellcode:
Feldern. Da könnte auch das Problem liegen, wenn das beim
string
Delphi-Quellcode:
nicht berücksichtigt wird.
CopyNodeData
|
AW: VirtualStringTree Daten kopieren und speichern
Moin, Moin,
erwischt:oops: Die Vermutung trifft ins Schwarze:wink:
Delphi-Quellcode:
Sicherlich gibt es noch mehr Felder, aber die Datentypen sind abschließend.
PNodeData = ^TNodeData;
TNodeData = record begin EntryName : String; Aliasname : String; Category : TCategory; Datatype : TDataType; Description : String; DisplayName : String; Enabled : Boolean; OSFamily : TOSFamily; Remarks : TStringList; Searchstr : TStringList; Usertype : TUserType; end; ... procedure TSourceButtonPanel.CopyNodeData(var Destination : PNodeData; const Source : PNodeData); begin with Destination^ do begin EntryName := Source^.EntryName; Aliasname := Source^.Aliasname; Category := Source^.Category; Datatype := Source^.Datatype; Description := Source^.Description; DisplayName := Source^.DisplayName; Enabled := Source^.Enabled; OSFamily := Source^.OSFamily; if (Assigned(Source^.Remarks) and (Source^.Remarks.Count > 0)) then begin Remarks := TStringList.Create; Remarks.AddStrings(Source^.Remarks); end; if (Assigned(Source^.Searchstr) and (Source^.Searchstr.Count > 0)) then begin Searchstr := TStringList.Create; Searchstr.AddStrings(Source^.Searchstr); end; Usertype := Source^.Usertype; end; end; Die Typen TCategory, TDataType, TOSFamily, TUserType sind normale Enums. Was mich bei der gazen Sache wurmt ist, dass die Einträge zwar kopiert und angezeigt werden, aber in WriteFile(siehe Anhang Pos #1) Leer sind. |
AW: VirtualStringTree Daten kopieren und speichern
Zum einen ist das
Delphi-Quellcode:
in
var
Delphi-Quellcode:
... unsinnig. Der Pointer wird doch in der Methode nicht verändert und soll (darf) nicht geändert werden. Das dokumentiert man mit
CopyNodeData
Delphi-Quellcode:
.
CopyNodeData( const Source, Dest: PNodeData );
Jetzt zu den Strings, ich bin mir nicht sicher, ob hier das Reference-Counting der Strings auch korrekt behandelt wird. Denn dann passiert genau das, was du beobachtest. Du siehst den Text in der Anzeige, weil zum Zeitpunkt der Anzeige sind die alten Nodes noch nicht gelöscht. Dann schmeisst du die raus und die Strings wandern in Nirwana ab. |
AW: VirtualStringTree Daten kopieren und speichern
Also am
Code:
lag es nicht.
const
Zitat:
doch nicht etwa
Code:
)?
SetString(var s: String; buffer : Pchar; len : Integer)
[Edit] Auf SetString umgestellt und am Ergbnis ändert sich: NICHTS [/Edit] |
AW: VirtualStringTree Daten kopieren und speichern
@Sir Rufo
Ich habe mir deine 'Vermutung' mal durch den Kopf gehen lassen, (gefühlte 25T) Codezeilen umgestellt und siehe da: es geht:lol: Die Lösung ist hier ![]() Danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz