Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Was ListView ähnliches zur internen Verwaltung erzeugen
Tpercon - Mi 31.07.02 20:18
Titel: Was ListView ähnliches zur internen Verwaltung erzeugen
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 - Mi 31.07.02 20: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 - Mi 31.07.02 20:25
Hi
Ich brauch aber sowas, wie diese Untereinträge beim ListView zum Speichern von Strings!
Gruß
GPF - Mi 31.07.02 20:42
Du kannst dann doch trotzdem TStringList verwenden. Über AddObject weist Du dann einem Eintrag eine neue Sub-Stringliste zu.
So in der Art:
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:
http://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 - Mi 31.07.02 20: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 - Mi 31.07.02 20:56
Du brauchst einfach nur eine einfache rekursive Prozedur zu schreiben, die wie folgt aussehen müßte:
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:
Quelltext
1: 2:
| DeleteTree(BaseStringList); BaseStringList.Free; |
Tpercon - Mi 31.07.02 21: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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!