Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 700269.doc
Скачиваний:
15
Добавлен:
01.05.2022
Размер:
1.78 Mб
Скачать

5.5.2. OpenDialog, SaveDialog и другие компоненты стандартных диалоговых окон

Кроме сообщений, в прикладных программах широко используются диалоговые окна открытия и сохранения файлов, печати, выбора параметров шрифта и т.п. Для реализации диалогов подобного типа в интегрированной среде Delphi существуют специальные стандартные компоненты, расположенные на странице Dialogs палитры компонентов.

Компоненты вызова стандартных диалогов Windows для открытия и сохранения файлов OpenDialog ( ), SaveDialog ( ) и OpenPictureDialog ( ), SavePictureDialog ( ) отображают соответствующие модальные диалоговые окна Windows. Компоненты OpenDialog и SaveDialog работают с файлами любого типа, а компоненты OpenPictureDialog и SavePictureDialog – с файлами изображений.

Открытие соответствующего диалога осуществляется методом Execute. Если в диалоге пользователь нажмет кнопку "Открыть" ("Сохранить"), диалог закрывается, метод Execute возвращает true и выбранный файл отображается в свойстве компонента-диалога FileName. Если же пользователь отказался от диалога (нажал кнопку "Отмена" или клавишу Esc), то метод Execute возвращает false.

Значение свойства FileName можно задать и перед обращением к диалогу. Тогда оно появится в диалоговом окне как значение по умолчанию. Таким образом, например, код выполнение команды "Сохранить как ...", в результате выполнения которой в файле с выбранным именем необходимо сохранить текст окна редактирования Memo1, может иметь вид:

With SaveDialog1 do BEGIN

FileName:=FName; // имя по умолчанию

if Execute then begin

FName:=FileName;

Memo1.Lines.SaveToFile(FName);

end;

END;

В этом коде предполагается, что имя файла хранится в строковой переменной FName. Перед вызовом диалога это имя передается в него как имя файла по умолчанию, а после выбора пользователем файла, его выбор запоминается в той же переменной, и текст сохраняется в выбранном файле методом SaveToFile класса TMemo.

Другой компонент FontDialog ( ) вызывает стандартный диалог Windows для выбора шрифта. Открытие диалога также осуществляется методом Execute. Если в диалоге выбрана кнопка "ОК" (или нажата клавиша Enter), диалог закрывается, метод Execute возвращает true и выбранные атрибуты шрифта передаются в свойство Font компонента-диалога. Если же пользователь отказался от диалога (нажал кнопку "Отмена" или клавишу Esc), то метод Execute возвращает false.

Значение свойства Font также можно задать перед вызовом диалогового окна. Тогда оно определит значения атрибутов шрифта по умолчанию, которые увидит пользователь в момент открытия диалога. Таким образом, например, выполнение команды "Шрифт", по которой пользователь может задать текущее значение шрифта для компонента RichEdit1, может иметь вид:

// Задание в качестве атрибутов по умолчанию

// атрибутов шрифта текущей позиции курсора в тексте

FontDialog1.Font.Assign(RichEdit1.SelAttributes);

// Открытие диалога

if(FontDialog1.Execute) then

RichEdit1.SelAttributes.Assign(FontDialog1.Font);

Свойство Device определяет, из какого списка возможных шрифтов будет предложен выбор в диалоговом окне: fdScreen – из списка экрана (по умолчанию), fdPrinter – из списка принтера, fdBoth – из обоих.

Свойство Options содержит множество опций диалога. Например, если установить опцию fdApplyButton, то в диалоговом окне появится еще одна кнопка "Применить", при нажатии которой возникает событие OnApply, в обработчике которого можно написать код, применяющий выбранные атрибуты без закрытия диалогового окна. Например:

RichEdit1.SelAttributes.Assign(FontDialog1.Font);

RichEdit1.Invalidate; // перерисовать компонент

Тогда можно, не прерывая диалога, наблюдать изменения непосредственно в окне RichEdit1, нажимая в диалоговом окне кнопку "Применить". При работе с компонентом класса TMemo аналогичный оператор может иметь вид:

Memo1.Font.Assign(FontDialog1.Font);

Свойства MaxFontSize и MinFontSize устанавливают ограничения на максимальный и минимальный размеры шрифта (действуют только при включенной опции fdLimitSize).

Компонент ColorDialog ( ) отображает диалоговое окно Windows для выбора цветов. Диалог активизируется методом Execute. Когда пользователь выбирает цвет и нажимает "OK", диалог закрывается, и выбранный цвет сохраняется в свойстве Color.

Для визуализации диалоговых окон, связанных с печатью, в Delphi существуют компоненты PrinterSetupDialog ( ) для отображения диалога установки параметров принтера и PrintDialog ( ), который отображает стандартное диалоговое окно для посылки заданий на принтер. В последнем можно выбрать принтер и установить его свойства, указать число копий и последовательность их печати, печатать в файл или непосредственно на принтер, выбрать печатаемые страницы или печатать только выделенный фрагмент и т.д. Отметим, что компонент PrintDialog не осуществляет печать. Он только позволяет пользователю задать атрибуты печати, которые могут быть прочитаны приложением как ряд свойств. А сама печать должна осуществляться программно с помощью объекта типа TPrinter или иным путем.

Задачи поиска и замены текстовых фрагментов реализуются с помощью компонентов FindDialog ( , отображает диалоговое окно поиска в тексте заданного фрагмента) и ReplaceDialog ( , диалог контекстного поиска и замены).

Диалоги вызываются методом Execute. Сами по себе компоненты не осуществляют ни поиска, ни замены, они только обеспечивают интерфейс с пользователем. Поиск и замена должна осуществляться программно с помощью обработки событий OnFind (происходит при нажатии в диалоговом окне кнопки "Найти далее") и OnReplace (использование кнопок "Заменить" или "Заменить все", причем идентификация осуществляется по значениям флагов frReplace и frReplaceAll).