Wiki-KopieMirror

Dies ist ein Mirror des Wikis von pascal.chat. Bearbeiten, Verlauf und Anmeldung finden dort statt.

TMemo/de

Deutsch · English · Français · Suomi · Русский · 日本語

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):

pascal
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.:

pascal
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:

pascal
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:

pascal
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:

pascal
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:

pascal
// 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;
pascal
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;

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:

pascal
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


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.

Version 2, zuletzt geändert von WikiArchive .