![]() |
Fragen zu VirtualTreeView
Moin,
ich arbeite das Tutorial zu Virtualtreeview durch und habe schon auf den ersten Seiten zwei Fragen: 1) auf Seite zwei wird geschrieben wie man an einer bestimmten Stelle einen Node einfügen kann:
Delphi-Quellcode:
allerdings wird bei mir das "amInsertAfter" als unbekannt markiert - fehlt mir da ein uses ?
Node := vst.InsertNode(vst.FocusedNode, amInsertAfter);
2) auf Seite 3 werden Noites mit Beschriftung erstellt:
Delphi-Quellcode:
Ich hötte erwartet das jetzt statt "Node" immer "Node-Nummer 1..2..3..4..usw" steht - es steht aber weiterhin nur Node.
function AddVSTStructure(AVST: TCustomVirtualStringTree; ANode: PVirtualNode;
ARecord: TTreeData): PVirtualNode; var Data: PTreeData; begin Result:=AVST.AddChild(ANode); Data:=AVST.GetNodeData(Result); Avst.ValidateNode(Result, False); Data^.FCaption:=ARecord.FCaption; end; procedure TForm1.Button3Click(Sender: TObject); var I: Integer; TreeData: TTreeData; begin VST.NodeDataSize:=SizeOf(TTreeData); VST.BeginUpdate; for I:=0 to 100 do begin TreeData.FCaption:='Node-Nummer: '+IntToStr(I); AddVSTStructure(VST,nil,TreeData); end; VST.EndUpdate; end; Denke ich da falsch ? Was mache ich denn wenn da nicht nur Node stehen soll.´?? Hans |
AW: Fragen zu VirtualTreeView
amInsertAfter war in der Unit VirtualTrees.pas.
Mit Version 7.6, die du scheinbar nutzt, gab es Breaking Changes. Deswegen ist amInsertAfter jetzt in VirtualTrees.Types.pas. |
AW: Fragen zu VirtualTreeView
Zitat:
|
AW: Fragen zu VirtualTreeView
Zitat:
Zitat:
Hans |
AW: Fragen zu VirtualTreeView
Zitat:
|
AW: Fragen zu VirtualTreeView
Zitat:
Speichere deine Daten in einer ObjectList oder sowas Klassenstruktur. Damit lässt es sich wesentlich besser arbeiten. Das ist anfänglich mehr Aufwand, aber es lohnt sich. |
AW: Fragen zu VirtualTreeView
Zitat:
![]() Bis bald... Thomas |
AW: Fragen zu VirtualTreeView
Zitat:
|
AW: Fragen zu VirtualTreeView
Leider habe ich noch eine Frage da ich etwas noch nicht verstehe - geht um das Speichern der Daten. Ich habe noch nie mit Streams gearbeitet, deswegen stehe ich da ein bisschen auf dem Schlauch.
Zum Speichern wird folgende procedure genutzt:
Delphi-Quellcode:
Da sind die Daten aber nur ein String, wie geht das denn wenn es mehrere Strings sind ? So etwa ? Das kommt mir kompliziert vor:
procedure TForm1.vstSaveNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
Stream: TStream); var Data: PTreeData; Len: integer; begin Data := vst.GetNodeData(Node); Len := Length(Data.TestStr); Stream.write(Len, SizeOf(Len)); Stream.write(PChar(Data.TestStr)^, Len); end;
Delphi-Quellcode:
Wie ist das denn richtig ?
procedure TSerienDB.VSTSaveNode(Sender: TBaseVirtualTree; Node: PVirtualNode; Stream: TStream);
var Data: PTreeData; Len: integer; begin Data := VST.GetNodeData(Node); Len := Length(Data.FCaption); Stream.write(Len, SizeOf(Len)); Stream.write(PChar(Data.FCaption)^, Len); Len := Length(Data.FColumn1); Stream.write(Len, SizeOf(Len)); Stream.write(PChar(Data.FColumn1)^, Len); Len := Length(Data.FColumn2); Stream.write(Len, SizeOf(Len)); Stream.write(PChar(Data.FColumn2)^, Len); Len := Length(Data.FColumn3); Stream.write(Len, SizeOf(Len)); Stream.write(PChar(Data.FColumn3)^, Len); end; Gruss Hans |
AW: Fragen zu VirtualTreeView
Zitat:
Delphi-Quellcode:
Denn PChar = PWideChar
Len := Length(S) * SizeOf(S[1]);
// oder Len := Length(S) * SizeOf(Char); und WideChar = 2 Byte (seit Delphi 2009, also seit 15 Jahren schon) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 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-2025 by Thomas Breitkreuz