Hallo,
ich muß eine Liste in ein Treeview einsortieren.
Allerdings "schraub" ich jetzt schon 2 Tage daran herum, ohne ein vernünftiges Ergebnis erzielt zu haben.
Vielleicht weiß jemand von Euch eine Hilfe.
Mein weiter unten geposteter Code spiegelt meinen derzeitigen Stand wieder.
Er ist nochmehr verwurstet als vorher. Und ich weiß nicht mehr, was ich genau während des Probierens verändert habe.
Ich wollte damit alle bereits in dem aufzunehmenden String vorkommenden Teilelemnte eliminieren und nur den jeweils neuen Begriff (der hinten-dran ist) in dem Tree vermerken. Falls der letzte nicht vorkommt, soll das an einen frühren Knoten angehängt werden, sodaß ein vernünftiger Baum entsteht.
Das schwierige ist nicht der Tree, sondern das Kürzen der Zeilen auf das Wesentliche, Neue.
Vielleicht weiß aber jemand von Euch einen ganz neuen, simplen Ansatz.
auf den ich nicht gekommen bin?
evtl. lohnt es sicht gar nicht, meinen Code anzuschauen und zu reparieren/vestehen zu wollen, weil es vielleicht einfacher geht?
Großen Dank schon einmal hier.
Die Elelmente der Liste hab ich mal mit '\' getrennt. (im Original der Liste ist dies anderes, nicht darstellbares Zeichen)
Code:
{ Folgende Liste soll in einen Tree kopiert werden
####a\Schrauben
####a\Schrauben\Betonschrauben
####a\Schrauben\lang
####a\Schrauben\lang\Holzschrauben
####a\Schrauben\Metallschrauben
####a\Schrauben\sechskantig
####a\Nägel
####a\Nägel\Betonnägel
####a\Nägel\Holz
####a\Nägel\Holz\mitHaken
####b\isometrischeFormen\ ...
einsortiert in ein Treeview sollte das etwa so aussehen:
Liste
|- Schrauben
| |-Betonschrauben
| |-lang
| |-Holzschrauben
| |-Metallschrauben
| |-sechskantig
|- Nägel
| |-Betonnägel
| |-Holz
| |-mitHaken
|-isometrischeFormen
also so
http://www.imagebanana.com/img/ibh7q...0716111537.png
Erklärung zum Code unten:
Also ich gehe die Liste im memo zeilenweise durch.
Packe mir dann, falls die Zeile (die steht in der Liste zwischen unbrauchbarem, daher der Filter), die in Frage kommt und scanne die Stringzeile nach "\" und füge die getrennten Elemente in eine Liste2 ein.
Kommt der Begriff in der Liste2 als nächstletzter vor, soll der Knoten als Child angehängt werden - falls nicht, soll er weiter LINKS im Baum angeordnet werden. ... soo.. dachte ich mir das ... aber das scheint wohl nicht zu funktionieren. Vielleicht ist es einfacher, das von Grundauf neu zu machen? Bloß wie?
Delphi-Quellcode:
procedure TForm1.STARTClick(Sender: TObject);
var
z, DCounter, FCounter, i, v, k, maxL: integer; // Integer später Problem ???
Samm2, Samm, tt, t, vv, u, s: string;
allmemo: tstringlist;
tn: TTreeNode;
begin
TreeView1.items.clear;
TreeView1.AlphaSort;
ListBox1.Clear;
ListBox2.Clear;
ListBox3.Clear;
ListBox4.Clear;
allmemo := TStringList.create;
allmemo.Assign(memo1.lines);
maxL := memo1.lines.count - 1;
FCounter := -1; DCounter := -1;
i := 2;
TreeView1.items.Addchild(nil, 'ERSTENS');
// tn.Expand;
while i < maxL do
begin
inc(i);
S := allmemo[i];
Edit1.text := S;
if (S <> '') then
begin // wenn nicht leer
if (posex('Dat(en)', S, 1) = 0)
and (posex('Daten', S, 1) = 0)
and (posex('<Masse>', S, 1) = 0)
then
begin
if (posex(' Informationen über ', S, 1) <> 0) and (posex(':\', S, 1) <> 0) then // abchecken
begin
inc(DCounter);
s := Copy(s, 20, length(s)); // ' Informationen über '
ListBox1.items.add(s);
tn := TreeView1.items[DCounter];
/////////////////
// z := length(s);
z := 0;
Tt := ''; Samm :='';
while z < length(s) do
begin
inc(z);
tt := s[z];
if (tt = '\') //or (tt = ':')
then
begin
ts.Items.add(Samm); // Samm := Copy(s, 1, z);
Samm2 := Samm2 + Samm;
Samm := '';
Tt := ''; // vorsicht , nochmal
end
else
Samm := Samm + tt;
end;
//2end; // END IF Informationen enthalten 2
tt := copy(s, 1, z); //length(s)
/////////////////
vv := TS.Items[TS.Items.count - 1 ];
if posex(vv, s, 1) <> 0 then // wenn drin
begin
s := copy(s, Length(vv) + 1, length(s)); /// VORHER t
TreeView1.Items.Add(Tn, s); //DCounter] := s ;
end
else
TreeView1.Items.AddChild(Tn, s); //DCounter] := s ;;
t := t + s + ' # ';
// ongetimageindex << anderes BIld
end
else
begin
if (posex('Anzahl der angezeigten Daten:', S, 1) = 0) then
inc(FCounter);
ListBox2.Items.add(s);
end;
end;
; // End pos
end; // End wenn String nicht leer
end; // while?
// tn[0].Expand ( True);
allmemo.Free;
TreeView1.FullExpand;
end;
http://www.imagebanana.com/img/ibh7q...0716111537.png
Nochwas schlimmes muß ich beichten ... ich habe Delphi 3 Pro sorry.
P.S.:Warum sind eigentlich Bilder /bzw. verlinkte Vorschauen deaktiviert?