![]() |
Object as String?
Ich habe in einer ListBox sowohl unter den Strings als auch unter den Objekten Strings gespeichert.
Also
Delphi-Quellcode:
Wie kann ich MeinString nun als String zurückbekommen?
ListBox.Items.AddObject(TObject(MeinString)); //so ungefähr ^^
|
Re: Object as String?
Hallo .chicken,
grundsätzlich geht das über den as Operator:
Delphi-Quellcode:
Aber um einen String als TObject zu casten, musst du ihn vorher entsprechend verpacken.
(meineListe.Objects[index] as TMyString).MyString
Delphi-Quellcode:
Dann kannst du TMyString als TObject in den Objects Array übernemhem und anschließend wie oben wieder casten.
type TMyString = class (TObject)
MyString: String end; |
Re: Object as String?
Anders geht das nich? Is ja blöd, sau der Umweg, aber gut da lässt sich wohl nix dran machen,.....
|
Re: Object as String?
Hallo .chicken,
ein TObject ist letztlich ein Zeiger auf eine Struktur. Die Länge ist damit nur 32 Bit. Du kannst also einen String nicht auf ein TObject casten, weil die Längen unterschiedlich sind. Aber mit dem Verpacken, das würde funktionieren. Ober du nutzt eine zweite Liste. Oder du schreibst beide Strings in einen Eintrag und trennst sie mit einem eindeutigen Zeichen, dass in deinen Strings nicht vorkommen kann. |
Re: Object as String?
Wenn du die Objekte in der Liste nich automatisch freigeben läßt, sondern dieses selber machst, dann sollte String(meineListe.Objects[index]), oder auch PChar(meineListe.Objects[index]) als Umkehrfunktion zu deiner Übergabe diehnen.
|
Re: Object as String?
Was heisst nicht automatisch freigeben lässt? ^^
Also ich hab schonmal versucht sie mit String() zurückzuholen aber das hat nur bedingt geklappt (führte später zu nem Fehler). Ich versuchs nochmal mit PChar. |
Re: Object as String?
Ok, geht jetzt, danke ;-)
|
Re: Object as String?
Mit PChar hinterlässt du ein Speicherleck, da "S := PChar(P)" einen neuen String anlegt. Dein in P abgelegter (echte) String wird aber nie freigegeben, da der Compiler nicht weiß, dass sich hinter dem TObject ein String befindet.
|
Re: Object as String?
Was das Speicherleak angeht, sollte es so ja eigentlich keine Probleme geben.
Es kommt nur auf die "richtige" Konvertierung an, also welche Seite konvertiert wird. Das worauf zugewiesen wird und nicht das was zugewiesen wird. Aber stimmt schon, obwohl String und TObject doch eigentlich nur Zeiger auf ihre Struktur sind (je 32 Bit groß) kann man dem Konvertiertem String nichts Zuweisen, wärend komischer Weise das Auslesen geht? :gruebel:
Delphi-Quellcode:
// hinzufügen
i := ListBox1.Items.Add('Item'); String(ListBox1.Items.Objects[i]) := 'Object'; // löschen String(ListBox1.Items.Objects[i]) := ''; ListBox1.Items.Delete(i); // abfragen Label1.Caption := String(ListBox1.Items.Objects[i]); // oder Label1.Caption := PChar(ListBox1.Items.Objects[i]); |
Re: Object as String?
Hallo himitsu,
String ist aber kein Zeiger auf ein Struktur. String ist ja ein eigener Typ, der nicht zu einem TObject gecastet werden kann. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz