Sign in Join
Wiki copytemporary

TMemo/de: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11Diese Seite erklärt, wie man die [[doc:lcl/stdctrls/tmemo.html|TMemo]] Komponente verwendet. Auf etwas klicken bedeutet immer ein Linksklick, ein Rechtsklick wird explizit erwähnt.
22
33## Beschreibung
44
55Ein Steuerelement um mehrzeilige Texte zu editieren.
66
7-<figure>
8-<img src="Comp_Standard_TMemo.png" title="Comp_Standard_TMemo.png" />
9-<figcaption>Comp_Standard_TMemo.png</figcaption>
10-</figure>
7+![](/wiki-images/4/46/Comp_Standard_TMemo.png)
118
129## Verwendung
1310
1411Um ein [[doc:lcl/stdctrls/tmemo.html|TMemo]] auf einem [[TForm/de|Formular]] zu nutzen, kann man es einfach auf der Komponentenpalette *Standard* auswählen und, mit einem Klick auf das Formular, platzieren. In diesem Textfeld können Sie nun zur Laufzeit einen mehrzeiligen Text bearbeiten.\
15-\
12+
1613Haben Sie zum Beispiel zu Ihrem Formular *Form1* ein TMemo *Memo1* hinzugefügt, können Sie mit **`Memo1.Text:='Das ist ein einzeiliger Text';`** dem Textfeld einen [[String/de|String]] zuweisen.\
1714Ebenso können Sie überall im Quelltext auf den hinterlegten Text mit **`myString:=Memo1.Text;`** zugreifen.\
1815Möglich ist es auch, einen mehrzeiligen Text *Memo1* zuzuweisen mit **`Memo1.Text:='Das'+LineEnding+'ist'+LineEnding+'ein'+LineEnding+'mehrzeiliger'+LineEnding+'Text';`**.\
1916
2017### Zuweisung eines TStrings oder TStringList
2118
2219Üblich, um einem TMemo einen Text zuzuweisen, ist die Verwendung einer [[TStringList-TStrings Tutorial/de|TStringList]] oder ihres Vorfahrens [[TStringList-TStrings Tutorial/de|TStrings]]. Folgendes kleines Beispiel zeigt dies (im Eventhandler eines in *Form1* eingefügten TButtons *Button1* und einem TMemo *Memo1*):
2320
2421``` pascal
2522procedure TForm1.Button1Click(Sender: TObject);
2623var
2724 myStringList: TStringList;
2825begin
2926 myStringList:=TStringList.Create; //Meine StringList erstellen
3027 myStringList.Add('Das ist die erste Zeile.'); //dieser eine Zeile zufügen
3128 myStringList.Add('Das ist die zweite Zeile.');
3229 myStringList.Add('Das ist die dritte Zeile.');
3330 myStringList.Add('usw.');
3431 Memo1.Lines.Assign(myStringList); //dem Memo1 den Textinhalt meine StringList zuweisen
3532 myStringList.Free; //Meine StringList im Speicher wieder freigeben
3633end;
3734```
3835
3936### Zeilen direkt einfügen
4037
4138Sie können dem Memo den Inhalt auch direkt zufügen z.B.:
4239
4340``` pascal
4441procedure TForm1.Button1Click(Sender: TObject);
4542begin
4643 Memo1.Lines.Clear; //alle Zeilen von Memo1 löschen
4744 Memo1.Lines.Add('Das ist die erste Zeile.'); //Zeile hinzufügen
4845 Memo1.Lines.Add('Das ist die zweite Zeile.');
4946 Memo1.Lines.Add('Das ist die dritte Zeile.');
5047 Memo1.Lines.Add('usw.');
5148end;
5249```
5350
5451### Eine Zeile auslesen
5552
5653Wollen Sie wissen, was in einer bestimmten Zeile steht, können Sie diese direkt auslesen mit **`myString:=Memo1.Lines[Index];`**. Achtung: der Index von *TMemo.Lines* ist nullbasiert, d.h. die erste Zeile wäre: **`myString:=Memo1.Lines[0];`**
5754
5855Fügen Sie dem vorhergehenden Beispiel noch einen TButton *Button2* hinzu, können Sie sich die dritte Zeile wie folgt ausgeben lassen:
5956
6057``` pascal
6158procedure TForm1.Button2Click(Sender: TObject);
6259begin
6360 ShowMessage(Memo1.Lines[2]);
6461end;
6562```
6663
6764### Bestimmte Zeile(n) löschen
6865
6966Sie können im Memo Zeilen mit einem bestimmten Inhalt direkt löschen:
7067
7168``` pascal
7269procedure subZeileLoeschen(AMemo: TMemo; AString: String);
7370var intIndex: Integer;
7471begin
7572
7673 intIndex := 0;
7774
7875 while intIndex < AMemo.Lines.Count do
7976 begin
8077 // Enthält die aktuelle Zeile den gesuchten Text,
8178 // dann lösch die Zeile und erhöhe nicht den Index
8279 if (AnsiContainsStr(AMemo.Lines[intIndex], AString)) then
8380 AMemo.Lines.Delete(intIndex)
8481 else
8582 Inc(intIndex); // erhöhe den Index
8683 end;
8784
8885end;
8986```
9087
9188### Textmarkierung
9289
9390Sie können zur Laufzeit Textteile markieren, indem Sie die linke Maustaste gedrückt halten oder die \[Shift\]-Taste gedrückt halten und mit der Maus oder Tastatur den Text selektieren. Diesen Text ([[String/de|String]]) können Sie dann zum Beispiel so ausgeben:
9491
9592``` pascal
9693procedure TForm1.Button2Click(Sender: TObject);
9794begin
9895 ShowMessage(Memo1.SelText);
9996end;
10097```
10198
10299### Text suchen
103100
104101Entgegen dem vorherigen Beispiel können Sie auch einen Text ([[String/de|String]]) in einem TMemo suchen und sich die Stelle, wo sich der Text befindet mit **`Stelle:=Memo1.SelStart;`** zurückgeben lassen.
105102
106103Folgendes kleines Beispiel zeigt, wie Sie einen Text in einem Memo suchen und weitersuchen können:
107104
108105- Erstellen Sie eine neue Anwendung, mit einem [[TEdit/de|TEdit]] *Edit1*, einem TMemo *Memo1* und zwei [[TButton/de|TButtons]] *Button1* und *Button2*.
109106- Ergänzen Sie die Uses-Klausel um die [[Unit/de|Units]] *LCLProc* und *strutils*.
110107- Füllen Sie im Eventhandler *OnClick* von *Button1* das Memo mit einem beliebigen Text, wie im Beispiel [[TMemo/de|Zeilen direkt einfügen]].
111108- Fügen Sie im Quelltexteditor folgende Funktion zu (angelehnt an das [Beispiel](http://www.lazarusforum.de/viewtopic.php?p=39260#p39260) aus dem deutschen Lazarusforum):
112109
113110``` pascal
114111// FindInMemo: gibt die Stelle zurück, wo der zu suchende String gefunden wurde
115112function FindInMemo(AMemo: TMemo; AString: String; StartPos: Integer): Integer;
116113begin
117114 Result := PosEx(AString, AMemo.Text, StartPos);
118115 if Result > 0 then
119116 begin
120117 AMemo.SelStart := UTF8Length(PChar(AMemo.Text), Result - 1);
121118 AMemo.SelLength := Length(AString);
122119 AMemo.SetFocus;
123120 end;
124121end;
125122```
126123
127124- Ergänzen Sie nun noch im Eventhandler *OnClick* von *Button2* folgenden Code:
128125
129126``` pascal
130127procedure TForm1.Button2Click(Sender: TObject);
131128const
132129 SuchStr: String = ''; // Der zu suchende String
133130 SuchStart: Integer = 0; // Letzte Fundstelle des zu suchenden Strings
134131begin
135132 if SuchStr <> Edit1.Text then begin // Falls sich der zu suchende String geändert hat
136133 SuchStart := 0;
137134 SuchStr := Edit1.Text;
138135 end;
139136 SuchStart := FindInMemo(Memo1, SuchStr, SuchStart + 1);
140137
141138 if SuchStart > 0 then
142139 Caption := 'Bei Memo1.SelStart['+IntToStr(SuchStart)+'] gefunden!'
143140 else
144141 Caption := 'Keine weiteren Funde!';
145142end;
146143```
147144
148145- Nun können Sie zur Laufzeit mit *Button1* das Memo mit einem Text füllen, den zu suchenden Text in *Edit1* einfügen und mit *Button2* diesen im Memo suchen bzw. weitersuchen.
149146
150147### Speichern und Laden
151148
152149Sie können den Inhalt eines Memos recht einfach Speichern und Laden, indem Sie die Methoden *SaveToFile* und *LoadFromFile* der Klasse [[TStringList-TStrings Tutorial/de|TStrings]] nutzen.
153150
154151Folgendes Beispiel zeigt Ihnen wie:
155152
156153- Erstellen Sie eine neue Anwendung, mit einem TMemo *Memo1* und drei [[TButton/de|TButtons]] *Button1*, *Button2* und *Button3*.
157154- Legen Sie zusätzlich noch ein [[TSaveDialog]] und einen [[TOpenDialog]] von der Komponentenpalette *Dialogs* auf dem Formular ab.
158155- Caption von *Button1* ändern Sie zu *Memo füllen*.
159156- Im Eventhandler *OnClick* von *Button1* befüllen Sie das Memo mit einem beliebigen Text, wie im Beispiel [[TMemo/de|Zeilen direkt einfügen]].
160157- Caption von *Button2* ändern Sie zu *Memo speichern*.
161158- Caption von *Button3* ändern Sie zu *Memo laden*.
162159- nun ändern Sie noch die Eventhandler *OnClick* der Buttons:
163160
164161``` pascal
165162procedure TForm1.Button2Click(Sender: TObject);
166163begin
167164 if SaveDialog1.Execute then
168165 Memo1.Lines.SaveToFile(SaveDialog1.FileName);
169166end;
170167
171168procedure TForm1.Button3Click(Sender: TObject);
172169begin
173170 if OpenDialog1.Execute then
174171 Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
175172end;
176173```
177174
178175## Siehe auch
179176
180177[[RichMemo|TRichMemo]] - Entspricht Delphi TRichEdit Komponente: formatierte Texte (farbig, Größe etc.)\
181178[[TListBox/de|TListBox]] - Eine scrollbare Liste von Strings
182179
183180---
184181*From the Free Pascal wiki, page "TMemo/de", as it stood on 2020-03-01 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history