Страница 36 из 59 Компоненты TOpenDialog и TSaveDialog TObj ect—>TPersistent—>TCoinponent—>TConimonDialog—”TOpenDialog—” -+TSaveDialog Модуль DIALOGS Страница Палитры компонентов Dialogs Эти компоненты-диалоги предназначены для выбора имени файла, который будет в дальнейшем использован для чтения или записи. Рассмотрим их совместно, т. к. они отличаются только интерпретацией некоторых опций. Диалог может быть настроен на представление имен файлов какого-нибудь одного типа или нескольких типов. При этом только эти типы отображаются в списке, и только из них может сделать выбор пользователь, с помощью свойства: (РЬ) property Filter: string; Формат строки фильтра состоит из двух частей. В первой задается краткое описание типа. Во второй части, которая отделяется символом '|' — маска поиска нужных файлов по расширению. В список файлов попадут только те, которые имеют указанные расширения. Примеры задания фильтра: 'Delphi projectsl*.dpr' или 'All graphics files I *-bmp,*.ico,*.wmf '. Таких пар строк для разных типов в фильтре может быть несколько, при этом форматы представления фильтра в самой системе Windows и в Delphi имеют одно отличие. При вызове стандартных диалогов Windows эти пары строк должны разделяться нулевым байтом, после последней строки также должен стоять нулевой байт. В рассматриваемых компонентах все строки разделяются символом 'Г. Создавать строки вручную нужно лишь в редких случаях — для ввода значения свойства на этапе проектирования предназначен специальный редактор. Есть также простой способ составить фильтр для графических файлов — для этого предназначена процедура GraphicFilter (ее описание см. в разделе "Графическая подсистема"). В качестве начального фильтра при вызове диалога будет выбрана та пара строк, номер (индекс) которой совпадает со значением свойства: (Pb) property Pilterlndex: Integer; Если свойству не присваивалось значения, то по умолчанию выбирается первая пара. Путь к файлам, которые первоначально будут отображены в диалоге, задается свойством: (Pb) property InitialDir: string; В случае, если в поле ввода имени файла пользователь при ручном наборе не определил его расширение, это за него пытается сделать диалог. Для этого свойству (Pb) property DefaultExt: TFileExt; TFileExt = string[3]; присваивается строка (до трех символов, без точки), которая и будет использоваться в качестве расширения по умолчанию. Например, если пользователь ввел в поле имени файла 'mybitmap', a DefaultExt равно 'bmp', то компонент вернет полное имя 'mybitmap. bmp'. Поле ввода FileName, где отображаются и редактируются имена файлов, может быть простым редактирующим элементом, а может быть и комбинированным списком. В этот список должны попасть имена файлов, которые были прежде прочитаны (записаны). Стиль редактирующего элемента задан свойством (Pb) property FileEditStyle: TFileEditStyle; TFileEditStyle = (fsEdit, fsComboBox); а содержимое списка ранее возвращавшихся имен — свойством: (Pb) property HistoryList: TStrings; В случае действия стиля fsEdit это свойство не играет роли. Если же установлено fsComboBox, в выпадающем списке появляется содержимое HistoryList. Можно создать список для этого свойства во время разработки программы. Но для того, чтобы оно действительно играло роль "предыстории", программист должен пополнять список после успешного окончания диалога, что иллюстрируется следующим фрагментом кода: procedure TFormI-FileOpenClick(Sender: TObject); begin with OpenDialogI do if Execute then begin Memol.Lines.LoadFromFile(FileName) ; HistoryList.Add(FileName); end; end; У двух диалогов имеется большой набор опций. Часть из них является общей, часть — играет роль только для одного из диалогов: (Pb) property Options: TOpenOptions; TOpenOption = (ofReadOnly, ofOverwritePrompt, ofHideReadOnly, ofNoChangeDir, ofShowHelp, ofNoValidate, ofAllowMuItiSelect, ofExtensionDifferent, ofPathMustExist, ofFileMustExist, ofCreatePrompt, ofShareAware, ofNoReadOnlyReturn, ofNoTestFileCreate) ; TOpenOptions = set of TOpenOption; Три опции отвечают за работу с файлами со статусом "только для чтения": ofReadOnly — делает флажок "Read only" помеченным при появлении; ofHideReadOnly — прячет этот флажок в появляющемся диалоге; ofNoReadOnlyRetum — запрещает выбор файлов "только для чтения", извещая о необходимости выбрать другой файл при нажатии ОК. Также три опции ограничивают ввод имен для новых (несуществующих) файлов: ofPathMustExist — указывает на то, что файл может находиться только в одном из существующих каталогов. В случае ввода несуществующего пути к файлу пользователь извещается об ошибке; ofFileMustExist — аналогичньм образом указывает на то, что может быть выбран только один из существующих файлов; ofCreatePrompt — опция устанавливает реакцию на предыдущую ситуацию. Если она установлена, то вместо сообщения об ошибке вьшодится запрос на создание нового файла. Другие опции: ofOverwritePrompt — запрашивает подгверждение, если пользователь выбрал для записи уже существующий файл; ofNoChangeDir — запрещает изменение начального каталога, с которьм диалог будет проинициализирован. Если она установлена, диалог каждый раз появляется с тем каталогом, который был установлен при первом запуске; ofShowHelp — включает в состав диалога кнопку Help; ofNo Validate — выключает проверку введенного имени файла на наличие в нем недопустимых символов; ofAllowMultiSelect —позволяет выбирать несколько файлов одновременно; ofShareAware — отключает проверку на возможность совместного доступа к выбранному файлу. В случае отстутствия этой опции файл нельзя выбрать, если он открыт другим приложением; ofNoTestFileCreate — эта опция применяется только для файлов на тех узлах локальной сети, которым разрешено создание, но не модификация файлов. Если она установлена, диалог не проверяет возможность записи на выбранном устройстве. Наконец, одна опция — ofExtensionDifTereiit — является выходной. Она устанавливается после завершения диалога в том случае, если расширение у введенного имени файла отличается от того, которое определено по умолчанию (в свойстве DefaultExt). Текст, появляющийся в заголовке диалога, определяется свойством: (Pb) property Title: string; Если оно не было задано, то в заголовках диалогов появится "Open" для TOpenDialog и "SaveAs" для TSaveDialog. В случае успешного завершения диалога в свойстве (Ro) property Files: TStrings; содержатся имена выбранных пользователем файлов. Если выбран один файл, его имя можно получить как Files.Strings[0], но есть для этого и отдельное свойство: (Pb) property FileName: TFileName; |