# TMemo

Deutsch (de) English (en) suomi (fi) français (fr) русский (ru)

A TMemo is a control with multiple lines of editable text. It is available from the Standard tab of the Component Palette.

## Usage

To use a TMemo on a form, you can simply select it on the Standard component pallet and place it by clicking on the form. In this text box, you can now edit a multiline text at run time.

For example, have you added a TMemo Memo1 to your form Form1, you can use Memo1.Text:='this is a singleline text'; to assign a String.

Also you can use anywhere in the source code the stored text of Memo1 with myString:=Memo1.Text;.

It is also possible to assign a multiline text with Memo1.Text:='This'+LineEnding+'is'+LineEnding+'a'+LineEnding+'multiline'+LineEnding+'text'; .

### Assignment of a TStrings or TStringList

Common, to assign a text to a TMemo is the use of a TStringList or its parent TStrings. The following example shows this (in the event handler of an inserted TButton Button1 in a form Form1 and a TMemo Memo1 on it):

procedure TForm1.Button1Click(Sender: TObject);
var
myStringList: TStringList;
begin
myStringList:=TStringList.Create;               //Create my StringList
Memo1.Lines.Assign(myStringList);               //assign text content
myStringList.Free;                              //free my StringList
end;

### Insert lines directly

You can add directly the contents of the memo for example:

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Clear;                              //delete all lines of Memo1
end;

If you want to know what is in a particular line, you can check it directly with myString:=Memo1.Lines[Index];. Note, the index of TMemo.Lines is zero based, i.e. the first line would be: myString:=Memo1.Lines[0];

The preceding example add yet a TButton Button2, you can display the third line as follows:

procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(Memo1.Lines[2]);
end;

### Selected text

You can mark text parts at run time by holding the left mouse button or press and hold the [Shift] key and select the text with the mouse or keyboard. This text (String) you can display like this:

procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(Memo1.SelText);
end;

### Search text

Contrary to the previous example, you can also looking for a text (String) in a TMemo and return the place where it is: Position:=Memo1.SelStart;

The following example shows how you can search and search further for a text in a memo:

• Create a new application with a TEdit Edit1, a TMemo Memo1 and two TButton Button1 and Button2.
• Complete the uses clause to LCLProc and strutils.
• In the event handler OnClick of Button1 fill the memo with any text, as in the example Insert lines directly.
• In the source text editor add following function (based on the example from the German Lazarusforum):
// FindInMemo: Returns the position where the string to search was found
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;
• Now, add following code in the event handler OnClick from Button2:
procedure TForm1.Button2Click(Sender: TObject);
const
SearchStr: String = '';                     // The string to search for
SearchStart: Integer = 0;                   // Last position of the string to search for
begin
if SearchStr <> Edit1.Text then begin       // Falls sich der zu suchende String geändert hat
SearchStart := 0;
SearchStr := Edit1.Text;
end;
SearchStart := FindInMemo(Memo1, SearchStr, SearchStart + 1);

if SearchStart > 0 then
Caption := 'Found at position['+IntToStr(SearchStart)+']!'
else
Caption := 'No further finds!';
end;
• Now at run time, you can fill the memo with a text with Button1, paste the text to be searched in Edit1 and looking or keep looking for these in memo with Button2.

You can quite easily save and load the contents of a memo by using the methods SaveToFile and LoadFromFile of the class TStrings.

The following example shows you how:

• Create a new application with a TMemo Memo1 and three TButton Button1, Button2 and Button3.
• Additionally put a TSaveDialog and a TOpenDialog from the component palette Dialogs on the form.
• Change Caption of Button1 to "Fill memo".
• In the event handler OnClick of Button1 fill the memo with any text, as in the example Insert lines directly.
• Change Caption of Button2 to "Save memo".
• Change Caption of Button3 to "Load memo".
• now modify the event handler OnClick of the 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
end;