Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TStringList vs. TStrings (https://www.delphipraxis.net/165503-tstringlist-vs-tstrings.html)

idefix2 3. Jan 2012 12:06

TStringList vs. TStrings
 
Ganz verstehe ich in der praktischen Handhabung den Unterschied zwischen TStrings und TStringList nicht.

In der Hilfe zu TStrings steht:

Zitat:

TStrings enthalten abstrakte bzw. rein virtuelle (C++ Terminologie) Methoden und sollten nicht direkt instantiiert werden.
So weit so gut. Aber wenn ich ein TMemo hernehme, dann ist Lines vom Typ TStrings. Ist eine TMemo auf einem Formular, wird doch beim Create des Formulars automatisch auch eine Instanz erzeugt, auf die Lines verweist? Ist diese Instanz jetzt vom Typ TStrings, vom Typ TStringlist, oder was sonst? Weil TStrings sollte ja nicht direkt instanziiert werden?

Und kann ich der Eigenschaft TMemo.Lines mittels Zuweisung einfach eine vorhandene Instanz von TStringlist, die ich vorher manuell erstellt habe, zuweisen?

Code:
var sl: TStringList;
begin
sl:=TStringlist.create;
sl.lines.add(...);
....
Memo1.Lines:=sl;
Oder muss ich die Zeilen von sl einzeln auf Memo1.Lines kopieren?

daywalker9 3. Jan 2012 12:11

AW: TStringList vs. TStrings
 
Das TMemo hat intern eine eigene TStrings-Klasse (meine die heißt TMemoStrings oder so). Nach außen hin ist es eben die TStrings Klasse.


Dadurch hast Du verschiedene möglichkeiten:

Delphi-Quellcode:
procedure FuelleListe(AStrings : TStrings);
begin
  AStrings.Add('Test');
end;
Delphi-Quellcode:
FuelleListe(Memo1.Lines);
oder

Delphi-Quellcode:
procedure MacheWasMitStringList;
var
  SL : TStringList;
begin
  SL := TStringList.create;
  FuelleListe(SL);
end;
Klar kannst Du den Memo Lines eine Stringlist zuweisen:

Delphi-Quellcode:
Memo1.Lines.AddStrings(MeineStringList);

DeddyH 3. Jan 2012 12:15

AW: TStringList vs. TStrings
 
TStrings ist lediglich die "Schnittstellenklasse" nach außen, intern arbeiten die sie enthaltenden Klassen mit Abkömmlingen davon (TStringlist z.B.). Und eine direkte Zuweisung einer TStringlist zu TMemo.Lines ist möglich, weil der entsprechende Setter für die Anlage einer Kopie sorgt, ansonsten könntest Du Probleme bekommen, wenn Du die zugewiesene TStringlist-Instanz wieder freigibst.

himitsu 3. Jan 2012 12:16

AW: TStringList vs. TStrings
 
Delphi-Quellcode:
sl.lines.add
? :shock:

Im TMemo.Lines ist intern ein TMemoStrings versteckt, was auch ein Nachfahre von TStrings ist.

Delphi-Quellcode:
Memo1.Lines := SL;
entspricht eigentlich einem
Delphi-Quellcode:
Memo1.Lines.Assign(SL);
, also nix mit Zuweisen einer Instanz.

idefix2 3. Jan 2012 13:26

AW: TStringList vs. TStrings
 
Danke für die ausführlichen Erklärungen, bis jetzt war das für mich recht undurchsichtig, und so etwas hasse ich :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:20 Uhr.

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