На этом шаге мы рассмотрим основные свойства компонентов 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.
Событие | Описание |
---|---|
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.