Главная > Советы, Статьи > И снова о пользе Windows Vista

И снова о пользе Windows Vista

Во время разработки своей новой программы я решил вплотную взглянуть на новый компонент Delphi 2007 — TFileOpenDialog, который инкапсулирует современный диалог открытия файлов в Windows Vista. Те функции, что я в нем увидел, меня приятно удивили.

В первую очередь, я нашел в нем ту функциональность, которая как раз была мне нужна. В приложении необходимо создавать и выбирать файлы в определенной папке и её подпапках. В TOpenDialog нельзя запретить смену каталога. В TFileOpenDialog — можно! Появилось событие OnFolderChanging, где вот таким вот простым кодом мы можем запретить, например, переходить в папки нижнего уровня по сравнению с начальной:

procedure TForm1.FolderChangingEvent(Sender: TObject;
  var CanChange: Boolean);
begin
  CanChange := AnsiStartsText(FileOpenDialog1.DefaultFolder,
                              FileOpenDialog1.FileName);
end;

Это как раз реализует нужную мне функциональность. Это одна из тех «мелочей», которыми наполнена Windows Vista, но которые так приятно облегчают работу и программистов, и пользователей.

Какие же еще возможности приподносит нам TFileOpenDialog? Это события OnFileOkClick, которое позволяет запретить закрывать диалог в случае неудовлетворительного выбора, и OnShareViolation, позволяющее задавать реакцию на выбор файлов, используемых другими приложениями.

Сравним также свойства Options старого и нового диалогов. Визуальное сравнение возможных значений этих свойств дало понять, что большинство параметров имеют аналоги и в старом диалоге (выделены жирным):

TFileDialogOption = (
 fdoOverWritePrompt,
 fdoStrictFileTypes,
 fdoNoChangeDir,
 fdoPickFolders,
 fdoForceFileSystem,
 fdoAllNonStorageItems,
 fdoNoValidate,
 fdoAllowMultiSelect,
 fdoPathMustExist,
 fdoFileMustExist,
 fdoCreatePrompt,
 fdoShareAware,
 fdoNoReadOnlyReturn,
 fdoNoTestFileCreate,
 fdoHideMRUPlaces,
 fdoHidePinnedPlaces,
 fdoNoDereferenceLinks,
 fdoDontAddToRecent,
 fdoForceShowHidden,
 fdoDefaultNoMiniMode,
 fdoForcePreviewPaneOn
);

Остановимся на значениях, не имеющих аналогов. Часть из них настраивает вид самого диалога:

  • fdoForcePreviewPaneOn отображает панель предварительного просмотра;
  • fdoDefaultNoMiniMode запрещает открытие диалога в сжатом виде (только строка ввода имени файла) — только для диалогов сохранения;
  • fdoHidePinnedPlaces убирает стандартные избранные ссылки, собственные мы по прежнему можем задавать (!);
  • fdoHideMRUPlaces описывается как «Hide places of recently opened or saved items», но реально мне не удалось пока понять, о чем идет речь.

Значение fdoPickFolders позволяет использовать диалог открытия файлов как диалог выбора папок, а fdoStrictFileTypes позволяет указать, что нужно сохранять файл только с одним из предопределенных расширений.

А вот свойство fdoNoChangeDir хоть и есть среди возможных значений, но как уверяет справочная система, это значение не используется. Это и не удивительно, ведь есть более гибкое событие OnFolderChanging.

В новом диалоге есть и другие полезные свойства и методы. С помощью коллекции FavoriteLinks можно добавлять собственные избранные ссылки. Свойства FileNameLabel, OKButtonLabel, Title позволяют изменить названия отдельных элементов интерфейса диалога (текст перед полем ввода файла, текст кнопки OK и заголовок диалога). Старый TOpenDialog позволял изменять только собственный заголовок. Коллекция FileTypes более наглядно, чем свойство Filter из TOpenDialog позволяет задавать фильтры для диалога. Особенно удобно, что это индексированный список, таким образом легко можно проверить, какому расширению соответствует тот или иной тип, используя свойство FileTypeIndex.

Советы, Статьи , ,

  1. Николай
    3 Август 2009 в 02:58 | #1

    Не понимаю этих восторгов по поводу TFileOpenDialog: компонент будет работать лишь на Vista; при запуске программ на предыдущих версиях Windows придется использовать TOpenDialog. То есть, банальная операция открытия файла превращается в головную боль – надо проверять версию Windows, вызывать либо TOpenDialog, либо TFileOpenDialog, причем свойства этих двух компонентов не идентичны. В общем, пока все версии Windows ДО Vista не исчезнут с лица Земли, придется использовать TFileOpenDialog совместно с TOpenDialog…

    • 3 Август 2009 в 09:36 | #2

      А что, перейти на Windows Vista – проблема, если она удобнее? Уже и Windows 7 существует.

      В Practical Calculator я сделал класс, который вызывает нужный диалог в зависимости от ОС. Размер модуля – 2,5 КБ. Удобство для него в том, что можно ограничивать выбор пользователя только в папке с пользовательскими определениями, не нужно выдавать ошибку. Мелочь – а приятно.

  1. Пока что нет уведомлений.