Копия викизеркало

Это зеркало вики с pascal.chat. Правка, история и вход — там.

TMemo/ru

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

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

pascal
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, как показано в следующем примере:

pascal
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 к предыдущему примеру для того, чтобы отобразить содержимое третьей строки, как показано в следующем примере:

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

Выделенный текст

Вы можете отметить часть текста в режиме выполнения программы с помощью левой кнопки мыши или удерживать клавишу [Shift] и выбрать текст с помощью мыши или стрелок на клавиатуре. Выделенный текст (String) можно отобразить с помощью следующей инструкции:

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

Поиск текста

В отличие от предыдущего примера вы также можете искать текст (String) в элементе TMemo и определять место, где он находится: Position:=Memo1.SelStart;

В следующем примере показано, как вы можете искать текст в элементе TMemo:

pascal
// Функция 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;
pascal
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;

Сохранение и загрузка текста

Вы можете довольно легко сохранять и загружать содержимое в элемент TMemo, используя методы SaveToFile и LoadFromFile класса TStrings.

В следующем примере показано, как это можно сделать:

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;

См. также


From the Free Pascal wiki, page "TMemo/ru", 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.

Версия 1, последнее изменение: WikiArchive, .