Урок из серии: «Программирование для школьников в среде Lazarus»
Стандартные диалоги – это диалоговые окна, общие для большинства приложений Windows. Например, когда пользователь сохраняет файл в редакторе Word, он использует диалоговое окно Save As … (Сохранить как …). Когда он сохраняет рабочую книгу в Microsoft Excel, он также использует диалоговое окно Save As …
Операционная система Windows стандартизирует и значительно облегчает создание таких диалоговых окон. Программисту нет необходимости «изобретать колесо» каждый раз, когда понадобится диалоговое окно, в котором пользователь будет сохранять или открывать файл.
Вместо этого программист попросту устанавливает стандартный компонент на форму и задает ему необходимые свойства.
В составе Lazarus поставляется 14 диалоговых компонентов. Все они находятся на вкладке Dialogs. Как и MainMenu, в среде Lazarus диалоговые компоненты являются невизуальными, они присутствуют на форме в виде значков, однако во время выполнения они невидимы.
В этом уроке мы рассмотрим диалоговые компоненты: TOpenDialog, TSaveDialog, TFontDialog.
Для активизации диалогового окна используется метод Execute(). Он выполняет открытие соответствующего окна и возвращает значение True, если пользователь щелкнул по кнопке ОК.
Компоненты TOpenDialog и TSaveDialog
Компонент TOpenDialog предназначен для выбора файла с целью последующего открытия, а компонент TSaveDialog — для последующего сохранения файла.
свойства приведены в таблице.
Свойства | Описание |
DefaultExt | Расширение файла по умолчанию Добавляется в конец имени файла, если расширение не указано явно. |
Title | Заголовок диалогового окна |
FileName | Выбранное пользователем имя файла вместе с полным путем поиска. |
Filter | Список расширений файлов, в соответствии с которыми отбираются имена файлов для отображения в диалоговом окне при открытии файла . При сохранении файла выбранное из списка расширение добавляется к имени файла. |
FilterIndex | Порядковый номер строки в списке расширений. |
Эти компоненты не предназначены для выполнения конкретных действий: загрузки файла, записи в файл. Они применяются только для получения от пользователя желаемых настроек, например ввода полного имени файла вместе с путем поиска.
Рассмотрим использование диалоговых окон на примере создания простейшего Текстового редактора.
Задание. Создайте приложение Текстовый редактор. В приложении должно быть меню, содержащее пункты: Файл -Открыть, Файл-Сохранить, Шрифт. Приложение открывает текстовый файл на диске с использованием компонента TOpenDialog, записывает текст из файла в объект Memo на форме. После редактирования и форматирования текст необходимо сохранить. Для выбора файла для сохранения использовать компонент TSaveDialog, при форматировании шрифта — компонент TFontDialog.
При работе с текстовыми файлами следует иметь в виду, что при выводе в TMemo файла с русским текстом, в Windows буквы могут отображаться некорректно. Это вызвано тем, что текстовые файлы в ОС Windows имеют кодировку CP-1251. Перед выводом текст необходимо преобразовать в кодировку UTF8.
Для преобразования символов из одной кодировки в другую можно использовать функции: SysToUTF8() и UTFToSys().
Ход выполнения проекта
1. Создайте форму и разместите на ней компоненты MainMenu, Memo1. Компонент MainMenu – невизуальный компонент, его значок можно поместить в произвольном месте.
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» и щелкните мышью на кнопке ОК.
5. Выберите в палитре компонентов вкладку Dialogs и поместите на форму компоненты OpenDialog, SaveDialog, FontDialog.
Эти компоненты невизуальные, разместить их в нижней части формы рядом со значком TMainMenu.
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. Завершите работу с приложением
До встречи в следующем уроке!
Thanks!