Шаг 2.
Вкладка Dialogs. Компоненты TOpenDialog и TSaveDialog

    На этом шаге мы рассмотрим основные свойства компонентов TOpenDialog и TSaveDialog.

    Компоненты TOpenDialog (окно открытия) и TSaveDialog (окно сохранения файлов) имеют идентичные свойства и поэтому рассматриваются вместе. Пример диалогового окна TOpenDialog показан на рисунке 1.


Рис.1. Стандартное окно TOpenDialog

    Свойство FileName:String содержит путь поиска и выбранный файл при успешном завершении диалога с пользователем. Программа может применять это свойство для доступа к файлу с целью читать из него данные (TOpenDialog) или записывать в него (TSaveDialog). Заметим, что пользователь может ввести произвольное имя и, следовательно, указать несуществующий файл. Для записи это не имеет значения, но при чтении отсутствие файла может привести к краху программы. Чтобы избежать этого, можно проверить существование файла глобальной функцией FileExists, как это сделано в примере предыдущего шага, или использовать механизм обработки исключительных ситуаций.

    Свойство Filter:String используется для фильтрации (отбора) файлов, показываемых в диалоговом окне. Это свойство можно устанавливать с помощью специального редактора на этапе конструирования формы или программно, как это сделано в примере предыдущего шага. Для доступа к редактору достаточно щелкнуть на кнопке в строке свойства Filter окна Инспектора Объектов. При программном вводе фильтры задаются одной длинной строкой, в которой символы вертикальной черты (|) служат для разделения фильтров, а также для отделения описания фильтруемых файлов от соответствующей маски выбора. Например, следующий оператор задает две маски для отбора файлов с расширениями .PAS и .ТХТ:

  OpenDialog1.Filter := 'Текстовые файлы|*.txt|' + 'Файлы Паскаля|*.pas';

    Установить начальный каталог позволяет свойство InitialDir:String. Например:

  OpenDialog1.InitialDir := 'C:\Program Files\Borland\Delphi6\Source';

    С помощью свойства DefaultExt:String формируется полное имя файла, если при ручном вводе пользователь не указал расширение. В этом случае к имени файла прибавляется разделительная точка и содержимое этого свойства.

    Настройка диалогового окна может варьироваться с помощью следующего свойства:

type TOpenOption =  (ofReadOnly, ofOverwritePrompt, ofHideReadOnly, ofNoChangeDir, 
       ofShowHelp, ofNoValidate, ofAllowMultiSelect, ofExtensionDifferent, 
       ofPathMustExist, ofFileMustExist, ofCreatePrompt, ofShareAware, 
       ofNoReadOnlyReturn, ofNoTestFileCreate, ofNoNetworkButton, 
       ofNoLongNames, ofOldStyleDialog, ofNoDereferenceLinks, 
       ofEnableIncludeNotify, ofEnableSizing, ofDontAddToRecent, 
       ofForceShowHidden); 
TOpenOptions = set of TOpenOption; 
property Options: TOpenOptions;

    Значения этого свойства имеют следующий смысл:

    Если разрешен множественный выбор, доступ к выбранным именам можно получить в свойстве Files: Strings.

    События компонентов TOpenDialog и TSaveDialog перечислены в таблице 1.

Таблица 1. События компонентов TOpenDialog и TSaveDialog
Событие Описание
type TCloseQueryEvent = procedure (Sender: TObject; var CanClose: Boolean) of object;
property OnCanClose: TCloseQueryEvent;
Возникает непосредственно перед закрытием диалогового окна. Используйте обработчик этого события для окончательной проверки правильности выбранного файла, например, его существования, возможности перезаписи содержимого и т. п. Если обработчик установит значение False в параметр CanClose, окно не будет закрыто
property OnClose: TNotifyEvent; Возникает при закрытии диалогового окна
property OnFolderChange: TNotifyEvent; Возникает при изменении отображаемой папки
type _OFNOTIFYEXA = packed record hdr: TNMHdr; lpOFN: POpenFilename; psf: IShellFolder; pidl: Pointer; end;
TIncludeItemEvent = procedure (const OFN: TOFNotifyEx; var Include: Boolean) of object;
property OnIncludeItem: TIncludeItemEvent;
Возникает для каждого элемента вновь открываемой папки, если свойство Options диалогового окна содержит элемент ofEnableIncludeNotifу. Обработчик события с помощью параметра Include указывает, следует ли отображать данный элемент папки
property OnSelectionChange: TNotifyEvent; Возникает при изменении содержимого диалогового окна: при изменении папки, выбранного файла,, фильтра отбора и т. п.
property OnShow: TNotifyEvent; Возникает при открытии диалогового окна
property OnTypeChange: TNotifyEvent; Возникает при изменении фильтра отбора (пользователь выбирает другой тип файлов в выпадающем списке внизу диалогового окна)

    На следующем шаге мы рассмотрим компоненты TOpenPictureDialog и TSavePictureDialog.




Предыдущий шаг Содержание Следующий шаг