
Диалоговые окна открытия и сохранения файла
Шаг 23. Диалоговые окна для выбора открываемого или сохраняемого файла организуются с помощью компонентов OpenDialog и SaveDialog. Найдите их в Палитре Компонентов на странице Dialogs и поместите на форму. Первый компонент назовите OpenDialog, а второй — SaveDialog (рис. 23).
Характерные свойства этих компонентов кратко описаны в таблице:
Свойство |
Описание |
DefaultExt |
Расширение, которое добавляется к имени файла, если пользователь его пропустил. |
RIeName |
Начальное имя файла. |
Filter |
Фильтр имени файла. |
Fiiterlndex |
Номер активного фильтра. |
InitialDir |
Начальный каталог, открываемый при первом появлении окна диалога. |
Options |
Параметры, определяющие внешний вид и поведение окна диалога. |
Title |
Заголовок окна диалога. Если значение свойства не указано, то заголовок будет стандартным -Open (Открыть) или Save (Сохранить), в зависимости от типа компонента. |
Компоненты OpenDialog и SaveOialog очень схожи между собой, оба являются объектно-ориентированными оболочками стандартных диалоговых окон Windows: Open и Save. Например, на следующем рисунке показано окно Open (рис. 24).
Приблизительный сценарий работы с каждым из компонентов OpenDialog и SaveDialog таков. Компонент помещается на форму и конфигурируется для выбора тех или иных файлов. По команде меню Open... или Save As... у соответствующего компонента вызывается метод Execute. Метод Execute выполняет диалог и возвращает значение True, если пользователь выбрал файл. Полный маршрут к файлу запоминается в значении свойства FileName. Ход дальнейших действий зависит от прикладной задачи и, как правило, включает или чтение, или запись файла, в зависимости от обрабатываемой команды меню.
Придерживаясь написанного сценария, приспособим компоненты OpenDialog и SaveDialog для выбора графических файлов с расширениями BMP, ICO, EMF и WMF. Чтобы пользователь мог просматривать файлы выборочно, т.е. какого-то одного типа, в диалоговых блоках имеется набор фильтров, оформленный в виде выпадающего списка Files oftype (см. рис. выше). Исходные данные для этого списка устанавливаются в свойстве Filter. Номер активного в данный момент фильтра записывается в свойстве Filterlndex.
Шаг 24. Приступим к формированию фильтров. Активизируйте на форме компонент OpenDialog и в Инспекторе Объектов сделайте двойной щелчок мыши на значении свойстваFilter (рис. 25):
Шаг 25. В результате на экране появится Редактор Фильтра (см. рис. ниже). Он представляет собой список с двумя колонками. В левой колонке вводится текст, отображаемый в выпадающем списке Files of type. В правой колонке через точку с запятой записываются маски, на основании которых выполняется фильтрация файлов в окне диалога. Для того чтобы предоставить пользователю максимальное удобство при выборе графических файлов, установите в компоненте OpenDialog фильтры, показанные на рис. 26.
Шаг 26. Действуя аналогично, установите фильтр в компоненте SaveDialog, как показано на рис. 27.
Компоненты OpenDialog и SaveDialog имеют большое количество булевских параметров, организованных в виде флагов составного свойства Options. Эти параметры влияют на то, как окно диалога выглядит и работает. По умолчанию все параметры имеют значение False. Результат установки параметров в значение True прокомментирован в таблице:
Параметр |
Описание |
ofAllowMultiSelect |
Если равно True, то пользователь может выделить сразу несколько файлов. |
ofCreatePrompt |
Если равно True и пользователь вводит имя несуществующего у файла, то пользователю задается вопрос, желает ли он создать новый файл с таким именем. |
ofExtensionDifferent |
Этот параметр устанавливается после завершения диалога, если расширение в имени файла отличается от начального расширения. |
ofFileMustExist |
Если равно True, то пользователь не сможет ввести имя несуществующего файла. |
ofHideReadOnly |
Если равно True, то переключатель Read-only отсутствует в окне диалога. |
ofNoChangeDir |
Если равно True, то пользователь не сможет сменить каталог в окне диалога. |
ofNoDereferenceUnks |
Если равно True, то ярлыки к каталогам трактуются как обычные файлы. В противном случае они трактуются как каталоги. |
ofNolongNames |
Если равно True, то длинные имена файлов запрещены. |
ofNoNetworkButton |
Если равно True, то кнопка Network отсутствует в окне диалога. Этот параметр работает только в паре с параметром ofOldStyleDialog. |
ofNoReadOnlyRetum |
Если равно True, то пользователь не сможет ввести файл с атрибутом read-only (только для чтения). |
ofNoTestRleCreate |
Если равно True, то проверка на возможность записи в каталог не выполняется. |
ofNoValidate |
Если равно True, то пользователь может вводить в имени файла любые символы, даже недопустимые. |
ofOldStyleDialog |
Если равно True, то окно диалога отображается в старом стиле Windows 3. 1. |
ofOverwritePrompt |
Если равно True, то пользователю выдается предупреждение при попытке сохранить файл с именем, которое уже существует. |
ofReadOnly |
Если равно True, то переключатель Read-only в окне диалога включен. |
ofPathMustExist |
Если равно True, то пользователь не сможет ввести для файла несуществующий маршрут. |
ofShareAware |
Если равно True, то ошибки одновременного доступа к файлу со стороны нескольких приложений игнорируются. |
ofShowHelp |
Если равно True, то в окне диалога присутствует кнопка Help. |
Шаг 27. В нашем простом примере ограничимся тем, что установим в обоих компонентах OpenDialog и SaveDialog параметр ofHideReadOnly, а в компонентеSaveDialog — еще и параметр ofOverwritePrompt.