Главная > Lazarus >

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

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

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

Advertisement

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

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

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

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

Advertisement

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

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

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

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

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

Advertisement

Свойства

Описание

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. Значения свойств установите в соответствии с таблицей.

КомпонентСвойствоЗначение
MenuItem1CaptionФайл
MenuItem2CaptionШрифт
MenuItem3CaptionОткрыть
MenuItem4CaptionСохранить
Form1CaptionТекстовый редактор
Memo1ScrollBarsssVertical

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

Для этого:

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

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

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

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

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

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

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

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. Завершите работу с приложением

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

1 комментарий для “Урок 10. Стандартные диалоги. Создание текстового редактора”

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *