Урок 10. Стандартные диалоги. Создание текстового редактора

Урок из серии: «Программирование для школьников в среде Lazarus»

Стандартные диалоги – это диалоговые окна, общие для большинства приложений Windows. Например, когда пользователь сохраняет файл в редакторе Word, он использует диалоговое окно Save As … (Сохранить как …). Когда он сохраняет рабочую книгу в Microsoft Excel, он также использует диалоговое окно Save As …

Операционная система Windows стандартизирует и значительно облегчает создание таких диалоговых окон. Программисту нет необходимости «изобретать колесо» каждый раз, когда понадобится диалоговое окно, в котором пользователь будет сохранять или открывать файл.

Вместо этого программист попросту устанавливает стандартный компонент на форму и задает ему необходимые свойства.

В составе Lazarus поставляется 14 диалоговых компонентов. Все они находятся на вкладке Dialogs. Как и MainMenu, в среде Lazarus диалоговые компоненты являются невизуальными, они присутствуют на форме в виде значков, однако во время выполнения они невидимы.

В этом уроке мы рассмотрим диалоговые компоненты: TOpenDialog, TSaveDialog, TFontDialog.

Lazarus. Диалоговые компоненты

Для активизации диалогового окна используется метод Execute(). Он выполняет открытие соответствующего окна и возвращает значение True, если пользователь щелкнул по кнопке ОК.

Компоненты TOpenDialog и  TSaveDialog

Компонент TOpenDialog предназначен для выбора файла с целью последующего открытия,  а компонент  TSaveDialog — для последующего сохранения файла.

свойства приведены в таблице.

Свойства

Описание

DefaultExt Расширение файла по умолчанию Добавляется в конец имени файла, если расширение не указано явно.
Title Заголовок диалогового окна
FileName Выбранное пользователем имя файла вместе с полным путем поиска.
Filter Список расширений файлов, в соответствии с которыми отбираются имена файлов для отображения в диалоговом окне при открытии файла . При сохранении файла выбранное из списка расширение добавляется к имени файла.
FilterIndex Порядковый номер строки в списке расширений.

Урок 10. Стандартные диалоги. Создание текстового редактораЭти компоненты не предназначены для выполнения конкретных действий: загрузки  файла, записи в файл. Они применяются только для получения от пользователя желаемых настроек,  например ввода полного имени файла  вместе с путем поиска.

Рассмотрим использование диалоговых окон на примере создания простейшего Текстового редактора.

Урок 10. Стандартные диалоги. Создание текстового редактораЗадание. Создайте приложение Текстовый редактор. В приложении должно быть меню, содержащее  пункты: Файл -Открыть, Файл-Сохранить, Шрифт.  Приложение открывает текстовый файл на диске с использованием компонента TOpenDialog, записывает текст из файла  в объект Memo на форме.    После редактирования и форматирования текст необходимо сохранить. Для выбора файла  для сохранения использовать компонент  TSaveDialog, при форматировании шрифта —  компонент TFontDialog.

Урок 10. Стандартные диалоги. Создание текстового редактораПри работе с текстовыми файлами следует иметь в виду, что при выводе в TMemo файла с русским текстом, в Windows буквы могут  отображаться некорректно.  Это вызвано тем, что текстовые файлы в ОС Windows имеют кодировку CP-1251. Перед выводом текст необходимо  преобразовать в кодировку UTF8.

Для преобразования символов из одной кодировки в другую можно использовать  функции:  SysToUTF8() и UTFToSys().

Ход выполнения проекта

1. Создайте форму и разместите на ней компоненты MainMenu, Memo1. Компонент MainMenu – невизуальный компонент, его значок можно поместить в произвольном месте.

Memo-поле и простейший текстовый редактор

2. Чтобы начать формирование пунктов меню, дважды щелкните по компоненту TMainMenu1. Откроется специальное окно Редактор меню.

Определите пункты меню.

Меню первого уровне содержит два пункта: New Item1 и New Item2 . Первый пункт создается автоматически. Чтобы на этом уровне добавить второй пункт, откройте контекстное меню существующего пункта и выполните команду Вставить новый пункт (после). Появиться новый пункт New Item2.

Меню New Item1 содержит пункты : New Item3 и New Item4. Откройте контекстное меню пункта New Item1 и выполните команду Создать подменю. В подменю появиться пункт New Item3. Для него откройте контекстном меню и выполните команду Создать новый пункт (после). Появиться пункт New Item4.

Определяем пункты меню

3. Значения свойств установите в соответствии с таблицей.

Компонент Свойство Значение
MenuItem1 Caption Файл
MenuItem2 Caption Шрифт
MenuItem3 Caption Открыть
MenuItem4 Caption Сохранить
Form1 Caption Текстовый редактор
Memo1 ScrollBars ssVertical

4. Удалите текст «Memo1» из окна Memo1.

Для этого:

  • выберите в окне Инспектор объектов объект Memo1;
  • на странице Свойства в строке Lines дважды щелкните на значении String или на кнопке с многоточием для формирования и редактирования текста;
  • в окне Диалог ввода строк  удалите текст «Memo1» и щелкните мышью на кнопке ОК.

Memo-поле и простейший текстовый редактор

5. Выберите в палитре компонентов вкладку Dialogs и поместите на форму компоненты OpenDialog, SaveDialog, FontDialog.

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

Lazarus. Стандартные диалоги

6. Настройте свойства компонентов OpenDialog, SaveDialog

Компонент Свойство Значение
OpenDialog1 Title Открыть
SaveDialog1 Title Сохранить

7. Чтобы реализовать выбор типа файла при открытии файла в окне диалога:

  • выберите в окне Инспектор объектов объект OpenDialog1;
  • на странице свойства дважды щелкните мышью по списку значений свойства Filter.
  • в окне Редактор фильтра (Filter Edit) задайте фильтры для выбора типа и расширения файла.

Выбор типа файла при открытии файла в окне диалога

8. Чтобы установить в качестве расширения файла первый вариант (.txt), задайте для свойства OpenDialog1.FilterIndex значение 1.

9. Для диалога SaveDialog задайте свойство DefaultExt = txt (чтобы расширение txt автоматически добавлялось к создаваемому файлу).

10. В разделе implementation после директивы { TForm1 } запишите программный код процедуры Ansi_Memo, реализующей загрузку текста из файла с системной кодировкой (кодировка Ansi) в memo-поле (кодировка UTF8), а также процедуры Memo_Ansi, сохраняющей текст из memo-поля в файле на диске.

procedure Ansi_Memo(File_Ansi: string);
// Загрузка текста из файла в memo-поле на форме
var
tfile: TStringList;
str: string;
begin
tfile:= TStringList.Create; // создать список строк
// загрузить текст из файла в список  строк
tfile.LoadFromFile(File_Ansi);
str:= tfile.Text;
// загрузить текст из списка в memo-поле
Form1.Memo1.Lines.Add(str);
tfile.Free;
end;

procedure Memo_Ansi(File_Ansi: string);
// Сохранение текста из memo-поля в файле на диске
var
tfile: TStringList;
str: string;
begin
tfile:= TStringList.Create; // создать список строк
str:=Form1.Memo1.text;
// преобразовать текст в системную кодировку
str:= UTF8ToSys(str);
tfile.Add(str);
// сохранить в файле
tfile.SaveToFile(File_Ansi);
tfile.Free;
end;

11. Напишите программный код для процедуры обработчика щелчка на пункте меню Файл – Открыть. Для этого дважды щелкните  на данном пункте меню.

procedure TForm1.MenuItem3Click(Sender: TObject);//Файл - открыть
var
File_Ansi:string;
begin
if OpenDialog1.Execute then
   begin
      File_Ansi:= OpenDialog1.FileName;
      File_Ansi:= UTF8ToSys(File_Ansi);
      Ansi_Memo(File_Ansi);
   end;
end;

После выбора пользователем файла в  свойстве OpenDialog1.FileName будет находиться имя файла вместе с путем к нему.

Обратите внимание на оператор:

fname:= UTF8ToSys(fname).

Если имя файла, а также путь содержит кириллицу, то необходимо строку с именем файла преобразовать в системную кодировку.

12. Напишите программный код  процедуры обработчика щелчка на пункте меню Файл-Сохранить:

procedure TForm1.MenuItem4Click(Sender: TObject); //Файл - Сохранить
var
File_Ansi:string;
begin
 if SaveDialog1.Execute then
   begin
      File_Ansi:=SaveDialog1.FileName;

      File_Ansi:= UTF8ToSys(File_Ansi);

      Memo_Ansi(File_Ansi);
   end;
end;

Приложение открывает диалоговое окно «Сохранить», в котором задается имя файла. Имя файла из свойства SaveDialog1.FileName запоминается в переменной FName. В заключительной части процедуры оператор Memo1.Lines.SaveToFile(FName); используется для записи в файл содержимого свойства Lines объекта Memo1

13. Напишите программный код  процедуры обработчика щелчка на пункте меню Шрифт:

procedure TForm1.MenuItem2Click(Sender: TObject);
begin
 FontDialog1.Font:=  memo1.Font;
if FontDialog1.execute=true  then
     begin
        Form1.Memo1.Font := FontDialog1.Font;
     end;
end;

14. Сохраните, откомпилируйте и запустите на выполнение созданное приложение.

15. Щелкните мышью на кнопке Открыть, в диалоговом окне Открыть текстовый файл выберите папку, задайте тип файла и выберите текстовый файл, после чего нажмите кнопку Открыть.

16. Отредактируйте текст в окне приложения и нажмите кнопку Сохранить.

После этого в диалоговом окне сохранить текстовый файл выберите в поле тип файла расширение для сохраняемого файла, задайте его имя и щелкните мышью по кнопке Сохранить.

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

18. Измените размер шрифта и цвет в диалоговом окне Шрифт.

19. Завершите работу с приложением

До встречи в следующем уроке!

Подписаться
Уведомить о
guest

1 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Lucas
Lucas
5 лет назад

Thanks!