TMemo/ru
│
Deutsch (de) │
English (en) │
suomi (fi) │
français (fr) │
日本語 (ja) │
русский (ru) │
TMemo является элементом управления с многострочным полем для редактирования текста. Данный компонент доступен на вкладке Standard палитры компонентов.
Использование
Для использования элемента TMemo на форме вам необходимо просто выбрать его на вкладке Standard палитры компонентов и разместить на форме с помощью щелчка мыши. В данном текстовом поле вы можете редактировать многострочный текст во время выполнения программы.
Например, если вы добавили элемент TMemo с именем Memo1 на форму с именем Form1, то для того чтобы присвоить значение типа String данному элементу, вы можете использовать такую инструкцию Memo1.Text := 'Это однострочный текст';
.
Также вы можете использовать текст из элемента с именем Memo1 в любом месте исходного кода с помощью следующей инструкции myString := Memo1.Text;
.
Кроме того можно присвоить многострочный текст элементу с именем Memo1 с помощью такой инструкции Memo1.Text:='This'+LineEnding+'is'+LineEnding+'a'+LineEnding+'multiline'+LineEnding+'text';
.
Присваивание строк из TStrings или TStringList
В общем, для присваивания текста элементу TMemo используется класс TStringList или его родительский класс - TStrings. Это показано в следующем примере (данный код располагается в обработчике события кнопки с именем Button1, расположенной на форме с именем Form1; также на форме должен быть расположен элемент TMemo с именем Memo1):
procedure TForm1.Button1Click(Sender: TObject);
var
myStringList: TStringList;
begin
myStringList:=TStringList.Create; //создаем объект myStringList
myStringList.Add('Это первая строка.'); //добавляем в него строки
myStringList.Add('Это вторая строка.');
myStringList.Add('Это третья строка.');
myStringList.Add('и т.д.');
Memo1.Lines.Assign(myStringList); //присваиваем текст элементу Memo1
myStringList.Free; //уничтожаем объект myStringList
end;
Непосредственное добавление строк
Вы можете непосредственно добавлять строки в элемент TMemo, как показано в следующем примере:
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Clear; //удалить все строки из элемента Memo1
Memo1.Lines.Add('Это первая строка.'); //добавить строку
Memo1.Lines.Add('Это вторая строка.');
Memo1.Lines.Add('Это третья строка.');
Memo1.Lines.Add('и т.д.');
end;
Чтение стоки
Если вы хотите узнать, что содержится в определенной строке, вы можете непосредственно проверить это с помощью такой инструкции myString:=Memo1.Lines[Index];
. Обратите внимание, что индексы строк в TMemo.Lines начинаются с 0, т.е. первая строка будет иметь индекс 0: myString:=Memo1.Lines[0];
Добавьте ещё одну кнопку с именем Button2 к предыдущему примеру для того, чтобы отобразить содержимое третьей строки, как показано в следующем примере:
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(Memo1.Lines[2]);
end;
Выделенный текст
Вы можете отметить часть текста в режиме выполнения программы с помощью левой кнопки мыши или удерживать клавишу [Shift] и выбрать текст с помощью мыши или стрелок на клавиатуре. Выделенный текст (String) можно отобразить с помощью следующей инструкции:
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(Memo1.SelText);
end;
Поиск текста
В отличие от предыдущего примера вы также можете искать текст (String) в элементе TMemo и определять место, где он находится: Position:=Memo1.SelStart;
В следующем примере показано, как вы можете искать текст в элементе TMemo:
- Создайте новое приложение со следующими элементами: TEdit с именем Edit1, TMemo с именем Memo1 и две кнопки с именами Button1 и Button2.
- Добавьте в раздел Uses строки LCLProc, strutils и LazUTF8.
- В обработчике события OnClick кнопки Button1 заполните строки элемента Memo1 любым текстом, как в примере Непосредственное добавление строк.
- В редакторе исходного кода добавьте следующую функцию (основана на этом примере [1] с German Lazarusforum):
// Функция FindInMemo: Возвращает позицию найденной строки
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;
- Добавьте следующий код в обработчик события OnClick кнопки Button2:
procedure TForm1.Button2Click(Sender: TObject);
const
SearchStr: String = ''; // Строка, которую ищем
SearchStart: Integer = 0; // Позиция, с которой начинаем искать строку
begin
if SearchStr <> Edit1.Text then begin
SearchStart := 0;
SearchStr := Edit1.Text;
end;
SearchStart := FindInMemo(Memo1, SearchStr, SearchStart + 1);
if SearchStart > 0 then
Caption := 'Найдена в позиции['+IntToStr(SearchStart)+']!'
else
Caption := 'Нет совпадений!';
end;
- Теперь вы можете заполнить текстом элемент Memo1 в режиме выполнения программы с помощью кнопки Button1, вставить текст, который нужно найти в элемент Edit1 и найти его с помощью кнопки Button2.
Сохранение и загрузка текста
Вы можете довольно легко сохранять и загружать содержимое в элемент TMemo, используя методы SaveToFile и LoadFromFile класса TStrings.
В следующем примере показано, как это можно сделать:
- Создайте новое приложение со следующими элементами: TMemo с именем Memo1 и три кнопки с именами Button1, Button2 и Button3.
- Дополнительно поместите на форму элементы TSaveDialog и TOpenDialog, расположенные на вкладке Dialogs палитры компонентов.
- Измените свойство Caption кнопки Button1 на "Fill memo".
- В обработчике события OnClick кнопки Button1 заполните элемент TMemo любым текстом, как в примере Непосредственное добавление строк.
- Измените свойство Caption кнопки Button2 на "Save memo".
- Измените свойство Caption кнопки Button3 на "Load memo".
- Теперь отредактируйте обработчики событий OnClick кнопок Button2 и Button3:
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;
См. также
- Документация по TMemo
- TRichMemo - Delphi-подобный компонент TRichEdit: работа с форматированным текстом (изменение цвета текста, размера шрифта и т.д.)
- TListBox - Список строк с прокруткой