TOpenDialog — Тип Delphi


Справочник по компонентам Delphi. Часть 2
Страница 36. Компоненты TOpenDialog и TSaveDialog

Компоненты TOpenDialog и TSaveDialog

Эти компоненты-диалоги предназначены для выбора имени файла, который будет в дальнейшем использован для чтения или записи. Рассмотрим их сов­местно, т. к. они отличаются только интерпретацией некоторых опций.

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

Формат строки фильтра состоит из двух частей. В первой задается крат­кое описание типа. Во второй части, которая отделяется символом ‘|’ — маска поиска нужных файлов по расширению. В список файлов попадут толь­ко те, которые имеют указанные расширения. Примеры задания фильтра: ‘Delphi projectsl*.dpr’ или ‘All graphics files I *-bmp,*.ico,*.wmf ‘.

Таких пар строк для разных типов в фильтре может быть несколько, при этом форматы представления фильтра в самой системе Windows и в Delphi имеют одно отличие. При вызове стандартных диалогов Windows эти пары строк должны разделяться нулевым байтом, после последней строки также должен стоять нулевой байт. В рассматриваемых компонентах все строки раз­деляются символом ‘Г.

Создавать строки вручную нужно лишь в редких случаях — для ввода значения свойства на этапе проектирования предназначен специальный редактор. Есть также простой способ составить фильтр для графических файлов — для этого предназначена процедура GraphicFilter (ее описание см. в разделе «Графическая подсистема»).

В качестве начального фильтра при вызове диалога будет выбрана та пара строк, номер (индекс) которой совпадает со значением свойства:

Если свойству не присваивалось значения, то по умолчанию выбирается первая пара.

Путь к файлам, которые первоначально будут отображены в диалоге, задается свойством:

(Pb) property InitialDir: string;

В случае, если в поле ввода имени файла пользователь при ручном наборе не определил его расширение, это за него пытается сделать диалог. Для этого свойству

присваивается строка (до трех символов, без точки), которая и будет исполь­зоваться в качестве расширения по умолчанию. Например, если пользователь ввел в поле имени файла ‘mybitmap’, a DefaultExt равно ‘bmp’, то компонент вернет полное имя ‘mybitmap. bmp’.

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

(Pb) property FileEditStyle: TFileEditStyle;

TFileEditStyle = (fsEdit, fsComboBox);

а содержимое списка ранее возвращавшихся имен — свойством:

(Pb) property HistoryList: TStrings;

В случае действия стиля fsEdit это свойство не играет роли. Если же установ­лено fsComboBox, в выпадающем списке появляется содержимое HistoryList.

Можно создать список для этого свойства во время разработки программы. Но для того, чтобы оно действительно играло роль «предыстории», прог­раммист должен пополнять список после успешного окончания диалога, что иллюстрируется следующим фрагментом кода:

У двух диалогов имеется большой набор опций. Часть из них является общей, часть — играет роль только для одного из диалогов:

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).

Текст, появляющийся в заголовке диалога, определяется свойством:

Если оно не было задано, то в заголовках диалогов появится «Open» для TOpenDialog и «SaveAs» для TSaveDialog.

В случае успешного завершения диалога в свойстве

OpenDialog, SaveDialog в Delphi

Компоненты OpenDialog и SaveDialog в Delphi вызывают стандартные диалоги Windows открытия и сохранения файлов.

Открытие соответствующего диалога осуществляется методом Execute. Если в диалоге пользователь нажмет кнопку открыть (Сохранить), диалог закрывается, метод Execute возвращает true и выбранный файл отображается в свойстве компонента FileName. Если же пользователь отказался от диалога (нажал кнопку отмена или ESC), то метод Execute возвращает false.

Значение свойства FileNamмоможно задать перед обращением к диалогу. Тогда оно появится в диалоге как значение по умолчанию в окне Имя файла. Таким образом, например, выполнение команды Сохранить как, по которой в файле с выбранным пользователем именем надо сохранить текст окна редактирования Memo1, может иметь вид:

SaveDialog1.FileName:=Fname;

if SaveDialog1.Execute

Then

Fname:=OpenDialog1.FileName;

Memo1.Lines.SaveToFile(FName);

End;

В этом коде предлагается, что имя файла хранится в строковой переменной FName. Перед вызовом диалога это имя прередается в него как имя файла по умолчанию, а после выбора пользователем файла его выбор запоминается в той же переменной FName и тест сохраняется в этом файле методом SaveToFile.

Типы искомых файлов, появляющиеся в диалоге в выпадающем списке Тип файла задаются свойством Filter. В процессе проектирования это свойство вызывается нажатием кнопки с многоточием около имени этого свойства в Инспекторе объектов. При этом открывается окно редактора:

В примере задан фильтр для документов Word с расширениями .doc и .rtf. После выхода из окна редактирования фильтров заданный вами шаблон появится в свойстве Filter в виде строки.

Свойство InitialDir определяет начальный каталог, который будет открыт в момент начала работы пользователя с диалогом. Свойство DefaultExt определяет значение расширения файла по умолчанию. Если значение этого свойства не задано, пользователь должен указать в диалоге полное имя файла с расширением. Если же задать DefaultExt (например, «txt»), то пользователь может писать в диалоге имя без расширения. В этом случае будет принято заданное расширение.

Илон Маск рекомендует:  Адаптивная модель вpемя выполнения

Свойство Title позволяет вам задать заголовок диалогового окна.

. savedialog delphi где находится в делфи опен диалог вызов OpenPictureDialog команда сохраить файл в делфи savedialog делфи

Opendialog и его свойства

29.04.2015, 20:47

Копирование файла при его выборе в OpenDialog
Доброго времени суток =) подскажите как можно сделать так чтобы при выборе файла, выбранный файл.

OpenDialog: открыть текстовый файл и записать его в StringGrid
Помогите пожалуйста, нужно открыть тхт файл и разместить его в стрингриде у меня не открывает.

Dblookupcombobox и его свойства
Добрый день всем. Скажите, есть ли у Dblookupcombobox свойство itemindex, или аналог? Мне нужно.

QRMemo и его свойства
Доброго времени суток. Вопрос следующего плана. Есть компонент QRMemo ему передается некоторая.

Создать класс, который описывает объект СТУДЕНТ и заполнить его свойства
Ребят, помогите пожалуйста, совсем не разбираюсь, надо создать класс который описывает объект.

Выбор каталога с помощью TOpenDialog — delphi

Мне бы очень хотелось узнать различные способы, которыми я мог бы выбрать каталог с помощью TOpenDialog, будь то загрузка нового компонента или использование того, что предоставляется Delphi, но предпочтительно использование того, что предоставляется Delphi.

До этого я использовал команду SelectDirectory, но я думаю, что было бы трудностью для пользователей моей программы искать указанный каталог.

Я думаю, что SelectDirectory является «слабым», потому что это может быть долгий процесс при поиске нужного вам каталога. Скажем, например, вы хотите перейти к каталогу данных приложения. Как долго или трудно было бы там перемещаться? В конце концов, пользователи могут даже не достичь желаемого каталога.

Мне нужно что-то подобное, когда пользователь может копировать и вставлять каталоги в адресную строку каталога наверху.

Благодарим вас за все ваши ответы.

    9 5
  • 4 окт 2020 2020-10-04 10:03:17
  • ple103

5 ответов

Если вы используете JVCL, вы можете использовать TJvSelectDirectory. При этом вы можете переключаться между старым и новым стилем, устанавливая свойство. Например:

  • 4 окт 2020 2020-10-04 10:03:19
  • yonojoy

Просто нашел код ниже, который, кажется, отлично работает в XP и Vista, Win7. Он предоставляет пользовательский интерфейс для выбора каталога. Он использует TOpenDialog, но отправляет ему несколько сообщений, чтобы очистить внешний вид для целей выбора каталога.

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

Я долго искал что-то подобное, поэтому подумал, что я разместил его здесь, чтобы другие могли извлечь из этого выгоду.

Вот как это выглядит в Win 7:

  • 4 окт 2020 2020-10-04 10:03:18
  • RobertFrank

Просто оставьте второй аргумент пустым, если хотите увидеть все каталоги, включая рабочий стол. Если вы установите второй аргумент для любого допустимого пути, тогда ваш диалог будет иметь этот путь к верхней папке, и вы не сможете перемещаться дальше этого.

SelectDirectory(Your caption,C:,sDir) не позволит вам выбрать что-либо за пределами C: , например D: или E: и т.д.

Поэтому полезно оставить его пустым.

  • 4 окт 2020 2020-10-04 10:03:18
  • Shadab Mozaffar

Вы знаете, что две перегруженные функции, называемые FileCtrl.SelectDirectory , создают совершенно разные диалоги, правильно?

  • 4 окт 2020 2020-10-04 10:03:18
  • Andreas Rejbrand

Вы можете использовать TFileOpenDialog (в Vista +):

Лично я всегда использую TFileOpenDialog в Vista + и возвращусь, используя SelectDirectory (хороший!) на XP, например:

Передача пути к файлу в Delphi из TOpenDialog в виде строки

0 Konrad [2014-06-27 11:23:00]

Я пытаюсь использовать TOpenDialog, чтобы передать путь к выбранному файлу в AdoConection и загрузить содержимое файла Excel в таблицу. В настоящее время я пытаюсь выполнить код ниже, но последняя часть кода не подключается к Excel, возвращая ошибку: [dcc32 Error] sample_map.pas(80): E2010 Несовместимые типы: ‘string’ и ‘TOpenDialog’

string delphi topendialog

2 ответа

openDialog — это экземпляр диалогового окна файла. Это не строка. Вам необходимо прочитать свойство FileName для диалогового объекта файла следующим образом:

Фактически вы уже используете это в одном из своих вызовов ShowMessage .

Убедитесь, что вы прочитали это свойство перед вызовом Free , ошибка в коде в вопросе.

На самом деле вам нужно привыкнуть к использованию try/finally для защиты ресурсов. Каждый раз, когда вы создаете экземпляр класса, вам нужно убедиться, что он будет уничтожен даже перед лицом исключения. В вашем коде вам нужно написать его вот так:

Я также не думаю, что вам нужно использовать WideString здесь. Если вы используете Unicode Delphi, вы можете использовать собственный тип string который является псевдонимом для UnicodeString . Если ваш Delphi является pre-Unicode, тогда вы также можете безопасно использовать string , псевдоним для AnsiString в этом случае. Литералы, которые вы используете, — ASCII. Диалоговое окно файла является openDialog.FileName управления ANSI, поэтому openDialog.FileName также является ANSI. Ничего не получить с помощью WideString .

Наконец, вы смешиваете, все в одной функции, код для выбора имени файла и код для работы с подключением к базе данных. Лучше разделить проблемы. Создайте метод, который просто возвращает имя файла, полученное, разрешив пользователю выбрать диалог. И добавьте метод для работы с соединением базы данных, которому передается имя файла в качестве параметра.

3 Ken White [2014-06-27 15:49:00]

Перед освобождением диалогового окна вам нужно получить OpenDialog.FileName :

Конечно, вы слишком много работаете. Dialogs устройство имеет гораздо более простой способ сделать это, используя PromptForFilename функцию, которая избавляет от необходимости создавать и освободить диалог полностью:

В качестве примечания на стороне, если вы этого не знаете: вы можете выбрать все файлы Excel (оба .xls и .xlsx ) с одним фильтром, если вы введете его как .xls* , как в Excel Files|*.xls* .

И, как говорит Дэвид, лучшим способом было бы отделить код, который получает имя файла и код, который делает соединение в виде отдельных функций. Вызовите первого, чтобы получить имя файла, а затем передайте это имя файла второму, чтобы на самом деле выполнить соединение, если выбрано имя файла.

Выбор каталога с TOpenDialog

Мне бы очень хотелось узнать, как я могу выбрать каталог с помощью TOpenDialog, будь то загрузка нового компонента или использование того, что предоставлено Delphi, но предпочтительно использование того, что предоставлено Delphi.

До этого я использовал команду SelectDirectory, но я думаю, что пользователям моей программы будет трудно найти указанную директорию.

Я думаю, что SelectDirectory является «слабым», потому что он может быть длительным процессом при поиске нужного каталога. Например, вы хотите перейти в каталог Application Data. Как долго или сложно будет там перемещаться? В конце концов, пользователи могут даже не достичь желаемого каталога.

Мне нужно что-то вроде этого, где пользователь может копировать и вставлять каталоги в адресную строку каталога там вверху.

Спасибо за все ваши ответы.

5 ответов

Вы можете использовать TFileOpenDialog (на Vista+):

Лично я всегда использую TFileOpenDialog на Vista + и откат с помощью SelectDirectory (хороший!) на XP, вот так:

Вы знаете, что две перегруженные функции называются FileCtrl.SelectDirectory выдает совершенно разные диалоги, верно?

Только что нашел код ниже, который, кажется, отлично работает в XP и Vista, Win7. Он предоставляет пользовательский интерфейс для выбора каталога. Он использует TOpenDialog, но отправляет ему несколько сообщений, чтобы очистить внешний вид в целях выбора каталога.

Илон Маск рекомендует:  Что такое код socket_last_error

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

Я долго искал что-то подобное, поэтому подумал, что опубликую это здесь, чтобы другие могли извлечь из этого пользу.

Вот как это выглядит в Win 7:

Просто оставьте второй аргумент пустым, если хотите увидеть все каталоги, включая рабочий стол. Если вы установили второй аргумент для любого допустимого пути, то ваш диалог будет иметь этот путь к верхней папке, и вы не сможете перейти дальше.

SelectDirectory(‘Your caption’,’C:\’,sDir) не позволит вам выбрать что-то кроме C:\ , лайк D:\ или же E:\ и т.п.

Selecting a directory with TOpenDialog

I’d really like to know the various ways I could select a directory with the TOpenDialog, whether it be downloading a new component or using what is provided by Delphi, but preferably using what is provided by Delphi.

Prior to this, I have been using the SelectDirectory command but I think it’d be a difficulty for the users of my program to look for the specified directory.

I think the SelectDirectory is ‘weak’ because it can be a long process when searching for the directory you want. Say for example, you want to navigate to the Application Data directory. How long or difficult would it be to navigate there? In the end, users may not even reach their desired directory.

I need something like this where the user can copy and paste directories into the directory address bar at the top there.

TOpenDialog Class

Unit Edit

Hierarchy Edit

(Please provide a description in your own words. It is illegal to use the wording from the Delphi Help.)

Technical Comments Edit

(Known issues / Documentation clarifications / Things to be aware of)

Examples Edit

(Please provide links to articles/source code that show how to use this item.)

See Also Edit

(Please provide links to items specifically related to this item.)

User Comments/Tips Edit

(Please leave your name with your comment.)

Выбор каталога с помощью TOpenDialog

Мне бы очень хотелось узнать различные способы, которыми я мог бы выбрать каталог с помощью TOpenDialog, будь то загрузка нового компонента или использование того, что предоставляется Delphi, но предпочтительно использование того, что предоставляется Delphi ,

До этого я использовал команду SelectDirectory, но я думаю, что было бы трудностью для пользователей моей программы искать указанный каталог.

Я думаю, что SelectDirectory является «слабым», потому что это может быть долгий процесс при поиске нужного вам каталога. Скажем, например, вы хотите перейти к каталогу данных приложения. Как долго или трудно было бы там перемещаться? В конце концов, пользователи могут даже не достичь желаемого каталога.

Мне нужно что-то подобное, когда пользователь может копировать и вставлять каталоги в адресную строку каталога наверху.

Спасибо за все ваши ответы.

Создан 14 сен. 11 2011-09-14 20:38:44 ple103

SelectDirectory использует диалоговое окно выбора исходного каталога системы. Кажется, вы хотите использовать что-то еще, но вы не говорите, что слабого в SelectDirectory, и вы не говорите, какие функции вы ищете в замене. – David Heffernan 14 сен. 11 2011-09-14 20:59:12

@ Давид: Это не так просто. В ‘FileCtrl.SelectDirectory’ есть две перегруженные реализации. Один из них создает диалог с Windows 3.1, в то время как другой создает собственный диалог. – Andreas Rejbrand 14 сен. 11 2011-09-14 21:03:43

@ Аndreas тогда ответ наверняка должен использовать правильную перегрузку. Вы хотите написать ответ? Ха, ты уже сделал !! – David Heffernan 14 сен. 11 2011-09-14 21:06:10

@ Давид: Уже сделано. – Andreas Rejbrand 14 сен. 11 2011-09-14 21:06:50

@peter Я думаю, что ваш лучший вариант — TFileOpenDialog с fdoPickFolders на Vista + и версия SHBrowseForFolder SelectDirectory на XP и ниже. – David Heffernan 14 сен. 11 2011-09-14 21:12:05

Что вам нужно, чтобы реализовать свой собственный поиск папки с помощью формы и некоторого мозга – opc0de 14 сен. 11 2011-09-14 21:17:07

Не реализуйте свой собственный просмотр кода папки. Невозможно для будущего доказательства и очень трудно преуспеть. – David Heffernan 14 сен. 11 2011-09-14 21:20:55

@David Я думаю, что FindFirst и FindNext — это очень надежное будущее. – opc0de 15 сен. 11 2011-09-15 06:35:12

@ opc0de Этот API гарантированно никогда не будет охватывать пространство имен оболочки сейчас или в будущем! – David Heffernan 15 сен. 11 2011-09-15 06:43:39

@David, @ opc0de: Я полностью согласен с Дэвидом. Гораздо лучше использовать диалоги родной ОС. Лично я всегда использую ‘TFileOpenDialog’ на Vista + и возвращаться с помощью (хорошего!)’ SelectDirectory’ на XP. – Andreas Rejbrand 15 сен. 11 2011-09-15 08:23:39

Быстрый и грязный способ, который я видел в различных бесплатных программах для Windows: используйте диалог сохранения и игнорируйте имя файла результата. В функции ‘SelectDirectory’: это просто оболочка для’ SHBrowseForFolder’, однако она не использует все преимущества, предоставляемые современной оболочкой (включая элемент управления редактирования — BIF_EDITBOX ). Я предлагаю использовать эту функцию напрямую или повторно использовать готовую оболочку кого-то. – Premature Optimization 15 сен. 11 2011-09-15 13:46:33

+1 При изучении SHBrowseForFolder удивительно, насколько это гибко. Это проявляется в создании обертки VCL для нее. Я так и не понял, почему TOpenDialog представлял интерес для выбора каталога, так или иначе, учитывая то, что вы можете делать с SHBrowseForFolder – Glenn1234 06 сен. 13 2013-09-06 01:38:00

TOpenDialog — Тип Delphi

Компоненты OpenDialog — диалог «Открыть файл» и SaveDialog — диалог «Сохранить файл как. », пожалуй, используются чаще всего, в большинстве приложений. Примеры открываемых ими диалоговых окон приведены на рис. 8.1 и 8.2.

Рис. 8.1
Диалоговое окно открытия файла
Рис. 8.2
Диалоговое окно сохранения файла

Все свойства этих компонентов одинаковы, только их смысл несколько различен для открытия и закрытия файлов. Основное свойство, в котором возвращается в виде строки выбранный пользователем файл, — FileName. Значение этого свойства можно задать и перед обращением к диалогу. Тогда оно появится в диалоге как значение по умолчанию в окне Имя файла (см. рис. 8.1, 8.2).

Типы искомых файлов, появляющиеся в диалоге в выпадающем списке Тип файла (рис. 8.1, 8.2), задаются свойством Filter. В процессе проектирования это свойство проще всего задать с помощью редактора фильтров, который вызывается нажатием кнопки с многоточием около имени этого свойства в Инспекторе Объектов. При этом открывается окно редактора, вид которого представлен на рис. 8.3. В его левой панели Filter Name вы записываете тот текст, который увидит пользователь в выпадающем списке Тип файла диалога. А в правой панели Filter записываются разделенные точками с запятой шаблоны фильтра. В примере рис. 8.3 задано два фильтра: текстовых файлов с расширениями .txt и .doc и любых файлов с шаблоном *.*.

Рис. 8.3
Окно редактора фильтров

После выхода из окна редактирования фильтров заданные вами шаблоны появятся в свойстве Filter в виде строки вида:

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

Свойство FilterIndex определяет номер фильтра, который будет по умолчанию показан пользователю в момент открытия диалога. Например, значение FilterIndex = 1 задает по умолчанию первый фильтр.

Свойство InitialDir определяет начальный каталог, который будет открыт в момент начала работы пользователя с диалогом. Если значение этого свойства не задано, то открывается текущий каталог или тот, который был открыт при последнем обращении пользователя к соответствующему диалогу в процессе выполнения данного приложения.

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

Свойство Title позволяет вам задать заголовок диалогового окна. Если это свойство не задано, окно открывается с заголовком, определенным в системе (например, «Открытие файла» в окне на рис. 8.1). Но вы можете задать и свой заголовок, подсказывающий пользователю ожидаемые действия. Например, «Укажите имя открываемого файла».

Свойство Options определяет условия выбора файла. Множество опций, которые вы можете установить программно или во время проектирования, включает:

ofAllowMultiSelect Позволяет пользователю выбирать несколько файлов
ofCreatePrompt В случае, если пользователь написал имя несуществующего файла, появляется замечание и запрос, надо ли создать файл с заданным именем
ofEnableIncludeNotify Разрешает посылать в диалог сообщения
ofEnableSizing Разрешает пользователю изменять размер диалогового окна
ofExtensionDifferent Этот флаг, который можно прочитать после выполнения диалога, показывает, что расширение файла, выбранного пользователем, отличается от DefaultExt
ofFileMustExist В случае, если пользователь написал имя несуществующего файла, появляется сообщение об ошибке
ofHideReadOnly Удаляет из диалога индикатор Открыть только для чтения
ofNoChangeDir После щелчка пользователя на кнопке OK восстанавливает текущий каталог, независимо от того, какой каталог был открыт при поиске файла
ofNoDereferenceLinks Запрещает переназначать клавиши быстрого доступа в диалоговом окне
ofNoLongNames Отображаются только не более 8 символов имени и трех символов расширения
ofNoNetworkButton Убирает из диалогового окна кнопку поиска в сети. Действует только если флаг ofOldStyleDialog включен
ofNoReadOnlyReturn Если пользователь выбрал файл только для чтения, то генерируется сообщение об ошибке
ofNoTestFileCreate Запрещает выбор в сети защищенных файлов и не доступных дисков при сохранении файла
ofNoValidate Не позволяет писать в именах файлов неразрешенные символы, но не мешает выбирать файлы с неразрешенными символами
ofOldStyleDialog Создает диалог выбора файла в старом стиле (см. рис. 8.4)
ofOverwritePrompt В случае, если при сохранении файла пользователь написал имя существующего файла, появляется замечание, что файл с таким именем существует, и запрашивается желание пользователя переписать существующий файл
ofPathMustExist Генерирует сообщение об ошибке, если пользователь указал в имени файла несуществующий каталог
ofReadOnly По умолчанию устанавливает индикатор Открыть только для чтения при открытии диалога
ofShareAware Игнорирует ошибки нарушения условий коллективного доступа и разрешает, несмотря на них, производить выбор файла
ofShowHelp Отображает в диалоговом окне кнопку Справка

По умолчанию все перечисленные опции, кроме ofHideReadOnly, выключены. Но, как видно из их описания, многие из них полезно включить перед вызовом диалогов.

Если вы разрешаете с помощью опции ofAllowMultiSelect множественный выбор файлов, то список выбранных файлов можно прочитать в свойстве Files типа TStrings.

В приведенной таблице даны опции, используемые в 32-разрядных версиях Delphi. В Delphi 1 диалоговое окно имеет вид, представленный на рис. 8.4. Аналогичный вид имеет диалог и в 32-разрядных версиях Delphi при включении опции ofOldStyleDialog. В примере рис. 8.4 диалог открыт с заданным значением свойства Title и заданный текст отображается в заголовке окна. Кроме того, в этом примере выключена опция ofHideReadOnly (в Delphi 1 она выключена по умолчанию), что привело к появлению индикатора « Только чтение ».

Рис. 8.4
Диалог в старом стиле при включенной опции ofOldStyleDialog и выключенной опции ofHideReadOnly

В компонентах диалогов открытия и сохранения файлов предусмотрена возможность обработки ряда событий. Такая обработка может потребоваться, если рассмотренных опций, несмотря на их количество, не хватает, чтобы установить все диктуемые конкретным приложением ограничения на выбор файлов. Событие OnCanClose возникает при нормальном закрытии пользователем диалогового окна после выбора файла. При отказе пользователя от диалога — нажатии кнопки Отмена , клавиши Esc и т.д. событие OnCanClose не наступает. В обработке события OnCanClose вы можете произвести дополнительные проверки выбранного пользователем файла и, если по условиям вашей задачи этот выбор недопустим, вы можете известить об этом пользователя и задать значение false передаваемому в обработчик параметру CanClose. Это не позволит пользователю закрыть диалоговое окно.

Можно также написать обработчики событий OnFolderChange — изменение каталога, OnSelectionChange — изменение имени файла, OnTypeChange — изменение типа файла. В этих обработчиках вы можете предусмотреть какие-то сообщения пользователю.

Теперь приведем примеры использования диалогов OpenDialog и SaveDialog. Пусть ваше приложение включает окно редактирования Memo1, в которое по команде меню Открыть вы хотите загружать текстовый файл, а после каких-то изменений, сделанных пользователем, — сохранять по команде Сохранить текст в том же файле, а по команде Сохранить как. — в файле с другим именем.

Введите на форму компоненты — диалоги OpenDialog и SaveDialog. Предположим, что вы оставили их имена по умолчанию — OpenDialog1 и SaveDialog1. Поскольку после чтения файла вам надо запомнить его имя, чтобы знать под каким именем потом его сохранять, вы можете определить для этого имени переменную, назвав ее, например, FName:

Тогда обработка команды Открыть может сводиться к следующему оператору:

Этот оператор вызывает диалог, проверяет, выбрал ли пользователь файл (если выбрал, то функция Execute возвращает true), после чего имя выбранного файла (OpenDialog1.FileName) сохраняется в переменной FName и файл загружается в текст Memo1 методом LoadFromFile.

Обработка команды Сохранить выполняется оператором

В данном случае нет необходимости обращаться к какому-то диалогу, поскольку имя файла известно: оно хранится в переменной FName.

Обработка команды Сохранить как. выполняется операторами:

Первый из этих операторов присваивает свойству FileName компонента SaveDialog1 запомненное имя файла. Это имя по умолчанию будет предложено пользователю при открытии диалога Сохранить как. . Следующий оператор открывает диалог и, если пользователь выбрал в нем файл, запоминает новое имя файла и сохраняет в файле с этим именем текст компонента Memo1.

Мы рассмотрели диалоги открытия и сохранения файлов произвольного типа. Начиная с Delphi 3 в библиотеке имеются специализированные диалоги открытия и закрытия графических файлов: OpenPictureDialog и SavePictureDialog. Диалоговые окна, открываемые этими файлами, приведены на рис. 8.5 и 8.6. От окон, открываемых компонентами OpenDialog и SaveDialog (рис. 8.1, 8.2), они отличаются удобной возможностью просматривать изображения в процессе выбора файла.

Рис. 8.5
Диалоговое окно открытия файла изображения
Рис. 8.6
Диалоговое окно сохранения файла изображения

Свойства компонентов OpenPictureDialog и SavePictureDialog ничем не отличаются от свойств компонентов OpenDialog и SaveDialog. Единственное отличие — заданное значение по умолчанию свойства Filter в OpenPictureDialog и SavePictureDialog. В этих компонентах заданы следующие фильтры:

All (*.jpg; *.jpeg; *.bmp; *.ico; *.emf; *.wmf) *.jpg; *.jpeg; *.bmp; *.ico; *.emf; *.wmf
JPEG Image File (*.jpg) *.jpg
JPEG Image File (*.jpeg) *.jpeg
Bitmaps (*.bmp) *.bmp
Icons (*.ico) *.ico
Enhanced Metafiles (*.emf) *.emf
Metafiles (*.wmf) *.wmf

В этих фильтрах перечислены все типы графических файлов, с которыми может работать диалог. Так что вам остается удалить, если хотите, фильтры тех файлов, с которыми вы не хотите работать, добавить, может быть, фильтр «Все файлы (*.*)» и перевести на русский язык названия типов.

Илон Маск рекомендует:  Что такое код xpath_eval_expression
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL