Шаг 30. Диалоговые окна для выбора открываемого или сохраняемого файла организуются с помощью компонентов OpenDialog и SaveDialog (рисунок 8.29). Найдите их в палитре компонентов на вкладке Dialogs и поместите на форму. Первый компонент назовите OpenDialog, а второй - SaveDialog.
Рисунок 8.28. Компоненты OpenDialog и SaveDialog
Характерные свойства этих компонентов кратко описаны в таблице 8.6.
| Свойство | Описание |
|---|---|
| DefaultExt | Расширение, которое добавляется к имени файла, если пользователь его не указал. |
| FileName | Имя выбранного файла. |
| Filter | Фильтры имени файла. |
| FilterIndex | Номер активного фильтра. |
| InitialDir | Начальный каталог, открываемый при первом появлении окна диалога. |
| Options | Параметры, определяющие внешний вид и поведение окна диалога. (см. таблицу 8.7). |
| OptionsEx | Дополнительные параметры, определяющие внешний вид и поведение окна диалога (см. таблицу 8.7). |
| Title | Заголовок окна диалога. Если значение свойства не указано, то заголовок будет стандартным - Open (Открыть) или Save (Сохранить) в зависимости от типа компонента. |
| OnCanClose | Происходит, когда пользователь пытается закрыть окно диалога. Позволяет выполнить дополнительные проверки и отменить закрытие окна при необходимости. |
| OnClose | Происходит непосредственно перед закрытием формы после события OnCanClose. |
| OnFolderChange | Происходит, если пользователь переходит в другой каталог. |
| OnIncludeItem | Происходит при добавлении каждого файла в список отображаемых в окне файлов. Позволяет выполнять дополнительную фильтрацию файлов. |
| OnSelectionChange | Происходит при смене выделенного файла или списка файлов. |
| OnShow | Происходит непосредственно перед отображением окна диалога на экране. |
| OnTypeChange | Происходит, когда пользователь выбирает фильтр. |
Компоненты OpenDialog и SaveDialog очень схожи между собой, оба являются объектно-ориентированными оболочками стандартных диалоговых окон Windows: Open и Save. На следующем рисунке показано окно Open (рисунок 8.29).
Рисунок 8.29. Стандартное окно Open для выбора открываемого файла
Приблизительный сценарий работы с каждым из компонентов OpenDialog и SaveDialog таков. Компонент помещается на форму и конфигурируется для выбора тех или иных файлов. По команде меню Open... или Save As... у соответствующего компонента вызывается метод Execute. Он вызывает диалог и возвращает значение True, если пользователь выбрал файл. Полный маршрут к файлу запоминается в свойстве FileName. Ход дальнейших действий зависит от прикладной задачи и, как правило, включает или чтение, или запись файла, в зависимости от обрабатываемой команды меню.
Придерживаясь написанного сценария, приспособим компоненты OpenDialog и SaveDialog для выбора графических файлов, поддерживаемых нашей программой. Чтобы пользователь мог просматривать файлы выборочно (какого-то одного типа) в диалоговых блоках имеется набор фильтров, оформленный в виде раскрывающегося списка с подписью Files of type (см. рис. выше). Исходные данные для этого списка устанавливаются в свойстве Filter. Номер активного в данный момент фильтра записывается в свойстве FilterIndex.
Шаг 31. Приступим к формированию списка фильтров. Активизируйте на форме компонент OpenDialog и в окне свойств выберите свойство Filter (рисунок 8.30). Щелчком кнопки с многоточием откройте редактор фильтров - окно Filter Editor (рисунок 8.31).
Рисунок 8.30. Нажатие кнопки с многоточием вызывает редактор фильтров
Окно Filter Editor представляет собой список с двумя столбцами. В левой колонке вводится текст, отображаемый в раскрывающемся списке Files of type окна диалога. В правом столбце через точку с запятой записываются маски, на основании которых выполняется фильтрация файлов.
Шаг 32. Установите в компоненте OpenDialog фильтры, как показано на рисунке 8.31.
Рисунок 8.31. Окно для редактирования фильтров - Filter Editor
Шаг 33. Аналогичным образом установите фильтры в компоненте SaveDialog. Самый простой и быстрый способ в данном случае - скопировать текст свойства Filter из компонента OpenDialog в компонент SaveDialog через буфер обмена (результат показан на рисунке 8.32):
Рисунок 8.32. Фильтры для окна Save скопированы из окна Open
Компоненты OpenDialog и SaveDialog имеют большое количество булевских параметров, организованных в виде составных свойств Options и OptionsEx. Эти параметры влияют на то, как окно диалога выглядит и работает. Их смысл поясняет таблица 8.7.
| Параметр | Описание |
|---|---|
| ofReadOnly | Если равно True, то переключатель Read-only в окне диалога включен. |
| ofOverwritePrompt | Если равно True, то пользователю выдается предупреждение при попытке сохранить файл с именем, которое уже существует. |
| ofHideReadOnly | Если равно True, то переключатель Read-only отсутствует в окне диалога. |
| ofNoChangeDir | Если равно True, то пользователь не сможет сменить каталог в окне диалога. |
| ofShowHelp | Если равно True, то в окне диалога присутствует кнопка Help. |
| ofNoValidate | Если равно True, то пользователь может вводить в имени файла любые символы, даже недопустимые. |
| ofAllowMultiSelect | Если равно True, то пользователь может выделить сразу несколько файлов. |
| ofExtensionDifferent | Этот параметр устанавливается после завершения диалога, если расширение в имени файла отличается от начального расширения. |
| ofPathMustExist | Если равно True, то пользователь не сможет ввести для файла несуществующий маршрут. |
| ofFileMustExist | Если равно True, то пользователь не сможет ввести имя несуществующего файла. |
| ofCreatePrompt | Если равно True и пользователь вводит имя несуществующего файла, то пользователю задается вопрос, желает ли он создать новый файл с таким именем. |
| ofShareAware | Если равно True, то ошибки одновременного доступа к файлу со стороны нескольких приложений игнорируются. |
| ofNoReadOnlyReturn | Если равно True, то пользователь не сможет ввести файл с атрибутом read-only (только для чтения). |
| ofNoTestFileCreate | Если равно True, то проверка на возможность записи в каталог не выполняется. |
| ofNoNetworkButton | Если равно True, то кнопка Network отсутствует в окне диалога. Этот параметр работает только в паре с параметром ofOldStyleDialog. |
| ofNoLongNames | Если равно True, то длинные имена файлов запрещены. |
| ofOldStyleDialog | Если равно True, то окно диалога отображается в старом стиле Windows 3.1. |
| ofNoDereferenceLinks | Если равно True, то ярлыки к каталогам трактуются как обычные файлы. В противном случае они трактуются как каталоги. |
| ofEnableIncludeNotify | Если равно True, то при формировании списка отображаемых файлов происходит событие OnIncludeItem (для каждого файла). В обработчике этого события обычно выполняется дополнительная фильтрация файлов. |
| ofEnableSizing | Если равно значению True, то пользователь имеет возможность изменять размеры окна диалога. |
| ofDontAddToRecent | Если равно значению True, то файл не помещается в список последних открытых файлов. |
| ofShowHidden | Если равно True, то в окне показываются скрытые файлы (файлы с атрибутом Hidden). |
| ofExNoPlaceBar | Если равно True, то боковая панель не показывается в окне диалога. Флажок ofExNoPlaceBar относится к свойству OptionsEx. |
Шаг 34. В нашем простом примере ограничимся тем, что установим в компоненте SaveDialog параметр ofOverwritePrompt в значение True (см. табл. 6.6).
Заметим, что проверить работу компонентов OpenDialog и SaveDialog можно с помощью команды Test Dialog. Она находится в контекстном меню значка компонента в форме.




