Как из memo сохранить в текстовый файл delphi

Обновлено: 05.07.2024

Компонент Delphi Memo это простой текстовый редактор. Delphi Memo позволяет вводить многострочный текст с клавиатуры, загружать его из файла, редактировать и сохранять в файл текстового формата. При изучении работы с Delphi Edit советую посетить страничку работа со строками Delphi, так как там описываются функции Delphi для работы с данными, представленными в текстовой форме, с которыми и оперирует компонент Memo.

Простота текстового редактора компонента Delphi Memo заключается в том, что текстовый редактор Delphi Memo не обладает возможностями форматирования содержещегося в нём текста. Это означает, что все атрибуты выбранного шрифта будут относиться ко всему тексту.

Текст в компоненте Delphi Memo размещается построчно. Поэтому имеется доступ к каждой строке текста отдельно. Строки в редакторе Delphi Memo являются объектами Lines[i] типа String, где i - номер строки, отсчитываемый от нуля. Объект Lines[i] доступен и для чтения, и для записи. Соответственно, текст в компоненте Memo можно редактировать не только с клавиатуры, но и программно:

var S: String;
begin
Memo1.Lines[3]:='Четвёртая строка по счёту';
S:=Memo1.Lines[3];
end;

begin
Memo1.Lines.Add('Это будет последняя строка');
Memo1.Lines.Insert(2, 'Эта строка будет третьей'); //Так как отсчёт идёт от нуля!
end;

Delphi Memo имеет также метод для удаления строки:

Memo1.Lines.Delete(i); //Удаление строки с индексом i

Количество строк в компоненте Memo содержится в свойстве Count:

Пользуясь этим, например поиск фрагмента 'Нужный_Текст' в строках можно организовать так:

var i: Integer;
begin
for i:=0 to Memo.Lines.Count-1 do
begin
if AnsiPos('Нужный_Текст', Memo.Lines[i])<>0 then
begin
Caption:='Найдено в строке №'+IntToStr(i);
break;
end;
end;
end;

  • SelStart
  • SelLenght
  • SelText

Для того, чтобы выделение текста было заметно на экране, небходимо, чтобы компонент обладал фокусом ввода. То есть, чтобы ранее либо пользователь переместил туда курсор, клавишей Tab или щёлкнув мышкой, либо был выполнен оператор Memo1.SetFocus.

Остаётся вопрос, как определить, где сейчас находится курсор, на какой строке, и позицию в строке. Эти параметры содержатся в свойстве CaretPos компонента Delphi Memo, которое имеет тип TPoint, то есть точка - запись с координатами X и Y:

Memo1.CaretPos.X // позиция курсора в строке (в отличие от SelStart);
Memo1.CaretPos.Y // номер строки где находится курсор;

Используя среду разработки приложений Delphi 7 создадим простую программу "Записная книга". В форму будем вводить данные: фамилию, имя, отчество и телефон. При нажатии на кнопку "Применить" данные будут отображаться в текстовом поле. Добавим возможность сохранения в файлы. Приступаем! Загружаем среду разработки Delphi 7.

На форму бросаем компоненты Label (метка) в количестве четырёх штук. Этот компонент расположен на вкладке "Standard" палитры компонентов.

В свойстве Caption меток записываем "Фамилия" - для первой, "Имя" - для второй, "Отчество" - для третьей и "Телефон" - для четвёртой. Аккуратно располагаем метки одну под другой.

Напротив меток на форму бросаем компоненты "Panel" и внутрь этого компонента "Панель" ставим компонент "Edit" - строка редактирования. Оба компонента располагаются в той же вкладке "Standard"

Теперь нужно изменить свойства этих компонентов. Кликаем один раз на панели, после этого её свойства сразу отобразятся в окне "Инспектора объектов" - Object Inspector. Свойство Caption у панели стираем (оставляем пустым). Изменяем свойство BevelInner выбираем "bvLowered". Теперь кликаем на строку редактирования. Свойство Text выбираем "bsNone". Теперь подгоняем размеры нашего экземпляра Edit1 к размерам панели Panel1. Должно получится примерно вот так, как на рисунке.

Строка редактирования внутри панели - так сделано специально для того, чтобы было более красиво. Можно просто кинуть на форму строку редактирования (Edit) и этим ограничиться. Всё же свойство Text у Edit нужно оставить пустым. По умолчанию оно равно Edit1, как и имя экземпляра класса TEdit - нашего компонента "Строки редактирования". Перемещение компонента и изменение его размеров при помощи мыши не всегда удобно! Для перемещения компонента по форме или одного компонента внутри другого (как например, Edit внутри Panel) используйте сочетание клавиш "Ctrl" и клавиш курсора, а для изменения размеров используйте сочетание "Shift" + клавиши курсора. Или можно просто поставить те размеры, которые получились у меня. В свойствах Panel1 поставьте ширину Width = 185 и высоту Height = 24. Для Edit1 те же свойства: Width = 182, Height = 21. Но ещё измените смещение от левого края родительского компонента Left = 2 и смещение сверху Top = 2. Родительский компонент для Edit1 - это Panel1. Аналогично, форма Form1 - это родительский компонент (экземпляр класса) для всех компонентов брошенных на форму, она (форма) их содержит.

Далее, чтобы процесс был быстрее, можно выделить компонент Panel (аналогично можно сделать с несколькими компонентами), потом копируем сочетанием клавиш Ctrl + C и вставляем Ctrl + V. После вставки удобно двигать компоненты при помощи сочетания Ctrl + клавиши курсора! В результате должно получится примерно так.

Заходим на вкладку Additional палитры компонентов.

Располагаем эту кнопку на форме чуть ниже последней строки редактирования Edit4.

У кнопки BitBtn меняем свойство Kind на значение bkOK. В свойстве Caption напишем "Применить". Находим компонент Memo во вкладке Standard палитры компонентов и кидаем его ещё ниже на форму. Для усиления эффекта я сначала перетащил компонент Панель (Panel) поставил свойство Caption у него пустым, потом для BevelOuter в "Инспекторе объекстов" выбрал значение bvLowered. Далее положил на панель текстовое поле - компонент Memo. Для Мемо BorderStyle поставил bsNone, а свойство Align выбрал alClient, что дало возможность растянуть Memo по всей панели! Вот что получилось.

Ещё чуть ниже кладём кнопку BitBtn. В "Инспекторе объектов" в свойстве Caption пишем "Загрузить в файл". Помимо этого находим свойство Glyph, нажимаем на кнопочку с многоточием, и появляется диалоговое окно выбора графического файла. Выбираем путь: "C:\Program Files\Common Files\Borland Shared\Images\Buttons", там находим файл "filesave.bmp", выбираем его. Данная папка с файлами должна быть у Вас на компьютере, поскольку среда разработки Delphi 7 Вами установлена. Чтобы было более красиво поставим значение свойства Margin для BitBtn2 равное 10. Но у нас рисунок и надпись на кнопке слиты вместе, чтобы сделать отступ, поставьте 5 пробелов перед записью "Загрузить в файл" в свойстве Caption. Должно стать " Загрузить в файл".

Кликаем по форме, переходим к окну инспектора объектов и ставим "Записная книга" в свойстве Caption. Мы оформили внешний вид нашей программы. Запускаем её на выполнение (клавиша F9). Смотрим, что получается.

В правом верхнем углу есть средняя кнопка, рядом с крестиком (закрывает программу, окно), при нажатии на неё наша форма растянется по всему экрану. Давайте уберём эту возможность для пользователя! Возвращаемся к окну "Инспектора объектов". В свойстве формы BorderStyle выбираем bsSingle. Выше расположено свойство BorderIcons, если дерево не раскрыто, нажимаем на "плюсик" и выбираем biMaximize. Эти действия деактивируют раскрытие окна программы по всему экрану и его расширение с помощью мыши. Так же для свойства Position поставим poScreenCenter, это сделает показ нашего окна при запуске программы всегда по центру экрана монитора, как бы вы его не позиционировали во время проектирования интерфейса (внешнего вида).

Кликаем два раза по кнопке BitBtn1 c надписью "Применить". В открывшемся окне для кода между begin и end записываем следующее:

Memo1.Lines.Add(Edit1.Text);
Memo1.Lines.Add(Edit2.Text);
Memo1.Lines.Add(Edit3.Text);
Memo1.Lines.Add(Edit4.Text);

Это есть не что иное, как часть кода описывающее действия, которые будут происходить при нажатии пользователя на кнопку. Процедура procedure TFMain.BitBtn1Click(Sender: TObject); описывает событие нажатия на кнопку. Итак, что мы здесь делаем? Memo1 - текстовое поле. Поставив точку после имени экземпляра класса TMemo мы получаем доступ к его свойствам. Нас интересует свойство Lines типа TStrings. Ставим точку и получаем доступ к свойствам и методам Lines. Нас далее интересует метод Add, который добавляет строку в текстовое поле. Вообще метод - это некоторая процедура, выполняющая определённые действия над объектом.

Memo1.Lines.Add(Edit1.Text); - это добавление в поле того что написано в первой строке редактирования для Фамилии. Edit1.Text - это свойство которое отображается в строке редактирования (его так же можно менять на этапе проектирования интерфейса через инспектор объектов). Следующей строкой мы добавляем "Имя", потом "Отчество", "Телефон" и, для отделения от следующей записи, добавляем новую строку '--' - это наш разделитель. Любая строка пишется в апострофах, например, можно определить переменную S типа String и присвоить ей строку вот так: S = 'Строка'. Это можно сделать так:

procedure TFMain.BitBtn1Click(Sender: TObject);
Var
S: String;
begin
S := 'Строка';
Memo1.Lines.Add(S);
end;

Определяется переменная с помощью ключевого слова Var. Это делается перед begin.

Пробуем, как работает наша программа. Потом добавим ещё иконку и дадим имя программе. Напоминаю, как это сделать. Выбираем пункт меню Project -> Options (Ctrl + Shift + F11)

В появившемся окне на вкладке Application пишем в Title "Записная книга", выбираем иконку нажатием кнопки LoadIcon.

Файл для иконки book.ico можно будет потом взять из архива с файлами проекта в конце статьи или скопировать этот рисунок нажатием правой клавишей мыши по нему и выбором пункта меню "Сохранить рисунок как" (название может варьироваться в зависимости от браузера).

Отметим, что после того как мы двойным щелчком мыши кликнули по кнопке, в "Инспекторе объектов" во вкладке Events (События) у нас появилось событие BitBtn1Click. Кликнув два раза по нему в "Инспекторе объектов" мы так же попадаем в готовый шаблон кода для нашего события. Пробуйте!

Далее сохраняем наш проект. Перед этим свойству Name формы присвоим FMain (это главная форма!). При сохранении модулю формы присвойте соответствующее название Main.pas, а проекту - имя NoteBook.dpr. Всё должно быть чётко. По умолчанию среда Delphi 7 предлагает имена Unit1.pas и Project1.dpr для файлов модуля и проекта соответственно.

Продолжаем! У нас в текстовом редакторе Memo1 есть запись "Memo1". Можно её убрать, если выбрать в "Инспекторе объектов" (предварительно кликнув мышью по редактору Memo) свойство Lines. Нажмём на кнопку с многоточием и откроется небольшой редактор текста. Там можно стереть запись "Memo1". А вообще, там можно написать любой текст и сохранить его нажатием на кнопку "Ok". Этот текст будет отображаться при запуске программы. Есть ещё способы очистить текст в компоненте Memo. При создании формы, например. Кликните 2 раза по вашей форме (по той её части, где не располагаются другие компоненты), или кликнув по ней один раз, зайдите в "Инспекторе объектов" на вкладку Events и кликните дважды в поле события OnCreate. Эффект будет тот же, для Вас откроется шаблон для кода, который будет выполняться при создании формы. Форма создаётся на лету, незаметно для глаза пользователя, в этот момент можно очистить поле Memo записав следующий код:

procedure TFMain.FormCreate(Sender: TObject);
begin
Memo1.Clear;
end;

Или вместо процедуры очистки текстового поля "Memo1.Clear" можно очистить сам текст этого компонента: «Memo1.Lines.Text := ''» - это присвоение пустой строки для переменной Text имеющей строковый тип String. Знак присвоения := используется чтобы передать переменной значение, знак равно = в среде Delphi используется в логических операциях. Ниже будет рассказано как.

Возьмём во вкладке Dialogs палитры компонентов элемент SaveDialog и положим его куда-нибудь на форму. Это невизуальный компонент и отображаться на форме он будет в виде пиктограммы.

Предлагаю сделать так, чтобы в диалоговом окне сохранения файла отображались только текстовые файлы. И сохранять наши данные мы будем только в текстовом файле. Поэтому кликаем по пиктограмме компонента SaveDialog1 и переходим к свойству Filter в инспекторе объектов. Нажмём на кнопку с многоточием, запишем название фильтра и обозначим сам фильтр файлов. Фильтр для текстовых файлов (файлов с расширением txt) имеет вид *.txt.

Можно при желании указать несколько фильтров. Например, для файлов текстового типа и ещё какого-нибудь. В свойстве InitialDir указывается директория в которой будет находится элемент "Проводника Windows" в компоненте SaveDialog. Если свойство оставить пустым, то в диалоге будет выбрана произвольная директория, хранящаяся в настройках Вашей системы на данный момент. Давайте укажем текущую директорию, где расположен наш исполняемый exe-файл. Для этого на событии OnCreate формы запишем "SaveDialog1.InitialDir := ExtractFilePath(Application.ExeName);". То есть мы присваиваем свойству InitialDir результат выполнения функции ExtractFilePath из свойства ExeName класса Application. Это свойство Application.ExeName есть полный путь файла нашего приложения, а функция ExtractFilePath возвращает из этой строки путь к приложению.

Далее кликаем двойным щелчком мыши на кнопку с надписью "Загрузить файл", откроется шаблон для вставки кода, описывающего действия для события нажатия на эту кнопку. Запишем следующий код:

procedure TFMain.BitBtn2Click(Sender: TObject);
begin
if SaveDialog1.Execute = True then
Memo1.Lines.SaveToFile(SaveDialog1.FileName + '.txt');
end;

Рассмотрим, что тут делается. Функция Execute компонента SaveDialog открывает диалоговое окно сохранения файла. Открывает в директории указанной в параметре InitialDir, и будут оттображены директории, а так же файлы, расширение которых соответствует фильтру, указанному нами в свойстве Filter рассматриваемого компонета. Функция в Delphi - это та же процедура, то есть набор определённых действий программы, но при этом функция возвращает какое-то значение определённого типа. Процедура не возвращает никаких значений. Позже будем рассматривать и самостоятельно писать процедуры и функции. Так вот, функция Execute возвращает булево (логическое) значение True, если мы выбрали имя файла и нажали на кнопку "Сохранить", и возвращает False, если файл не выбран, и мы нажали "Отмена".

Равенство = True можно было бы не писать, а просто оставить if SaveDialog1.Execute then. Читать это условие следует так, что если мы выбрали при загрузке диалогового окна файл для сохранения, то (then) осуществляем следующие действия . А именно сохраняем данные текстового поля Memo в выбранный нами в диалоге файл.

Метод SaveToFile для "Memo1.Lines" позволяет сохранить содержимое поля в файл. Параметр у процедуры сохранения - имя файла с расширением. То есть то имя, которое мы ввели в диалоговом окне сохранения, плюс ещё расширение: + '.txt'.

Стоит отметить, что если при некотором условии нам нужно выполнить не одно действие, а несколько, то надо пользоваться ключевыми словами begin и end. В нашем случае этом может выглядеть так:

procedure TFMain.BitBtn2Click(Sender: TObject);
begin
if SaveDialog1.Execute then
Begin
Memo1.Lines.SaveToFile(SaveDialog1.FileName + '.txt');
ShowMessage('Файл успешно сохранён!');
End
else
ShowMessage('Сохранение файла отменено пользователем!');
end;

Ключевое слово else говорит о том, что будет делаться, если не выполнено условие после if, то есть если SaveDialog1.Execute вернёт значение False, другими словами, если будет нажата кнопка "Отменить" в диалоговом окне сохранения файла.

Пробуем запустить программу и посмотрим, как она работает!

Для того, чтобы наша программа была более функциональной, добавим ещё возможность загрузки текста из файла. Для этого во вкладке Dialogs палитры компонентов выберем компонент OpenDialog и закинем его на форму. Отметим, что сразу после этого, в классе нашей формы после ключевого слова type появляется запись "OpenDialog1: TOpenDialog;" - объявление о том что нашему классу формы доступны действия над "OpenDialog1".

Эти два компонента OpenDialog и SaveDialog очень похожи. Поэтому, аналогичным образом, на событии создания формы OnCreate инициализируем директорию, которая будет открываться проводником в диалоговом окне при загрузки данных из файла. Это происходит так же присвоением свойству InitialDir пути. Заметим, что этот путь у нас уже присвоен соответствующему свойству для SaveDialog. Вследствие этого в конце процедуры, перед словом end записываем "OpenDialog1.InitialDir := SaveDialog1.InitialDir;". То есть присваиваем для пути к директории открытия диалога то же значение, что и у SaveDialog1. Фильтр для расширения файлов делаем таким же! Можно это сделать там же, на OnCreate формы: "OpenDialog1.Filter := SaveDialog1.Filter;".

Теперь создадим кнопку "Загрузить из файла" точно такую же, как и "Загрузить в файл". Напоминаю, что соответствующий компонент BitBtn расположен на вкладке Additional палитры компонентов. Проделываем те же манипуляции, что и с BitBtn1, выбираем из "C:\Program Files\Common Files\Borland Shared\Images\Buttons" файл "fileopen.bmp" и т. д. Так же можно просто выделить кнопку BitBtn1 и скопировать её (Ctrl + C и Ctrl + V), далее изменять свойства скопированной кнопки.

На событии OnClick (двойной щелчок мыши по кнопке и открывается шаблон для кода) пишем практически то же самое:

procedure TFMain.BitBtn3Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Begin
Memo1.Lines.LoadFromFile(OpenDialog1.FileName + '.txt');
ShowMessage('Файл успешно загружен!');
End
else
ShowMessage('Загрузка файла отменена пользователем!');
end;

Здесь для загрузки из файла в Memo мы используем метод LoadFromFile для "Memo1.Lines". Всё остальное по аналогии с учётом того, что вместо SaveDialog используем компонент OpenDialog.

Давайте для усиления эффекта поставим ниже ещё одну кнопку. Загрузим в неё пиктограмму через свойство Glyph, выбрав файл "dooropen.bmp". Надпись сделаем "Выход" через свойство Caption. Два раза кликаем, и в шаблоне для кода пишем "Close;". Эта процедура завершает работу программы. Сохраняем проект и тестируем программу.

Архив со всеми файлами проекта и с иконкой можно скачать здесь f_d7_3.rar

Вы так же можете подписаться на бесплатную рассылку о новых статьях на сайте.

Когда речь идет о работе программы с текстовым файлом, подразумеваются процедуры ввода данных из файла в программу или, наоборот, запись этих данных в файл программой. Для текстового файла допустима простая работа с файлом без особых дополнительных механизмов, которые применяются для работы со специализированными файлами, такими как при загрузке данных из Excel или работе программы с базой данных. Разумеется, Delphi располагает возможностями работать с файлами с использованием компонентов. Но в данной статье рассматривается механизм прямой работы с текстовым файлом без использования дополнительных компонентов.

Итак, в общем виде, работа с файлом заключается в следующих этапах:

1. подключение к файлу – связь с внешним файлом, указание режима подключения;

2. выполнение операций записи в файл или чтения из файла;

3. завершение работы с файлом.

Подключение к файлу

Для связи программы с файлом используется специальная переменная – "Файловая переменная". Объявляется она так же как и любая переменная в Delphi. Тип это переменной может быть File для типизированных (хранящих данные определенного типа) файлов, а можно указать TextFile, что будет означать тип обычного текстового файла. Объявление переменной:

В исполняемом коде программы выполняется подключение к внешнему файлу:

Команда AssignFile, выполняет связь файловой переменной с внешним файлом. Вторым параметром указывается адрес файла. Он может быть задан относительным или абсолютным. Если указать только имя файла, то программа будет пытаться обнаружить его в той же директории, где она сама и находится. Абсолютный путь указывается от корневого диска:

Использование относительной директории дает возможность не привязываться к конкретным дискам и адресам. Например:

После того как выполнено подключение, выполняется процедура, устанавливающая режим работы с файлом. В основном это режим чтения или записи. Эти режимы назначаются процедурами Reset() ( для чтения) и rewrite() (для записи):

* Для команды Rewrite() следует учитывать, что при ее выполнении, она либо создает файл, указанный в файловой переменной, либо если он уже есть перезаписывает файл заново, удаляя старый без какого-то предупреждения.

Любую из указанных команд можно использовать без команды AssignFile(). Для этого достаточно вторым параметром указать путь к файлу. Таким образом, она сразу выполнит привязку файла к файловой переменной и назначит режим работы с этим файлом:

Операции с файлами

Для чтения из файла, необходимо назначить режим чтения и использовать команду Readln(), которая будет вводить в строковую переменную по одной строке из файла. Затем с этой переменой можно выполнить необходимые действия.

Обычно для загрузки всех строк из файла используется оператор цикла. Для того, чтобы определить, что файл закончился используется функция EOF() (End Of File). Таким образом получается цикл, в котором последовательно в строковую переменную вводятся все строки файла и завершающийся после окончания фала:

Для записи, назначение режим записи в файл и командой Writeln() производится запись по строкам.

Закрытие файла

По завершении работы с файлами, особенно в случае записи в них данных, необходимо корректно завершить работу с файловой переменной. Это делается для того, чтобы сохранить все внесенные в файл изменения.

Примеры работы с текстовыми файлами в Delphi

Чтение в переменную одного значения из файла:

Загрузить все строки файла в компонент Memo:

Следует отметить, что для этой задачи проще воспользоваться командой самого компонента Memo LoadFromFile().

Записать строку в файл:

Записать в текстовый файл все строки из компонента Memo:

Как и для чтения из файла в Memo, так и здесь, имеется специальная команда:

Для работы с многострочным текстом Delphi предоставляет компонент Memo. Многострочный редактор имеет практически те же возможности по редактированию текста, что и однострочные редакторы. Главное отличие этих элементов управления заключается в том, что многострочный редактор содержит несколько строк текста.

Cвойство Text

На скриншоте ниже видно, что в редакторе кода Delphi данное свойство, так же как и другие свойства появляется в подсказке (всплывающее окно) уже тогда, когда мы ввели первую букву названия данного свойства.

Свойство Lines

К свойству Lines можно добраться в Объекте Инспектора Delphi, нажав на «кнопку с точками» рядом со свойством Lines (скриншот нже).

При этом появится скажем так, редактор. С помощью которого мы можев в ручную отредактировать записи в Memo на этопе разработки программы.

Для работы с отдельными строками используется свойство Lines типа TStrings. Класс TStrings служит для выполнения операций со строками и имеет различные свойства и методы, которые уже были рассмотрены выше. Компонент Memo позволяет использовать возможности этого класса через свое свойство Lines.

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

В этом примере четвертой строке редактора 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, и при нажатии клавиши <ТаЬ> редактор передает фокус ввода следующему оконному элементу управления.

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

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

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

Читайте также: