Memo — многострочный редактор в Delphi | Delphi-FAQ

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.

Рассмотрим примеры операций с многострочным редактором:

  1. Memo1.Lines[3] := 'asd';
  2. Memo2.Lines.Clear;
  3. МеmoЗ.Lines.Add('Новая строка');

В этом примере четвертой строке редактора Memo1 присваивается новое значение asd (напомним, что в классе TStrings нумерация строк начинается с нуля). Содержимое редактора Memo2 полностью очищается. В конец текста редактора MemoЗ добавляется новая строка.

Методы LoadFromFile и SaveToFile

Содержимое компонента Memo можно загружать из текстового файла и сохранять в текстовом файле. Для этого удобно использовать методы LoadFromFile (const FileName: String) и SaveToFile (const FileName: String) класса TString. Параметр FileName методов определяет текстовый файл для операций чтения и записи.

Пример чтения информации из текстового файла в компонент Memo1:

и записи информации из компонента Memo2 в текстовый файл:


Свойство 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, передав в качестве второго параметра ссылку на константу, содержащую массив или одиночное значение целочисленного типа. Первый параметр сообщения задает количество значений, содержащихся во втором параметре. Значения задаются в единицах измерения диалога.

Рассмотрим на примере, как производится установка значений табуляторов:

  1. procedure TForm1.btnTabClick(Sender: TObject);
  2. const
  3. PosTab1: integer = 100;
  4. PosTab2: array[0..2] of integer = (15, 20, 25);
  5. begin
  6. Memo1.Perform(em_SetTabStops, 1, Longint(@PosTab1));
  7. Memo2.Perform(em_SetTabStops, 3, Longint(@PosTab2));
  8. end;

Здесь для компонента Memo1 определяется новое значение табулятора, равное 100 единицам. Для компонента Memo2 устанавливаются три значения табулятора.

Даже в случае, когда свойства WantReturns и WantTabs имеют значение False, компонент Memo способен обработать нажатия клавиш <Enter> или <ТаЬ> при нажатой клавише <Ctrl>.

Метки: ,
Если Вам интересна эта запись, Вы можете следить за ее обсуждением, подписавшись на RSS 2.0 .

Оставить комментарий или два

*