Autor Beitrag
Tpercon
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60



BeitragVerfasst: Mi 31.07.02 21:18 
Hi

Was kann ich zur Laufzeit erzeugen, was so ähnlich wie nen ListView aufgebaut ist? Ich brauch das nur, um kurzzeitig Strigns darin zu speichern.
Ich habs mit TListItems probiert, nur da habe ich das Problem, dass ich beim Erzeugen nen ListView angeben muß. Gebe ich das wieder frei, verschwindet auch der Inhalt des ListView. Nen Array ist auch nicht so gut, da ich mich da ums Löschen kümmern muß.

Gruß
GPF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 85



BeitragVerfasst: Mi 31.07.02 21:21 
Benutze die nicht visuelle Komponente TStringList. Du kannst dort über StringList.Add(String); Strings hinzufügen. Zusätzlich kannst Du jedem Stringobjekt einen Verweis auf ein Objekt zuordnen. Benutze dazu Stringlist.AddObject(String, Object);.
Alles weitere findest Du dazu in der Delphihilfe inkl. einiger Beispiele.
Tpercon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60



BeitragVerfasst: Mi 31.07.02 21:25 
Hi

Ich brauch aber sowas, wie diese Untereinträge beim ListView zum Speichern von Strings!

Gruß
GPF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 85



BeitragVerfasst: Mi 31.07.02 21:42 
Du kannst dann doch trotzdem TStringList verwenden. Über AddObject weist Du dann einem Eintrag eine neue Sub-Stringliste zu.
So in der Art:

ausblenden Quelltext
1:
StringList.AddObject('Knoten mit Child', TStringList.Create);					


Das ganze funktioniert rekursiv auch ziemlich elegant.
Im Zweifelsfall erstell Dir eben einen DDT. Damit ist das Problem schnell gelöst und hat genau die Struktur wie Du sie benötigst.
DDTs sind im Gegensatz zur Stringliste zwar etwas langsamer - dafür ist der Zugriff auf eine Stringliste einfacher.

Delphi bietet leider kaum Datenstrukturen wie Du benötigst an. Es gibt aber mehrere Klassen, die Deinen Anforderungen gerecht werden. Ich meine, daß die EZDSL Klassenbibliothek eine solche Klasse zur Verfügung stellt. Du findest diese auf folgender Site: www.boyet.com/EZDSL/default.htm . Es sollte aber auch genügend andere Klassen geben, die gleiches können. Schau dazu einfach auf den einschlägigen Seiten wie Torry, DSP, Delphi32, etc nach
Tpercon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60



BeitragVerfasst: Mi 31.07.02 21:47 
Wie gebe ich die ganzen StringListen wieder frei. Die HauptStringList freen reicht doch bestimmt nicht, nur wie komm ich an die einzelnen sonst ran?
GPF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 85



BeitragVerfasst: Mi 31.07.02 21:56 
Du brauchst einfach nur eine einfache rekursive Prozedur zu schreiben, die wie folgt aussehen müßte:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure DeleteTree(SL: TStringList);
begin
  if not assigned(SL) then Exit;
  while SL.Count>0 do begin
    if assigned(SL.Objects[0]) then begin
      DeleteTree(TStringList(SL.Objects[0]));
      TStringList(SL.Objects[0]).Free;
    end;
    SL.Delete(0);
  end;
end;


Ist BaseStringList Deine TopLevel-Stringliste löscht Du alles durch folgenden Zweizeiler:

ausblenden Quelltext
1:
2:
DeleteTree(BaseStringList);
BaseStringList.Free;
Tpercon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60



BeitragVerfasst: Mi 31.07.02 22:10 
Klar, nur habe ich ein Problem beim Hinzufügen.
Ich erzeuge die HauptStringListe und die erste UnterStringlist, füge in die untere meine Strings ein und füge sie mit AddObject der HauptSL hinzu. Tja, und dann bräuchte ich schon die nächste Variable für die nächste UnterSL...

Ich werde wohl besser doch die Arrays nehmen. Ist zwar was aufwendiger, aber wohl leichter zu bewältigen.