TMemo/ru
│
Deutsch (de) │
English (en) │
suomi (fi) │
français (fr) │
русский (ru) │
TMemo является элементом управления с многострочным полем для редактирования текста. Данный компонент доступен на вкладке Standard палитры компонентов.
Contents
Использование
Для использования элемента 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 - Список строк с прокруткой