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/)
-   -   Warum geht "Memo1.Lines := Memo1.Lines" nicht? (https://www.delphipraxis.net/119447-warum-geht-memo1-lines-%3D-memo1-lines-nicht.html)

gfjs 26. Aug 2008 19:10


Warum geht "Memo1.Lines := Memo1.Lines" nicht?
 
Hallo, Allerseits.

Warum führt die Zuweisung Memo1.Lines := Meno1.Lines dazu, dass die Strings im Memo verschwunden sind?

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
  str : TStrings;
begin
  ShowMessage(Memo1.Lines[0]);
  Memo1.Lines := Memo1.Lines; ShowMessage('Memo: '+Memo1.Lines[0]);
  str := Memo1.Lines; ShowMessage('str: '+str[0]);
end;
Nur das erste ShowMessage liefert die 1. Zeile des Memos, die beiden nächsten Aufrufe liefern nur noch einen Leerstring.

Auch "ListBox1.Items := ListBox1.Items" funktioniert nicht.

Wer kann mir das erklären?

Gruß Jürgen

mkinzler 26. Aug 2008 19:19

Re: Warum geht "Memo1.Lines := Memo1.Lines" nicht?
 
Was willst du bezwecken, wenn du einer Eigenschaft sich selber zuweist?

Delphi-Quellcode:
Memo1.Lines.Assign( Memo2.Lines);

Bernhard Geyer 26. Aug 2008 19:20

Re: Warum geht "Memo1.Lines := Memo1.Lines" nicht?
 
Schau doch selbst in die Assign-Methode von TStrings/TStringslist und dann sollte es dir klar werden.

gfjs 26. Aug 2008 19:48

Re: Warum geht "Memo1.Lines := Memo1.Lines" nicht?
 
@ mkinzler

Bezwecken wollte ich damit nichts, ich wollte nur einen von mehreren möglichen Fällen abdecken. Der Grund ist eine Prozedur, der ein zu bearbeitendes Memo, der auszugebende Text und die Größe des Memos übergeben wird. Daraus wird dann die maximal mögliche Schriftgröße berechnet.

Delphi-Quellcode:
procedure SetFontSize(Memo : TMemo, Strings : TStrings; h, w : integer);
Dort wollte ich als zweiten Parameter Memo1.Lines übergeben, wenn der Text beim Aufruf der Prozedur schon im Memo drin steht.

Delphi-Quellcode:
Memo.Lines := strings;
ging dann schief!

@ Bernhard Geyer

Wenn ich gewußt hätte, dass ich nach Assign schauen muss, hätte ich es getan. TStrings.Assign gibt mir allerdings keinen Hinweis darauf, dass "Memo1.Lines := Memo1.Lines" nicht geht. Bei TSTringList zeigt meine Hilfe keine Assign-Methode.

Gruß Jürgen

SirThornberry 26. Aug 2008 19:51

Re: Warum geht "Memo1.Lines := Memo1.Lines" nicht?
 
Eventuell zeigt dir deine Hilfe da nichts weil die Methode geerbt wurden ;-) Aber die Hilfe sagt dir auch nicht den Grund sondern der Quelltext.

Wenn ich mich recht entsinne ist es so das die Zielliste zuerst geleert wird und anschließend werden aus der Sourceliste die Einträge kopiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:39 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