so. nach langem Hin und Her hab ich es endlich geschafft^^
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
type
TMyNode = record
Name: String;
Node: PVirtualNode;
end;
var
i, k: Integer;
TreeData: TTreeData;
tmp: TStringDynArray;
tmpNode: PVirtualNode;
NodeList: array of TMyNode;
tmp_: cardinal;
function GetNode(NName: String): PVirtualNode;
var
j: integer;
begin
Result := nil;
for j := Low(NodeList) to High(NodeList) do
if NName = NodeList[j].Name then
Result := NodeList[j].Node;
end;
begin
tmp_ := GetTickCount;
// VirtualStringTree vorbereiten
VST.NodeDataSize:=SizeOf(TTreeData);
VST.BeginUpdate;
// Liste durchlaufen
for i := 0 to ListBox1.Items.Count - 1 do
begin
tmp := Explode('|', ListBox1.Items[i]);
tmpNode := nil;
// Teile durchlaufen
for k := Low(tmp) to High(tmp) do
begin
TreeData.FCaption := tmp[k];
TreeData.FData := tmp[k];
if GetNode(tmp[k]) = nil then
tmpNode := AddVSTStructure(VST, tmpNode, TreeData)
else
tmpNode := GetNode(tmp[k]);
// Node merken
SetLength(NodeList, Length(NodeList) + 1);
NodeList[Length(NodeList) - 1].Name := tmp[k];
NodeList[Length(nodeList) - 1].Node := tmpNode;
end;
end;
VST.EndUpdate;
caption := inttostr(gettickcount - tmp_) + 'ms';
end;
das Problem ist nur die Geschwindigkeit. Das dauert fast 2 sekunden. die Datei hat 2000 Zeilen....
hat jemand eine effizientere Lösung?
MfG