logo search
Posobie_Ravino_Atamanov

2.5.5.9. Использование системных диалогов.

В приложениях часто приходится выполнять стандартные действия: открывать и сохранять файлы, задавать атрибуты шрифтов, выбирать цвета палитры, производить контекстный поиск и замену и т.п.

В Delphi существуют простые для использования компоненты, реализующие соответствующие диалоговые окна Windows. Основная часть их размещена на странице Dialogs (рисунок 13).

Рисунок 13 ‑ Компоненты страницы Dialogs

Все компоненты стандартных диалогов со страницы Dialogs являются невизуальными компонентами, так что место их размещения на форме не имеет значения. При обращении к этим компонентам вызываются стандартные диалоги, вид которых зависит от версии Windows и настройки системы. Так что при запуске одного и того же приложения на компьютерах с разными системами диалоги будут выглядеть по-разному. Например, при русифицированной версии Windows все их надписи будут русскими, а при англоязычной версии надписи будут на английском языке.

Основной метод, которым производится обращение к любому диалогу, Execute. Эта функция открывает диалоговое окно и, если пользователь произвел в нем какой-то выбор, то функция возвращает true. При этом в свойствах компонента ‑ диалога запоминается выбор пользователя, который можно прочитать и использовать в дальнейших операциях. Если же пользователь в диалоге нажал кнопку Отмена (Cancel) или клавишу Esc, то функция Execute возвращает false. Поэтому стандартное обращение к диалогу имеет вид:

if <имя компонента-диалога> Execute

then <операторы, использующие выбор пользователя>

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

Делается это с помощью свойства Filter в Инспекторе Объектов. В окне редактора (рисунок 14)

Рисунок 14 – Окно редактора свойства Filter

В его левой панели Filter Name записывается текст, который увидит пользователь в выпадающем списке Тип файла диалога. А в правой панели Filter записываются разделенные точками c запятой шаблоны фильтра. В примере задано два фильтра: текстовых файлов с расширением .txt и любых файлов с шаблоном *.*

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

Пример использования OpenDialog. Пусть требуется открыть файл для чтения. Содержимое строки файла необходимо вывести в компонент Edit1. Для этого размещаем на форме компоненты Edit1, OpenDialog1 и Button1. Программный код представлен ниже.

procedure TForm1.Button1Click(Sender: TObject);

var

Fr:TextFile; //файловая переменная

S: String; // содержимое компонента Edit1

Begin

if OpenDialog1.Execute then {Активизация диалогового окна}

begin

AssignFile(Fr, OpenDialog1.FileName); {Указывается где и какой файл необходимо открыть}

Reset(Fr); //Открыть файл для чтения

Readln(Fr, S); //Чтение первой строки из файла

Edit1.Text:= S; {Помещение строки в компонент Edit1}

CloseFile(Fr); // Закрытие файла

end;

End;

Нажатие на кнопку Button1 открывает диалоговое окно открытия необходимого файла. После выбора файла и нажатия на кнопку в Edit записывается строка файла.

Пример использования SaveDialogs. Пусть требуется сохранить в файл содержимое компонента Edit1. Для этого размещаем на форме компонент Edit1, SaveDialog1 и Button1. Программный код представлен ниже.

procedure TForm1.Button1Click(Sender: TObject);

var

Fw: TextFile; // файловая переменная

S: string; {содержимое компонента Edit1}

Begin

if SaveDialog1.Execute then

{Активизация диалогового окна}

begin

AssignFile(Fw, SaveDialog1.FileName);

{Указываем где и с каким именем будет сохранен файл}

Rewrite(Fw); // открываем файл для записи

S:=Edit1.Text; {присваиваем переменной S содержимое компонента Edit}

Writeln(Fw, S); //запись данных в файл

CloseFile(Fw); //закрытие файла

end;

End;

Нажатие на кнопку Button1 открывает диалоговое окно сохранения файла под необходимым именем. После указания пути расположения, имени файла и нажатия на кнопку, в файл записывается содержимое компонента Edit1.

Для вывода на печать можно использовать компоненты PrintDialog , PrintSetupDialog и PageSetupDialog .

Компонент PrintDialog реализует стандартное диалоговое окно выбора параметров для печати документа. Компонент PrintSetupDialog реализует стандартное диалоговое окно для настройки печатающего устройства. Компонент PageSetupDialog реализует стандартное диалоговое окно настройки страницы перед выводом на печатающее устройство.

В качестве примера приведены две процедуры. Первая организует печать графика на всю страницу формата А4 в альбомной ориентации, вторая – выводит на печать содержимое компонента RichEdit.

procedure TForm1.BitBtn2Click(Sender: TObject);

var h,w:longint;

OldOrientation : TPrinterOrientation;

begin

If PrintDialog1.Execute Then {Печать графика}

begin

Screen.Cursor := crHourGlass; {устанавливаем вид курсора}

OldOrientation:=Printer.Orientation; {запоминаем ориентацию бумаги}

Printer.Orientation:=poLandScape; {устанавливаем альбомную ориентацию}

try

Printer.BeginDoc; {начало работы принтера}

try

h:=Printer.PageHeight; {идентификатор высоты принтера}

w:=Printer.PageWidth; {идентификатор ширины принтера}

{начало печати компонентов диаграммы}

Chart1.PrintPartial(Rect(w div 15, {левая граница}

h div 10, {верхняя граница}

w - (w div 20), {правая граница}

h - (h div 20) )); {нижняя граница}

Printer.EndDoc;{конец настоек и собственно печать}

except

on Exception do{если возникла какая-то ошибка...}

Begin

Printer.Abort;

Printer.EndDoc;

Raise; {обработка исключения, прерываем процесс печати}

end;

end; {конец защищенного блока try}

finally Printer.Orientation:=OldOrientation; {восстанавливаем ориентацию страницы}

Screen.Cursor:=crDefault; {восстанавливаем вид курсора}

end;

end;

end; {конец процедуры печати графика}

procedure TForm1.BitBtn4Click(Sender: TObject);

begin

If PrintDialog1.Execute

Then RichEdit1.Print('Печать документа');

end;

Аналогичным образом можно работать и с другими системными диалогами.