Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга о KOL.doc
Скачиваний:
29
Добавлен:
30.04.2019
Размер:
1.77 Mб
Скачать

5 .3. Диалог выбора файла (tOpenSaveDialog)

Диалоги - это так же невизуальные объекты, хотя работа с ними и приводит к появлению на экране некоторых системных окон. Но это именно системные окна, их нельзя настраивать как форму, и появляются они лишь на некоторое время, для выполнения определенных действий.

Диалог выбора файла обеспечивает возможность пользователю, используя стандартный интерфейс, выбрать имя файла для создания и записи в него какой-то предусмотренной приложением информации, или имя существующего файла для выполнения с ним каких-либо действий. Диалог выбора файла может быть диалогом открытия или сохранения файла. В диалоге открытия можно указывать только существующий файл. В диалоге сохранения так же возможно указать существующий файл, и обычно принято за норму, что система в этом случае задает пользователю дополнительный вопрос о том, действительно ли он хочет записать в него новую информацию (скорее всего, запортив прежнее содержимое этого файла). Хотя, если указать в опциях режим "молчания", такой вопрос задаваться не будет.

Конструктор этого объекта управления таким диалогом:

NewOpenSaveDialog( s, dir, options ) - создает диалог с заголовком s (если пустая строка, то используется системный заголовок), с начальной директорией dir и опциями из следующего набора:

OSCreatePrompt - запрос у пользователя подтверждения на создание файла, если он еще не существует;

OSExtensionDifferent - содержит true после завершения диалога, если расширение выбранного файла отличается от значения по умолчанию;

OSFileMustExist - файл должен существовать;

OSHideReadonly - скрыть переключатель "только для чтения" (Read only) в диалоге;

OSNoChangedir - пользователь может выбрать имя файла только в указанной директории;

OSNoReferenceLinks - для ярлыков (.lnk) возвращать путь к самому файлу ярлыка, а не к связанному с ним файлу;

OSAllowMultiSelect - разрешает множественный выбор (возвращается несколько имен файлов);

OSNoNetworkButton - не разрешает выбор в сетевых папках;

OSNoReadonlyReturn - не возвращать файлы с атрибутом "только для чтения", в том числе с устройств и из директорий, в которые не допускается запись;

OSOverwritePrompt - выдавать запрос на подтверждение перезаписи для существующих файлов;

OSPathMustExist - директория должна существовать;

OSReadonly - переключатель "только для чтения" первоначально включен, при завершении диалога эта опция показывает последнее значение переключателя;

OSNoValidate - не проверять наличие такого файла и корректность имени (при ручном наборе имени файла в поле ввода диалога);

OSTemplate - используется шаблон расширения диалога из ресурсов (см. свойство Template);

OSHook - разрешает дополнительный пользовательский обработчик сообщений диалога (см. свойство HookProc).

Для упрощения процедуры создания, чтобы не выписывать каждый раз все нужные свойства, в качестве параметра можно передать глобальную константу DefOpenSaveDlgOptions. В последующем, опции можно изменять на стандартные, наиболее подходящие для диалога открытия или сохранения, изменяя значение свойства OpenDialog.

Итак, свойства, поля, метод и событие объекта для управления диалогом выбора файла:

Execute - функция для вызова диалога. Возвращает true, если диалог завершился успешным выбором файла;

Filename - строка, которая на выходе содержит имя выбранного файла (если диалог завершился успешно, т.е. метод Execute возвратил true). На входе, т.е. перед обращением к методу Execute, это свойство можно использовать, чтобы назначить имя файла для возврата по умолчанию (это имя будет показано первоначально в поле ввода имени файла). При разрешении множественного выбора файлов в диалоге, обязательно следует перед вызовом Execute сбрасывать это свойство, присваивая пустую строку. Для случая, когда выбрано множество файлов, на выходе строка разбита на части, разделенные символом #13, в первой части при этом содержится путь к директории, а все остальные содержат только имена файлов;

InitialDir - исходная директория, список которой открывается при вызове Execute. После вызова диалога, в случае его успешного завершения, это свойство содержит путь к директории, в которой был выбран файл;

Filter - строка, содержащая пары <определение фильтра>|<шаблоны фильтра>, разделенные символами '|' (т.е., если фильтров несколько, то схематично выглядит это так: <ОФ1>|<ШФ1>|<ОФ2>|<ШФ2>|...). Если в одном фильтре несколько шаблонов, то они разделяются символом ';'. Пример типичного фильтра: 'Документы|*.doc;*.txt|Все файлы|*.*';

FilterIdx - индекс текущего фильтра (как перед вызовом Execute, так и в результате его успешного исполнения);

DefExtension - строка расширения по умолчанию (записывается без ведущей точки, т.е., например 'txt', а не '.txt'. По-видимому, никакого другого предназначения у данного свойства, кроме как возможность проверки на наличие различий в расширении выбранного файла от расширения по умолчанию, просто нет;

Title - заголовок диалога. Если эта строка пуста, система показывает свой заголовок;

WndOwner - окно для обработки сообщений, и для передачи системе в качестве "владельца" диалога (по окончании диалога будет активировать именно это окно, как после обычного выхода из любого модального диалога);

OpenDialog - при присваивании значения (true или false) свойству Options назначается набор наиболее подходящих опций, соответственно, для диалога открытия и сохранения файла;

Options - опции диалога;

TemplateName - имя ресурса, из которого система подгружает и настраивает расширение для диалога. Требуется добавление в список символов условной компиляции проекта символа OpenSaveDialog_Extended, а в опции значения osTemplate;

HookProc - событие для обработки сообщений от диалога. Так же требуется символ условной компиляции OpenSaveDialog_Extended, а в опции значения osHook;

Шаблон дополнительного окна для диалога в ресурсе может быть создан с помощью Borland Workshop или MS Visual C++. Таким образом, например, может быть создан набор дополнительных флажков, кнопок или окошек для отображения содержимого выбираемого файла. Работать с окнами в обработчике HookProc придется на низком уровне, вызывая функции API. Но иногда возможность добавить свои управляющие элементы к стандартному диалогу открытия может оказаться очень полезной или просто необходимой.

NoPlaceBar - запрещает показывать в диалоге нового стиля в левой его части линейку "мест размещения".

В пакете MCK данный объект представлен невизуальным зеркальным компонентом TOpenSaveDialog.