TMemo/ru

From Lazarus wiki
Jump to navigationJump to search

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

TMemo tmemo.png является элементом управления с многострочным полем для редактирования текста. Данный компонент доступен на вкладке 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 - Список строк с прокруткой


Компоненты LCL
Вкладка Компоненты
Standard TMainMenu • TPopupMenu • TButton • TLabel • TEdit • TMemo • TToggleBox • TCheckBox • TRadioButton • TListBox • TComboBox • TScrollBar • TGroupBox • TRadioGroup • TCheckGroup • TPanel • TFrame • TActionList
Additional TBitBtn • TSpeedButton • TStaticText • TImage • TShape • TBevel • TPaintBox • TNotebook • TLabeledEdit • TSplitter • TTrayIcon • TControlBar • TFlowPanel • TMaskEdit • TCheckListBox • TScrollBox • TApplicationProperties • TStringGrid • TDrawGrid • TPairSplitter • TColorBox • TColorListBox • TValueListEditor
Common Controls TTrackBar • TProgressBar • TTreeView • TListView • TStatusBar • TToolBar • TCoolBar • TUpDown • TPageControl • TTabControl • THeaderControl • TImageList • TPopupNotifier • TDateTimePicker
Dialogs TOpenDialog • TSaveDialog • TSelectDirectoryDialog • TColorDialog • TFontDialog • TFindDialog • TReplaceDialog • TOpenPictureDialog • TSavePictureDialog • TCalendarDialog • TCalculatorDialog • TPrinterSetupDialog • TPrintDialog • TPageSetupDialog • TTaskDialog
Data Controls TDBNavigator • TDBText • TDBEdit • TDBMemo • TDBImage • TDBListBox • TDBLookupListBox • TDBComboBox • TDBLookupComboBox • TDBCheckBox • TDBRadioGroup • TDBCalendar • TDBGroupBox • TDBGrid • TDBDateTimePicker
Data Access TDataSource • TBufDataset • TMemDataset • TSdfDataSet • TFixedFormatDataSet • TDbf
System TTimer • TIdleTimer • TLazComponentQueue • THTMLHelpDatabase • THTMLBrowserHelpViewer • TAsyncProcess • TProcessUTF8 • TProcess • TSimpleIPCClient • TSimpleIPCServer • TXMLConfig • TEventLog • TServiceManager • TCHMHelpDatabase • TLHelpConnector
Misc TColorButton • TSpinEdit • TFloatSpinEdit • TArrow • TCalendar • TEditButton • TFileNameEdit • TDirectoryEdit • TDateEdit • TTimeEdit • TCalcEdit • TFileListBox • TFilterComboBox • TComboBoxEx • TCheckComboBox • TButtonPanel • TShellTreeView • TShellListView • TXMLPropStorage • TINIPropStorage • TIDEDialogLayoutStorage • TMRUManager • TStrHolder
LazControls TCheckBoxThemed • TDividerBevel • TExtendedNotebook • TListFilterEdit • TListViewFilterEdit • TLvlGraphControl • TShortPathEdit • TSpinEditEx • TFloatSpinEditEx • TTreeFilterEdit • TExtendedTabControl •
RTTI TTIEdit • TTIComboBox • TTIButton • TTICheckBox • TTILabel • TTIGroupBox • TTIRadioGroup • TTICheckGroup • TTICheckListBox • TTIListBox • TTIMemo • TTICalendar • TTIImage • TTIFloatSpinEdit • TTISpinEdit • TTITrackBar • TTIProgressBar • TTIMaskEdit • TTIColorButton • TMultiPropertyLink • TTIPropertyGrid • TTIGrid
SQLdb TSQLQuery • TSQLTransaction • TSQLScript • TSQLConnector • TMSSQLConnection • TSybaseConnection • TPQConnection • TPQTEventMonitor • TOracleConnection • TODBCConnection • TMySQL40Connection • TMySQL41Connection • TMySQL50Connection • TMySQL51Connection • TMySQL55Connection • TMySQL56Connection • TSQLite3Connection • TIBConnection • TFBAdmin • TFBEventMonitor • TSQLDBLibraryLoader
Pascal Script TPSScript • TPSScriptDebugger • TPSDllPlugin • TPSImport_Classes • TPSImport_DateUtils • TPSImport_ComObj • TPSImport_DB • TPSImport_Forms • TPSImport_Controls • TPSImport_StdCtrls • TPSCustomPlugin
SynEdit TSynEdit • TSynCompletion • TSynAutoComplete • TSynMacroRecorder • TSynExporterHTML • TSynPluginSyncroEdit • TSynPasSyn • TSynFreePascalSyn • TSynCppSyn • TSynJavaSyn • TSynPerlSyn • TSynHTMLSyn • TSynXMLSyn • TSynLFMSyn • TSynDiffSyn • TSynUNIXShellScriptSyn • TSynCssSyn • TSynPHPSyn • TSynTeXSyn • TSynSQLSyn • TSynPythonSyn • TSynVBSyn • TSynAnySyn • TSynMultiSyn • TSynBatSyn • TSynIniSyn • TSynPoSyn
Chart TChart • TListChartSource • TRandomChartSource • TUserDefinedChartSource • TCalculatedChartSource • TDbChartSource • TChartToolset • TChartAxisTransformations • TChartStyles • TChartLegendPanel • TChartNavScrollBar • TChartNavPanel • TIntervalChartSource • TDateTimeIntervalChartSource • TChartListBox • TChartExtentLink • TChartImageList
IPro TIpFileDataProvider • TIpHttpDataProvider • TIpHtmlPanel