der vst ist um einiges schnell als der treeview von windows.
der trick ist die statische speicherverwaltung.
erstell mal ein form, ein vst drauf, 4 spalten
um mit den vst zu arbeiten muss du dir erstmal ein record erstellen welches dann spaeter die daten halten soll.
desweiteren brauchst du einen zeiger auf deine daten.
Delphi-Quellcode:
type
pVstDaten = ^rVstDaten;
rVstDaten = Record
spalte1, spalte2, spalte3 : String;
end;
nun muss du den vst noch mitteilen wie gross deine daten sind.
das geht am besten im form.create
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
VirtualStringTree1.NodeDataSize:=sizeof(rVstDaten);
end;
wenn jetzt ein knoten hinzugefügt wird weiss der vst wieviel platz er jedesmal allocen muss.
um den tree zu füllen machst du folgendes:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
aktueller_knoten : PVirtualNode;
Daten_zum_knoten : pVstDaten;
begin
// u.a. neuzeichnen verhindern
VirtualStringTree1.BeginUpdate;
for i:=0 to 1000 do
begin
aktueller_knoten:=VirtualStringTree1.AddChild(nil);
Daten_zum_knoten:=VirtualStringTree1.GetNodeData(aktueller_knoten);
Daten_zum_knoten.zeile:=i;
Daten_zum_knoten.spalte1:='Das ist der Text Spalte: 1 Zeile:'+inttostr(i);
Daten_zum_knoten.spalte2:='Das ist der Text Spalte: 2 Zeile:'+inttostr(i);
Daten_zum_knoten.spalte3:='Das ist der Text Spalte: 3 Zeile:'+inttostr(i);
end;
// wieder zeichnen lassen;
VirtualStringTree1.EndUpdate;
end;
da baum zeigt jetzt erstmal nur "node" als text an.
es gibt ein ereignis "ongettext"
dort gibts du den text zurueck der im knoten angezeigt werden soll.
hat den vorteil das du die daten beliebig aufbereiten kannst.
procedure TForm1.VirtualStringTree1GetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
var Daten_zum_knoten : pVstDaten;
begin
Daten_zum_knoten:=VirtualStringTree1.GetNodeData(node);
if TextType=ttNormal then
begin
case Column of
0: CellText:=Daten_zum_knoten.spalte1;
1: CellText:=Daten_zum_knoten.spalte2;
2: CellText:=Daten_zum_knoten.spalte3;
3: celltext:='Nun die Dynamische Spalte Nummer 4 mit Zeile:'+IntToStr(Daten_zum_knoten.zeile);
end;
end;
end;
so das sollte es sein.