- Стандартные диалоговые объекты
- Диалоговое окно для ввода текста
- Функция MsgBox в системе Visual Basic
- Вывод сообщений в системах BCB и Delphi
- Универсальные и специализированные диалоги
- Выбор файла в режиме диалога
- Выбор файла для сохранения данных
- Диалог по поводу выбора шрифта
- Диалог по выбору цвета
- Диалоги по установкам и настройкам принтера
- Диалоговые окна для поиска и замены текста
- Выбор графических файлов
Выбор файла в режиме диалога
Опубликовано admin в Сб, 02/20/2010 - 00:30
Несмотря на то, что за диалоговым окном по выбору файла закреплено название OpenDialog, оно предназначено только для того, чтобы облегчить пользователю выбор нужного файла. А открывать его в том смысле, как это принято делать в программах, должны операторы соответствующего алгоритмического языка — OPEN, _rtl_open, fopen, assign и т.п.
Приложения 6_09, 6_10 (VB).
В системе Visual Basic окно OpenDialog появляется в результате вызова метода ShowOpen для объекта CommonDialog. Окно это, по сути дела, объединяет три несколько устаревших системных списка — DriveListBox, DirListBox и FileListBox. По умолчанию на экране возникает системный каталог (рис. 6.9), с которым интересы приложения могут и не совпадать. Поэтому в программе перед вызовом метода ShowOpen можно изменить свойство InitDir, задав в нем нужное оглавление:
CommonDialog1.InitDir = "E:\BXV_BOOK2\"
Тогда в диалоговом окне появится заказанный каталог, что может ускорить процесс путешествия по дискам и папкам (рис. 6.10).

Рис. 6.9. Стандартное окно OpenDialog

Рис. 6.10. Выбор начального каталога в окне OpenDialog
Чтобы не загромождать окно списком всех файлов, перед обращением к методу ShowOpen целесообразно установить набор нужных шаблонов в свойстве Filter:
CommonDialog1.Filter = "Текстовые файлы (*.txt)|*.txt|"&_
"Модули VB (*.bas)|*.bas"
Такая установка может быть выполнена и на стадии проектирования в окне Properties. Если вы задаете несколько шаблонов для фильтрации имен, то среди них можно выделить одно, которое появится первым в окне Тип файлов:
CommonDialog1.FilterIndex = 2
В данном примере в момент появления диалогового окна будут отображены модули VB с расширением bas (цепочка шаблонов нумеруется от 1). Дополнительным условием отбора может послужить свойство Flags, в котором можно задать такие атрибуты файлов как ReadOnly, Archive и т.п.:
CommonDialog1.Flags = CdlOFNHideReadOnly
На самом деле, свойство Flags имеет более широкое назначение. Со всеми его возможностями и наборами соответствующих констант вы можете познакомиться, заглянув в файле помощи в раздел Flags Property (Open, Save As Dialogs).
Заголовок «Открытие файла» можно заменить более содержательной фразой, задав ее в свойстве DialogTitle:
CommonDialog1.Title = "Задайте цифровую базу"
После нажатия клавиши <Открыть> и удаления диалогового окна имя файла, выделенного пользователем, можно извлечь из свойства CommonDialog1.Filename:
OPEN CommonDialog1.Filename FOR INPUT As #1
Окно диалога позволяет пользователю отказаться от предложенного выбора — например, он может нажать на клавишу <Отмена>. В этом случае в программе должна быть предусмотрена соответствующая ветка:
CommonDialog1.CancelError = True
On Error GoTo qq
qq:
‘Какие-то действия в случае ошибки
Exit Sub
End Sub
Если такая возможность в программе не предусмотрена, то отказ пользователя от выбора файла (нажатие клавиши <Esc> или кнопки <Отмена>) приведет к возникновению аварийной ситуации с выдачей сообщения «Path/File access error» и прекращению работы приложения.
На рис. 6.11 приводится программа заполнения списка ListBox1 строками из файла, выбранного пользователем и результат ее работы — в окне OpenDialog выбран текст модуля приложения.

Рис. 6.11. Формирование списка List1 по содержимому файла
Приложение 6_11 (BCB).
В системах BCB и Delphi выбор файла осуществляется с помощью объекта OpenDialog, расположенного в палитре компонентов на закладке Dialogs. Во время работы приложения диалоговое окно по выбору файла появляется в результате вызова метода Execute:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
if(OpenDialog1->Execute())
Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
}
Приложение 6_12 (Delphi).
Аналогичный фрагмент в системе Delphi выглядел бы следующим образом:
procedure TForm1.FormCreate(Sender: TObject);
begin
if OpenDialog1.Execute then
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;
Для загрузки содержимого выбранного файла в объект, обслуживаемый методом LoadFromFile, открывать файл не нужно. Но если мы собираемся обмениваться данными с файлом с помощью обычных операторов чтения (_rtl_read или read, _rtl_write или write), то выбранный файл должен открываться стандартным образом. Ряд из упоминавшихся выше свойств окна OpenDialog повторяются и здесь, разве что с небольшим изменением обозначений — FileName, Filter, FilterIndex, Title, InitialDir. Никаких проблем в связи с отказом от выбора файла в BCB и Delphi не возникает. Роль параметра Flags здесь выполняют два десятка подсвойств, скрывающихся за составным свойством Options.
