![]() |
Memo Bricht in Lines um
Also,
eigentlich ist es ganz einfach. Ich habe ein Memo, dem ich mit Add verschiedene Strings zuweise.
Code:
Nun möchte ich später irgendwann den zweiten Eintrag ersetzen, das mache ich ganz simple mit
myMemo.Clear;
myMemo.Lines.Add('First Line'); i:= myMemo.Lines.Add('Something important'); myMemo.Lines.Add('***END***');
Code:
Das funktioniert auch wunderbar, solange das Memo keinen Zeilenumbruch macht, also wenn entweder der Text kurz genug ist oder myMemo.wordWrap auf FALSE gesetzt ist.
myMemo.Lines[i]:= 'Even more important';
Im Netz finde ich immer nur den Hinweis, dass ein Umbruch im Memo keine Auswirkung auf die Lines hat, aber irgendwie funktioniert das nicht. Übersehe ich was? |
AW: Memo Bricht in Lines um
Hallo,
ich würde das Memo nur zur Anzeige benutzen und die Daten in einer StringList vorhalten. Das Ersetzen erfolgt dann in der StringList und per Memo.Lines.Assign dann zurück ins Memo. |
AW: Memo Bricht in Lines um
Hi
Danke für den Tip. Das scheint einwandfrei zu funktionieren. Bin aber dennoch etwas verwundert über das Verhalten des Memos. Tomy |
AW: Memo Bricht in Lines um
Zitat:
Relevant ist das Verhalten der Struktur, die der Datenhaltung dient, und da gibt es keine Möglichkeit von außen einzugreifen. Gruß K-H |
AW: Memo Bricht in Lines um
Naja, nach meinem Verständnis bietet das Memo schon auch die Möglichkeit der Dateneingabe und auch einer Verwaltung ( Insert etc.. ) der zugewiesenen Daten, für mich schon Anzeichen einer 'Datenhaltung/Verwaltung'.
Ist halt Philosophie. Was mich wirklich wundert ist, dass im Netz immer behauptet wird, das die Anzeige die Stringlist (Lines) nicht verändern würde. Aber selbst bei einer Basisaufgabe einer Datenanzeige, nämlich der Reaktion auf eine geänderte Größe funktioniert diese Datenanzeigekomponente nicht korrekt.... |
AW: Memo Bricht in Lines um
Zitat:
Zum anderen werden die Daten, die angezeigt werden können, in einer TStrings kompatiblen Struktur abgelegt. das ist nicht dasselbe wie TStringlist! (OK ist korinthenkackerisch verleitet abernicht zu vorschnellen Schlüssen) Gruß K-H |
AW: Memo Bricht in Lines um
Hmm...
Damit ein Memo die Zeilen NICHT an der sichtbaren Breite umbricht, stelle doch mal 'ScrollBars' auf 'ssBoth'... Damit versucht dann das Memo die Textzeile komplett anzuzeigen und bricht erst sehr spät um.. |
AW: Memo Bricht in Lines um
Zitat:
|
AW: Memo Bricht in Lines um
In einem TRichEdit konnte ich dieses Problem umgehen. Das sollte im TMemo analog funktionieren:
Code:
Bin aber nicht sicher, wie sich das bei sehr großen Datenmengen auf die Laufzeit auswirkt.
Memo.Lines.BeginUpdate;
Memo.WordWrap := false; Memo.Lines[i] := ... Memo.WordWrap := true; Memo.Lines.EndUpdate; |
AW: Memo Bricht in Lines um
Ein Memo hat die wunderliche Eigenschaft WordWrap.
Wenn man die im Objektinspektor (oder sonstwo im Quelltext) auf false setzt, findet keine automatischer Zeilenumbruch statt. Der daraus resultierende Umbruch findet nur in der Anzeige statt. Auf die Eigenschaft von Lines (vom Typ TStrings) hat das keinen Einfluss. Zitat:
|
AW: Memo Bricht in Lines um
Wenn dem so ist, warum passiert dann mit diesem Code
Code:
Das hier:
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private-Deklarationen } lineIndex: Integer; //theList: TStringList; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Memo1.lines.Add('The first line is a long line. Let us see what will happen'); lineIndex:= Memo1.Lines.Add('This is the line of interest'); Memo1.Lines.Add('******END******'); end; procedure TForm1.Timer1Timer(Sender: TObject); begin memo1.Lines[lineIndex]:= IntToHex(Random($1000),4) + ' New Text for the Test. Good Luck'; end; end. ![]() |
AW: Memo Bricht in Lines um
Zitat:
Gruß K-H |
AW: Memo Bricht in Lines um
Das Video ist mit Wordwrap := TRUE. Ansonsten werden halt nur die Anfänge der Zeilen angezeigt..
|
AW: Memo Bricht in Lines um
Nur so als Hinweis:
Es gibt einen Unterschied zwischen VCL
Delphi-Quellcode:
und FMX
TMemo
Delphi-Quellcode:
.
TMemo
Bei VCL ist in der
Delphi-Quellcode:
-Eigenschaft der Inhalt analog zur Anzeige. (Das kann man auch schon zur DesignTime sehen. Lines Eigenschaft bearbeiten, schließen und wieder zum Bearbeiten öffnen).
Lines
Bei FMX wird die Lines-Eigenschaft durch
Delphi-Quellcode:
nicht verändert.
WordWrap
|
AW: Memo Bricht in Lines um
Zitat:
Wenn WordWrap = false, dann werden von allen Zeilen die Anfänge angezeigt, bis halt die Breite des Memos erreicht ist, der Rest befindet sich quasi rechts vom rechten Rand des Memos. WordWrap = true sorgt jedoch dafür, dass man alles sehen kann, wenn also in einer Zeile der Text eigentlich breiter ist, als die zur Anzeige zur Verfügung stehenden Fläche, so wird an einer geeigneten Stelle links vom rechten Rand ein Zeilenumbruch eingefügt, um die Anzeige des vollständigen Textes zu ermöglichen. Das Video zeigt also exakt, wie ein Memo mit WordWrap = True funktionieren soll, es zeigt exakt das gewünschte Verhalten. |
AW: Memo Bricht in Lines um
Also ich würde ein anderes Verhalten erwarten.
|
AW: Memo Bricht in Lines um
Zitat:
Delphi-Quellcode:
: Die Zeilen werden umgebrochen.
WordWrap := true
Das Verhalten der
Delphi-Quellcode:
-Eigenschaft ist nicht unbedingt so wie man es erwarten könnte und ist auch bei
Lines
Delphi-Quellcode:
und
VCL
Delphi-Quellcode:
anders umgesetzt.
FMX
Ihr solltet klar werden worüber ihr sprechen wollt. Über die Anzeige oder die Auswirkungen auf die
Delphi-Quellcode:
-Eigenschaft. Sonst wird das mit der Kommunikation schwierig.
Lines
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 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