Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi NewStr ist veraltet (https://www.delphipraxis.net/150759-newstr-ist-veraltet.html)

amigage 26. Apr 2010 09:44


NewStr ist veraltet
 
Hallo liebe Delphi-Gemeinde,

ich hoffe, ihr könnt mir mit Eurem Wissen wieder helfen, denn ist stehe derzeit etwas auf dem Schlauch.

Ich habe einen alten Code gefunden und versuche den in Delphi 2009 zu kompilieren.
Ich erhalte den Hinweis NewStr() ist veraltet. Ich könnte es jetzt so belassen, möchte doch aber gern
die Hinweise nicht nur ignorieren. Ich habe auch einige Beiträge hier im Forum gelesen, sowie
die Erklärung unter https://forums.codegear.com/thread.j...12964&tstart=1

Ich bekomme es jedoch nicht hin, vielleicht kann mir jemand behilflich sein

Eine Zeichenkette wird einem ListBox-Eintrag hinzugefügt.

Delphi-Quellcode:
ListBox.Items.AddObject(myOutputStr, TObject(LongInt(NewStr(myDataString))) );
Hiermit greife ich bisher auf die hinterlegte Zeichenkette zu.

Delphi-Quellcode:
PString(ListBox.Items.Objects[i])^
Ich bedanke mich in Voraus für jedweden Hinweis/Lösung.

Danke.
Amigage

Bernhard Geyer 26. Apr 2010 09:51

Re: NewStr ist veraltet
 
Sollte mit StrAlloc und StrDispose ersetzt werden können.

amigage 26. Apr 2010 10:19

Re: NewStr ist veraltet
 
Erst einmal danke für Deine Antwort. Aber in der Hilfe steht:

Zitat:

StrAlloc ist veraltet, da AnsiStrings (lange Strings) implizit nullterminiert sind und dynamisch zugewiesen werden.

himitsu 26. Apr 2010 10:30

Re: NewStr ist veraltet
 
Ein einfacher und sogar OOP-gerechter Weg wäre:
Delphi-Quellcode:
type
  TStringObject = class
    FStr: String;
    constructor Create(const Str: String);
  end;

ListBox.Items.AddObject(myOutputStr, TStringObject.Create(myDataString));

amigage 26. Apr 2010 11:00

Re: NewStr ist veraltet
 
Das sieht schon einmal gut aus :)

Aber wie greife ich dann auf das Objekt wieder, damit ich abhängig vom Listeneintrag
meine Zeichenkette zurück erhalte? Wäre schön, wenn Du mir da einen Denkanstoß gibst.

Danke.

DeddyH 26. Apr 2010 11:11

Re: NewStr ist veraltet
 
Delphi-Quellcode:
ShowMessage((ListBox.Items.Objects[ListBox.ItemIndex] as TStringObject).StringProperty);

himitsu 26. Apr 2010 11:12

Re: NewStr ist veraltet
 
Delphi-Quellcode:
TStringObject(ListBox.Items.Objects[i]).FStr
Den Zugriff vielleicht noch über einen Property lösen und schon sieht es schön aus.

und das Freigeben z.B. so
Delphi-Quellcode:
TStringObject(ListBox1.Items.Objects[i]).Free;
ListBox1.Items.Delete(i);

amigage 26. Apr 2010 12:01

Re: NewStr ist veraltet
 
Hallo himitsu,

besten Dank für den Hinweis. Jetzt klappt es auch ohne NewStr(). :-D

himitsu 26. Apr 2010 12:15

Re: NewStr ist veraltet
 
Wenn es nur um einen einfachen String geht, dann kann man seit mindestens Delphi 2009
(weiß nicht genau wann .ToString eingeführt wurde)
auch kommlett ohne Typkonterterungen auskommen. :angel:
Delphi-Quellcode:
type
  TStringObject = class
    FStr: String;
    constructor Create(const Str: string);
    function ToString: string; override;
  end;

function TStringObject.ToString: string;
begin
  Result := FStr;
end;




// erstellen
ListBox.Items.AddObject(myOutputStr, TStringObject.Create(myDataString));

// auslesen
ListBox.Items.Objects[i].ToString

// freigeben
ListBox1.Items.Objects[i].Free;
ListBox1.Items.Delete(i);

p80286 26. Apr 2010 13:32

Re: NewStr ist veraltet
 
Zum Verständnis:
Könnte es sein, daß ich mit NewStr schlicht eine globale AnsiString-Variable erstelle?

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:54 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz