Стандартные диалоги – это диалоговые окна, общие для большинства приложений 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. Завершите работу с приложением
|