TMemo/de
│
Deutsch (de) │
English (en) │
suomi (fi) │
français (fr) │
日本語 (ja) │
русский (ru) │
Diese Seite erklärt, wie man die TMemo Komponente verwendet. Auf etwas klicken bedeutet immer ein Linksklick, ein Rechtsklick wird explizit erwähnt.
Beschreibung
Ein Steuerelement um mehrzeilige Texte zu editieren.
Verwendung
Um ein TMemo auf einem 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.
Haben 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 zuweisen.
Ebenso können Sie überall im Quelltext auf den hinterlegten Text mit myString:=Memo1.Text;
zugreifen.
Möglich ist es auch, einen mehrzeiligen Text Memo1 zuzuweisen mit Memo1.Text:='Das'+LineEnding+'ist'+LineEnding+'ein'+LineEnding+'mehrzeiliger'+LineEnding+'Text';
.
Zuweisung eines TStrings oder TStringList
Üblich, um einem TMemo einen Text zuzuweisen, ist die Verwendung einer TStringList oder ihres Vorfahrens TStrings. Folgendes kleines Beispiel zeigt dies (im Eventhandler eines in Form1 eingefügten TButtons Button1 und einem TMemo Memo1):
procedure TForm1.Button1Click(Sender: TObject);
var
myStringList: TStringList;
begin
myStringList:=TStringList.Create; //Meine StringList erstellen
myStringList.Add('Das ist die erste Zeile.'); //dieser eine Zeile zufügen
myStringList.Add('Das ist die zweite Zeile.');
myStringList.Add('Das ist die dritte Zeile.');
myStringList.Add('usw.');
Memo1.Lines.Assign(myStringList); //dem Memo1 den Textinhalt meine StringList zuweisen
myStringList.Free; //Meine StringList im Speicher wieder freigeben
end;
Zeilen direkt einfügen
Sie können dem Memo den Inhalt auch direkt zufügen z.B.:
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Clear; //alle Zeilen von Memo1 löschen
Memo1.Lines.Add('Das ist die erste Zeile.'); //Zeile hinzufügen
Memo1.Lines.Add('Das ist die zweite Zeile.');
Memo1.Lines.Add('Das ist die dritte Zeile.');
Memo1.Lines.Add('usw.');
end;
Eine Zeile auslesen
Wollen 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];
Fügen Sie dem vorhergehenden Beispiel noch einen TButton Button2 hinzu, können Sie sich die dritte Zeile wie folgt ausgeben lassen:
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(Memo1.Lines[2]);
end;
Bestimmte Zeile(n) löschen
Sie können im Memo Zeilen mit einem bestimmten Inhalt direkt löschen:
procedure subZeileLoeschen(AMemo: TMemo; AString: String);
var intIndex: Integer;
begin
intIndex := 0;
while intIndex < AMemo.Lines.Count do
begin
// Enthält die aktuelle Zeile den gesuchten Text,
// dann lösch die Zeile und erhöhe nicht den Index
if (AnsiContainsStr(AMemo.Lines[intIndex], AString)) then
AMemo.Lines.Delete(intIndex)
else
Inc(intIndex); // erhöhe den Index
end;
end;
Textmarkierung
Sie 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) können Sie dann zum Beispiel so ausgeben:
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(Memo1.SelText);
end;
Text suchen
Entgegen dem vorherigen Beispiel können Sie auch einen Text (String) in einem TMemo suchen und sich die Stelle, wo sich der Text befindet mit Stelle:=Memo1.SelStart;
zurückgeben lassen.
Folgendes kleines Beispiel zeigt, wie Sie einen Text in einem Memo suchen und weitersuchen können:
- Erstellen Sie eine neue Anwendung, mit einem TEdit Edit1, einem TMemo Memo1 und zwei TButtons Button1 und Button2.
- Ergänzen Sie die Uses-Klausel um die Units LCLProc und strutils.
- Füllen Sie im Eventhandler OnClick von Button1 das Memo mit einem beliebigen Text, wie im Beispiel Zeilen direkt einfügen.
- Fügen Sie im Quelltexteditor folgende Funktion zu (angelehnt an das Beispiel aus dem deutschen Lazarusforum):
// FindInMemo: gibt die Stelle zurück, wo der zu suchende String gefunden wurde
function FindInMemo(AMemo: TMemo; AString: String; StartPos: Integer): Integer;
begin
Result := PosEx(AString, AMemo.Text, StartPos);
if Result > 0 then
begin
AMemo.SelStart := UTF8Length(PChar(AMemo.Text), Result - 1);
AMemo.SelLength := Length(AString);
AMemo.SetFocus;
end;
end;
- Ergänzen Sie nun noch im Eventhandler OnClick von Button2 folgenden Code:
procedure TForm1.Button2Click(Sender: TObject);
const
SuchStr: String = ''; // Der zu suchende String
SuchStart: Integer = 0; // Letzte Fundstelle des zu suchenden Strings
begin
if SuchStr <> Edit1.Text then begin // Falls sich der zu suchende String geändert hat
SuchStart := 0;
SuchStr := Edit1.Text;
end;
SuchStart := FindInMemo(Memo1, SuchStr, SuchStart + 1);
if SuchStart > 0 then
Caption := 'Bei Memo1.SelStart['+IntToStr(SuchStart)+'] gefunden!'
else
Caption := 'Keine weiteren Funde!';
end;
- 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.
Speichern und Laden
Sie können den Inhalt eines Memos recht einfach Speichern und Laden, indem Sie die Methoden SaveToFile und LoadFromFile der Klasse TStrings nutzen.
Folgendes Beispiel zeigt Ihnen wie:
- Erstellen Sie eine neue Anwendung, mit einem TMemo Memo1 und drei TButtons Button1, Button2 und Button3.
- Legen Sie zusätzlich noch ein TSaveDialog und einen TOpenDialog von der Komponentenpalette Dialogs auf dem Formular ab.
- Caption von Button1 ändern Sie zu Memo füllen.
- Im Eventhandler OnClick von Button1 befüllen Sie das Memo mit einem beliebigen Text, wie im Beispiel Zeilen direkt einfügen.
- Caption von Button2 ändern Sie zu Memo speichern.
- Caption von Button3 ändern Sie zu Memo laden.
- nun ändern Sie noch die Eventhandler OnClick der Buttons:
procedure TForm1.Button2Click(Sender: TObject);
begin
if SaveDialog1.Execute then
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;
Siehe auch
TRichMemo - Entspricht Delphi TRichEdit Komponente: formatierte Texte (farbig, Größe etc.)
TListBox - Eine scrollbare Liste von Strings
Gehe zurück zu: LCL Components | — Komponente zuvor: TEdit/de | Nächste Komponente: TToggleBox/de |