Hi
ich versuche in ein TTreeView ein paar Knoten einzufügen (so ca. 10000 Knoten
).
Das ganze soll später mal den Bestand meiner Musik auflisten^^
Hier mal der Code:
Delphi-Quellcode:
TreeView1.Visible := False;
TreeView1.Items.Clear;
Inta := TstringList.Create;
setLength(Alb, 0);
TreeView1.Items.Add(NIL, 'Meine Musik');
TreeView1.Images := ImageList1;
for I := 1 to high(l) do // Diese Schleife braucht sehr lang
if Inta.IndexOf(l[i]^.Interpret) < 0 then
begin
Node := TreeView1.Items.AddChild(TreeView1.Items[0], l[i]^.Interpret);
Node.ImageIndex := 1;
Node.SelectedIndex := 1;
Node := TreeView1.Items.AddChild(Node, l[i]^.Album);
Node.ImageIndex := 2;
Node.SelectedIndex := 2;
Node := TreeView1.Items.AddChild(Node, l[i]^.Titel);
Node.ImageIndex := 3;
Node.SelectedIndex := 3;
Inta.Add(l[i]^.Interpret);
SetLength(Alb, length(Alb)+1);
ka[high(Alb)] := TStringList.Create;
ka[high(Alb)].Add(l[i]^.Album);
end else
if Alb[Inta.IndexOf(l[i]^.Interpret)].IndexOf(l[i]^.Album) < 0 then
begin
Node := TreeView1.Items.AddChild(TreeView1.Items[0].Item[Inta.IndexOf(l[i]^.Interpret)], l[i]^.Album);
Node.ImageIndex := 2;
Node.SelectedIndex := 2;
Node := TreeView1.Items.AddChild(Node, l[i]^.Titel);
Node.ImageIndex := 3;
Node.SelectedIndex := 3;
Alb[Inta.IndexOf(l[i]^.Interpret)].Add(l[i]^.Album);
end else begin
Node := TreeView1.Items.AddChild(TreeView1.Items[0].
Item[Inta.IndexOf(l[i]^.Interpret)].
Item[Alb[Inta.IndexOf(l[i]^.Interpret)].indexOf(l[i]^.Album)], l[i]^.Titel);
Node.ImageIndex := 3;
Node.SelectedIndex := 3;
end;
TreeView1.Items[0].AlphaSort(True);
if (TreeView1.Items.Count <= (TreeView1.Height/16.25)) and not CheckBox1.Checked then
TreeView1.Items[0].Expand(True) else
TreeView1.Items[0].Expand(False);
Inta.Free;
if length(Alb) > 0 then
for I := 0 to high(Alb) do
Alb[i].Free;
TreeView1.Visible := True;
Inta ist dabei eine Liste mit den Interpreten (damit ich sehe ob ich schon den Interpret hinzugefügt habe oder ob ich doch noch einen Knoten erzeugen muss) und Alb eine Liste der jeweiligen Alben.
Mein Problem: bei ca 5000 Datensätzen (High(l) = 5000) dauert die Schleife in der die Knoten hinzugefügt werden ca 13 Sekunden...
Ich hab auch schon versucht Alb am Anfang auf length = 3000 zu setzen damit ich nicht immer erneut die Länge um 1 erhöhen muss, hat aber exakt gleich lang gedauert -.-
Hat jemand ne Idee welcher Befehl in der Schleife so lange dauert und wie ich das umgehen kann?
Danke für jede Antwort.
mfg.Dominik