Memo — многострочный редактор в Delphi
Для работы с многострочным текстом Delphi предоставляет компонент Memo. Многострочный редактор имеет практически те же возможности по редактированию текста, что и однострочные редакторы. Главное отличие этих элементов управления заключается в том, что многострочный редактор содержит несколько строк текста.
Cвойство Text
На скриншоте ниже видно, что в редакторе кода Delphi данное свойство, так же как и другие свойства появляется в подсказке (всплывающее окно) уже тогда, когда мы ввели первую букву названия данного свойства.
Для доступа ко всему содержимому многострочного редактора используется свойство Text типа String. В этом случае все содержимое компонента Memo представляется одной строкой, а конец строки, вставляемый при нажатии клавиши <Enter>, записывается двумя кодами #13#10, поэтому видимых пользователем символов будет меньше, чем их содержится в строке Text. Эту особенность нужно учитывать, например, при определении позиции заданного символа в какой-либо строке компонента Memo.
Свойство Lines
К свойству Lines можно добраться в Объекте Инспектора Delphi, нажав на «кнопку с точками» рядом со свойством Lines (скриншот нже).
При этом появится скажем так, редактор. С помощью которого мы можев в ручную отредактировать записи в Memo на этопе разработки программы.
Для работы с отдельными строками используется свойство Lines типа TStrings. Класс TStrings служит для выполнения операций со строками и имеет различные свойства и методы, которые уже были рассмотрены выше. Компонент Memo позволяет использовать возможности этого класса через свое свойство Lines.
Рассмотрим примеры операций с многострочным редактором:
- Memo1.Lines[3] := 'asd';
- Memo2.Lines.Clear;
- МеmoЗ.Lines.Add('Новая строка');
В этом примере четвертой строке редактора Memo1 присваивается новое значение asd (напомним, что в классе TStrings нумерация строк начинается с нуля). Содержимое редактора Memo2 полностью очищается. В конец текста редактора MemoЗ добавляется новая строка.
Методы LoadFromFile и SaveToFile
Содержимое компонента Memo можно загружать из текстового файла и сохранять в текстовом файле. Для этого удобно использовать методы LoadFromFile (const FileName: String) и SaveToFile (const FileName: String) класса TString. Параметр FileName методов определяет текстовый файл для операций чтения и записи.
Пример чтения информации из текстового файла в компонент Memo1:
- Memo1.Lines.LoadFromFile('D:\examplel.txt');
и записи информации из компонента Memo2 в текстовый файл:
- Memo2.Lines.SaveToFile('D:\example2.txt');
Свойство ScrollBars
Для удобного просмотра информации можно задать в поле редактирования полосы прокрутки с помощью свойства ScrollBars типа TScrollStyle, принимающего следующие значения:
- ssNone (полосы прокрутки отсутствуют) — по умолчанию;
- ssHorizontal (горизонтальная полоса прокрутки снизу);
- ssVertical (вертикальная полоса прокрутки справа);
- ssBoth (есть обе полосы прокрутки).
Свойство Alignment — способ выравнивания текста в Memo
Текст в поле компонента Memo может быть выровнен различными способами. Способ выравнивания определяет свойство Alignment типа TAlignment, которое может принимать одно из следующих значений:
- taLeftJustify (выравнивание по левой границе) — по умолчанию;
- taCenter (выравнивание по центру);
- taRightJustify (выравнивание по правой границе).
Cвойство WantReturns — реакция компонента Memo на нажатие клавиши Enter
В отличие от однострочного редактора, компонент Memo обладает возможностью реакции на нажатие клавиши <Enter>. Чтобы при этом происходил ввод новой строки, свойству WantReturns типа Boolean должно быть установлено значение True (по умолчанию). В противном случае редактор не реагирует на нажатие клавиши <Enter>.
Cвойство WantTabs — реакция компонента Memo на клавишу Tab
Аналогично значение свойства WantTabs типа Boolean определяет реакцию компонента на нажатие клавиши <ТаЬ>. Если свойство установлено в значение True, то при нажатии клавиши <ТаЬ> в текст вставляются символы табуляции. По умолчанию свойство WantTabs имеет значение False, и при нажатии клавиши <ТаЬ> редактор передает фокус ввода следующему оконному элементу управления.
Интервал табуляции задается при создании компонента Memo, по умолчанию он равен 32 единицам. Для изменения интервала нужно послать редактору сообщение EM_SetTabstops, передав в качестве второго параметра ссылку на константу, содержащую массив или одиночное значение целочисленного типа. Первый параметр сообщения задает количество значений, содержащихся во втором параметре. Значения задаются в единицах измерения диалога.
Рассмотрим на примере, как производится установка значений табуляторов:
- procedure TForm1.btnTabClick(Sender: TObject);
- const
- PosTab1: integer = 100;
- PosTab2: array[0..2] of integer = (15, 20, 25);
- begin
- Memo1.Perform(em_SetTabStops, 1, Longint(@PosTab1));
- Memo2.Perform(em_SetTabStops, 3, Longint(@PosTab2));
- end;
Здесь для компонента Memo1 определяется новое значение табулятора, равное 100 единицам. Для компонента Memo2 устанавливаются три значения табулятора.
Даже в случае, когда свойства WantReturns и WantTabs имеют значение False, компонент Memo способен обработать нажатия клавиш <Enter> или <ТаЬ> при нажатой клавише <Ctrl>.