Entwickler-Ecke
Sonstiges (Delphi) - Problem mit TStrings
patmann2001 - Mi 11.09.02 09:19
Titel: Problem mit TStrings
Hallo
Ich habe eine Globale Variable vom Type TStrings. Wenn ich versuche nun mit ADD Strings darin abzulegen bekomme ich eine Fehlermeldung. Ich habe auch versucht das Ding erstmal zu createn, das geht aber auch nicht. Was muss ich da machen?
In allen Fällen tritt diese Exception auf:
Im Projekt ... ist eine Exception der Klasse EAccessViolation aufgetreten.
Beim Debugen ist mir noch aufgefallen, das diese Variable die ganze Zeit auf NIL steht.
Ich benutze Delphi4
cu Patmann
wwerner - Mi 11.09.02 09:24
Benutze TStringList. TStrings ist nur ein Vorfahre, der nicht beutzt wird. Steht in der OH.
LCS - Mi 11.09.02 09:26
Hi
Objekte müssen vor der Verwendung mit Create erzeugt werden.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure Sonstwas; var meineListe : TStringList; begin meineListe := TStringList.Create; try tuwas finally meineListe.Free; //Freigeben ist wichtig end; end; |
Wenn du das Objekt global verwendest schreibst du Create am besten in FormCreate und das Freigeben in FormClose oder FormDestroy.
Gruss Lothar
Sephiroth - Mi 11.09.02 13:46
Hi,
Bei der Variablendeklaration kann man statt TStringList > TStrings hinschreiben. Das funktioniert auch und somit weiss patman auch wie man TStrings verwendet und trotzdem mit TStringlist arbeitet.
LCS - Mi 11.09.02 14:34
Hi
Zitat: |
Bei der Variablendeklaration kann man statt TStringList > TStrings hinschreiben
|
Versteh ich das so, dass du das so schreiben willst?
Quelltext
1: 2: 3: 4: 5: 6:
| procedure Sonstwas; var meineListe : TStrings; begin meineListe := TStringList.Create; ... |
Falls nein gilt das was wwerner schon geschrieben hat. TStrings ist ein abstrakter Basistyp.
Falls ja: Solltest du auf keinen Fall machen.
Erstens ist es nicht gerade übersichtlich einen Objekttyp zu deklarieren und ihm dann ein Objekt von einem anderen Typ zuzuweisen.
Zweitens wird deine Stringliste ja damit in ein Objekt vom Typ TStrings gecastet. Bei den Basis-Methoden / -Eigenschaften kein Problem. Aber was passiert mit den Eigenschaften/Methoden die erst von TStringList eingeführt werden? Versuch in dem Beispiel mal die Methode Sort aufzurufen.
Und wenn ich das alles total falsch verstanden hab, nix für ungut :D
Lothar
aogwaba - Mi 11.09.02 19:01
Hi!
Muss auch noch meinen Senft dazugeben ;)
Wenn die Deklaration :
Quelltext
1: 2: 3: 4: 5:
| procedure Sonstwas; var meineListe : TStrings; begin meineListe := TStringList.Create; |
lautet, ist der Object-Typ vom Typ TStrings, die Instanz aber vom Typ TStringList. Nur die von TStrings (als abstract/virtual) deklarierten Methoden und von TStringList implementierten Methoden stehen zur Verfügung.
geht nicht.
Mit einem Typcast sind aber auch die Methoden von StringList nutzbar
Quelltext
1:
| (meineListe as TStringList).sort; |
cu
waba
patmann2001 - Mi 11.09.02 19:17
danke an alle
Das man eine TStringList benutzen muss wußte ich nicht. Klappt aber jetzt
cu Patmann
Klabautermann - Mi 11.09.02 23:36
Hallo,
patmann2001 hat folgendes geschrieben: |
Das man eine TStringList benutzen muss wußte ich nicht. Klappt aber jetzt. |
da sollten bei dir immer die Alarmglocken angehen wenn du in der Online-Hilfe was von einer virtuellen abstrakten Kalsse liest. Dann dafst du diese nicht direckt benutzen.
Gruß
Klabautermann
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!