div.main {margin-left: 20pt; margin-right: 20pt}
Работа с элементом управления CommonDialog
Мнацаканян А., Азбука Visual Basic
Элемент
управления CommonDialog
позволяет
разработчикам приложений максимально приблизить разработку интерфейса
своей программы к стилю применяемого в Windows.
Так,
как мне часто приходилось сталкиваться с проблемой связанной с применением
и работой элемента управления CommonDialog
и в
последнее время получал ряд писем с вопросами о его применении, то решил
поделиться со всеми тем, что знаю. Применение каждого окна диалога
постараюсь дать отдельными обзорами.
Прежде
чем начать работу выберите в меню Project |
Components
управляющий элемент Microsoft Common Dialog Control 6.0 .
В
панели инструментов у вас появится иконка эл. управления CommonDialog
.
Разместив
на своей форме эл. управления CommonDialog,
Вы
получаете возможность вызова таких окон, как:
1.Окно диалога Open;
2.Окно диалога
Save As;
3.Окно диалога Color;
4.Окно
диалога Font;
5.Окно диалога
Print;
6.Запуск WinHelp32.exe;
Выбор
того или иного типа окна диалога происходит посредством установки свойства
Action в
соответствующее значение или же применением соответствующего метода.
Для
вызова окна диалога Open
неоходимо
свойство CommonDialog1.Action
установить в 1 или же применить метод ShowOpen. Но,
прежде чем перед Вами появится полноценное Windows-кое
окно Open,
необходимо назначить ряд свойств.
1.Установить
начальную директорию, которая будет открываться при вызове CommonDialog1-а.
CommonDialog1.InitDir =
"C:My Documents"
Если
не установливать этого свойства, то по умолчанию будет открываться
директория, которую Вы использовали последний раз.
2.Установить
тип файлов, которые будет отображать диалог Open. Для
этого объявляем строковую переменную strFileType и
присваиваем ей необходимые значения.
Dim strFileType As String
strFileType = "All
Files (*.*)|*.*|"
strFileType =
StrFileType & " Word Documents ( *.doc )|*.doc |"
strFileType =
StrFileType & " Text Files (*.txt)|*.txt|"
Затем
свойству Filter,
CommonDialog,
присваиваем значение переменной strFileType.
CommonDialog1.Filter
= strFileType
Примечание. Не
включайте пробелы до и после разделителей, иначе Вы получите не те файлы,
которые указали.
Устанавливаем
фильтр по умолчанию, выбрав для этого значение Word
Documents.
CommonDialog1.FilterIndex =
2
При
открытии окна диалога Open в
текстовом окне "Files
of
type", у
Вас отобразится надпись Word
Documents (
*.doc
).
3. И
наконец, отображаем окно диалога Open.
CommonDialog1.Action
= 1
или же
CommonDialog1.ShowOpen
Естественно,
раз Вы вызвали окно диалога Open, то
его надо использовать по назначению, т.е. выбрать необходимый файл и
открыть его. Выбор файла производится так, как и в Windows –
e, но
для продолжения работы необходимо передать в программу путь и имя
выбранного Вами файла. Для этой цели существуют два свойства
CommonDialog1 – а
:
CommonDialog1.FileTitle
–
возвращает имя выбранного файла с раширением (например.
"Hello.doc");
CommonDialog1.FileName –
возвращает путь к выбранному файлу (например. "C:My
DocumentsHello.doc");
Зная
эти данные Вы можете производить соответствующие операции над выбранными
файлами.
Теперь
необходимо оградить программу от непредусмотренных действий
пользователя.
Что
может сделать пользователь ?
1.Ввести
несуществующий файл или какие либо символы и нажать на клавишу
Open;
2.Не
выбрав ни одного файла нажать на клавишу Open;
Для
предупреждения подобных действий свойству Flags
присваиваем
необходимую константу.
cdlOFNFileMustExist -
Определяет,
что пользователь может вводить имена только существующих файлов, если флаг
установлен и пользователь вводит недопустимое имя файла, отображается
предупреждение. Этот флаг автоматически устанавливает флаг cdlOFNPathMustExist.
Внимание. На
окне диалога Open
находится флажек для включения опции "Open
as
read
only" .
Рассматривать работу с этим флажком мы не будем, по этому добавим еще одну
константу, которая уберет его с панели окна диалога.
cdlOFNHideReadOnly -
Делает
невидимым переключатель Read
Only.
И
теперь свойство Flags будет
выглядеть следующим образом.
CommonDialog1.Flags
= CdlOFNFileMustExist or CdlOFNHideReadOnly
3.Не
выбрав ни одного файла нажать на клавишу Cancel;
4.Выбрать
файл и нажать на клавишу Cancel;
Что бы
предотвратить появления ошибки, при этих действиях пользователя, дополняем
вышеприведенный код обработчиком ошибки. Необходимо заметить, что ошибку
должно генерировать само окно диалога, для этого, свойство CommonDialog1.CancelError
установите
в True.
Тепрь при нажатии на клавишу Cancel будет
генерироваться ошибка 32755 – Cancel
was
selected
(Выбрана
Отмена).
CommonDialog1.CancelError =
True
Теперь
скомпануем все вышеописанное в упорядоченный код:
Private
Sub
mnuOpen_Click()
'Объявляем
строковую переменную для назначения типов файлов
Dim strFileType As String
'Если
возникнет ошибка, т.е пользователь нажел на клавишу Cancel,
‘отправиться
к обработчику ошибки - ErrorHandler
On
Error GoTo
ErrorHandler
'Обеспечиваем
генерацию ощибки
CommonDialog1.CancelError =
True
'Инициализируем
строковую переменную
strFileType
strFileType = "All
Files (*.*)|*.*|"
strFileType =
StrFileType & " Word Documents ( *.doc )| *.doc |"
strFileType =
StrFileType & " Text Files (*.txt)|*.txt|"
'Присваиваем
ее свойству Filter
CommonDialog1.Filter =
strFileType
'Устанавливаем
необходимый индекс
CommonDialog1.FilterIndex =
2
'Присваиваем
начальную директорию своству InitDir
CommonDialog1.InitDir =
"D:DOCUMENTS"
'Обеспечиваем
защиту от неправильного введенного файла или дериктории, а так же скрываем
флажек Read
Only
CommonDialog1.Flags
= cdlOFNFileMustExist or cdlOFNHideReadOnly
'Вызываем
диалог Open
CommonDialog1.Action
= 1 'Или же CommonDialog1.ShowOpen
'***********
'Здесь
распологается Ваш код.(не забудте, что путь к выбранному файлу Вы
считываете из свойства FileName)
'**********
Exit
Sub
'Обработка
перехватываемой ощибки
ErrorHandler:
If Err.Number = 32755 Then
Exit Sub
End
If
End
Sub
Теперь
диалог Open
полностью готов к работе.
Если
Вы желаете поэксперементировать с окном диалога Open, то
ниже приводятся константы, котрые можно присваивать свойству
Flags.
Константы |
Значения |
Описание |
cdlOFNAllowMultiselect |
&H200& |
Определяет
поле списка имен файлов, позволяет многократный выбор. Пользователь
может выбрать более чем один файл. Имена выбранных файлов
возвращаются свойством FileName
строковой переменной и разграничены пробелами. Примечание. Не
поддерживается длинные имена файлов (всего 8 букв) |
cdlOFNCreatePrompt |
&H2000& |
Определяет,
что диалоговое окно запрашивает пользователя о создании файла,
который в настоящее время не существует. Этот флаг автоматически
устанавливает флаги cdlOFNFileMustExist
и cdlOFNPathMustExist. |
cdlOFNFileMustExist |
&H1000& |
Определяет,
что пользователь может вводить имена только существующих файлов,
если флаг установлен и пользователь вводит недопустимое имя файла,
отображается предупреждение. Этот флаг автоматически устанавливает
флаг cdlOFNPathMustExist. |
cdlOFNPathMustExist |
&H800& |
Определяет,
что пользователь может вводить только допустимый путь, если флаг
установлен и пользователь вводит недопустимый путь отображается
сообщение.
|
cdlOFNExtensionDifferent |
&H400& |
Указывает,
что расширение возвращенного файла (при записи) отлично от
расширения определенного в свойстве DefaultExt.
Флаг не устанавливается, если свойство DefaultExt
равно Null
(пусто), если расширения соответствуют друг другу или если файл не
имеет никакого расширения. Значение флага может быть проверенно
после закрытия диалогового окна. |
cdlOFNHideReadOnly
|
&H4& |
Делает
невидимым переключатель Read
Only. |
cdlOFNNoReadOnlyReturn |
&H8000& |
Определяет,
что возвращаемый файл не будет иметь атрибутов ReadOnly
и не будет защищен от записи. |
cdlOFNReadOnly |
&H1& |
Заставляет
переключатель Read
Only
быть отмеченным при открытии окна диалога.Флаг так же указывает на
состояние переключателя Read
Only,
когда диалоговое окно закрыто. |
cdlOFNNoChangeDir |
&H8& |
Вынуждает
диалоговое окно устанавливать текущий каталог в тот, который был при
предыдущем открытие. |
cdlOFNNoValidate |
&H100& |
Определяет,что
диалоговое окно позволяет недопустимые символы в возвращаемом имени
файла.
|
cdlOFNOverwritePrompt |
&H2& |
Заставляет
диалоговое окно
Save
As
генерировать
блок сообщений, если выбранный файл уже существует, пользователь
должен подтвердить, что бы записать новый файл поверх
старого.
|
cdlOFNShareAware |
&H4000& |
Определяет,
что совместное использование ошибок нарушения будет
игнорироваться. |
cdlOFNHelpButton |
&H10& |
Заставляет
диалоговое окно отображать кнопку
Help.
|
cdlOFNExplorer |
&H8000& |
Опеределяет
вид диалогового окна подобно Explorer
Windows95.(Только
для Windows95) |
cdlOFNNoDereferenceLinks |
&H100000& |
Делает
необратимые иконки (вызов связей). (Только для Windows95) |
cdOFNLongNames |
&H200000& |
Позволяет
пользователю использовать длинные имена файлов. (Только для
Windows95)
|
|