Робота з елементом керування CommonDialog

Елемент управління CommonDialog дозволяє розробникам додатків максимально наблизити розробку та інтерф ейсу своєї програми до стилю застосовуваного у Windows.

Так, як мені часто доводилося стикатися з проблемою пов'язаною із застосуванням та роботою елемента управління CommonDialog і останнім часом отримував низку листів із питаннями про його застосування, то вирішив поділитися з усіма тим, що знаю. Застосування кожного вікна діалогу постараюся надати окремими оглядами.

Перш ніж розпочати роботу, виберіть у меню Project Components керуючий елемент Microsoft Common Dialog Control 6.0. На панелі інструментів у вас з'явиться іконка ел. управління CommonDialog.

Розмістивши у своїй формі ел. управління CommonDialog , Ви отримуєте можливість виклику таких вікон, як:

1.Вікно діалогу Open;

2.Вікно діалогу Save As;

3.Вікно діалогу Color;

4.Вікно діалогу Font;

5.Вікно діалогу Print;

Вибір того чи іншого типу вікна діалогу відбувається за допомогою установки властивості Action у відповідне значення або застосуванням відповідного методу.

Вікно діалогу Open

Для виклику вікна діалогу Open необхідна властивість CommonDialog 1. Action встановити в 1 або застосувати метод ShowOpen. Але, перш ніж перед Вами з'явиться повноцінне Windows вікно Open , необхідно призначити ряд властивостей.

1.Встановити початкову директорію, яка відкриватиметься під час виклику CommonDialog 1-а.

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.

Примітка. Не вмикайте пробіли до та після роздільників, інакше Ви отримаєте не ті файли, які вказали.

Встановлюємо стандартний фільтр, вибравши для цього значення Word Documents .

CommonDialog 1. FilterIndex = 2

При відкритті вікна діалогу Open у текстовому вікні " Files of type " у Вас з'явиться напис Word Documents ( *. doc ) .

3. І нарешті, відображаємо вікно діалогу Open.

CommonDialog 1. ShowOpen

Природно, якщо Ви викликали вікно діалогу Open , його треба використовувати за призначенням, тобто. вибрати необхідний файл та відкрити його. Вибір файлу проводиться так, як і в Windows - e, але для продовження роботи необхідно передати в програму шлях та ім'я вибраного файлу. Для цієї мети існують дві властивості CommonDialog 1 - а :

CommonDialog 1. FileTitle - повертає ім'я вибраного файлу з розширенням (наприклад. "Hello. doc");

CommonDialog 1. FileName - повертає шлях до вибраного файлу (наприклад. "C:\My Documents\Hello.doc");

Знаючи ці дані, Ви можете здійснювати відповідні операції над вибраними файлами.

Тепер необхідно захистити програму від непередбачених дій користувача.

Що може зробити користувач?

1.Ввести неіснуючий файл або якісь символи і натиснути на клавішу Open;

2.Не вибравши жодного файлу натиснути на клавішу Open;

Для запобігання подібним діям властивості Flagsпривласнюємо необхідну константу.

cdlOFNFileMustExist - Визначає, що користувач може вводити імена лише існуючих файлів, якщо прапорець встановлений і користувач вводить неприпустиме ім'я файлу, відображається попередження. Цей прапор автоматично встановлює прапор cdlOFNPathMustExist.

Увага . На вікні Open знаходиться прапорець для включення опції "Open as read only". Розглядати роботу з цим прапорцем ми не будемо, тому додамо ще одну константу, яка прибере його з панелі вікна діалогу.

cdlOFNHideReadOnly - Робить невидимим перемикач Read Only.

І тепер властивість Flags буде виглядати так.

CommonDialog1.Flags = CdlOFNFileMustExist або CdlOFNHideReadOnly

3.Не вибравши жодного файлу натиснути на клавішу Cancel;

4.Вибрати файл та натиснути на клавішу Cancel;

Щоб запобігти появі помилки, при цих діях користувача, доповнюємо вищенаведений код обробником помилки. Необхідно зауважити, що помилку має генерувати саме вікно діалогу, для цього властивість CommonDialog 1. CancelError встановіть в True . Тепер при натисканні на клавішу Cancel буде генеруватися помилка 32755 - Cancel was selected (Вибрано Скасувати).

CommonDialog 1. CancelError = True

Тепер скомпануємо все вищеописане в упорядкований код:

Private Sub mnuOpen_Click()

'Оголошуємо строкову змінну для призначення типів файлів

Dim strFileType As String

'Якщо виникне помилка, користувач натиснув на клавішу Cancel ,

'відправитися до обробника помилки - ErrorHandler

On Error GoTo ErrorHandler

'Забезпечуємо генерацію помилки

CommonDialog 1. CancelError = True

'Ініціалізуємо строкову змінну strFileType

strFileType = "All Files (*.*)*.*"

strFileType = StrFileType & "Word Documents (*.doc) *.doc"

strFileType = StrFileType & " Text Files (*.txt)*.txt"

'Привласнюємо її властивості Filter

CommonDialog 1. Filter = strFileType

'Встановлюємо необхідний індекс

CommonDialog 1. FilterIndex = 2

'Присвоюємо початкову директорію своєму InitDir

'Забезпечуємо захист від неправильного введеного файлу або дерикторії, а також приховуємо прапорець Read Only

CommonDialog1.Flags = cdlOFNFileMustExist або cdlOFNH >

'Викликаємо діалог Open

CommonDialog1.Action = 1 'Або CommonDialog1.ShowOpen

'Тут розташовується Ваш код.(не забудьте, що шлях до вибраного файлу Ви зчитуєте з властивості FileName )

'Обробка перехоплюваної помилки

If Err.Number = 32755 Then

Тепер діалог Open повністю готовий до роботи.

Якщо Ви хочете поексперементувати з вікном діалогу Open, то нижче наводяться константи, які можна надавати властивості Flags.

Визначає поле списку імен файлів, дає змогу багаторазовий вибір. Користувач може вибрати більш ніж один файл. Імена вибраних файлів повертаються властивістю FileName рядковою змінною та розмежовані пробілами. Примітка. Не підтримуються довгі імена файлів (всього 8 букв)

Визначає, що діалогове вікно запитує користувача про створення файлу, який зараз не існує. Цей прапор автоматично встановлює прапори cdlOFNFileMustExist та cdlOFNPathMustExist .

Визначає, що користувач може вводити імена лише існуючих файлів, якщо прапорець встановлений і користувач вводить неприпустиме ім'я файлу, відображається попередження. Цей прапор автоматично встановлює прапорcdlOFNPathMustExist .

Визначає, що користувач може вводити лише допустимий шлях, якщо прапорець встановлений і користувач вводить неприпустимий шлях, відображається повідомлення.

Вказує, що розширення повернутого файлу (при записі) на відміну розширення визначеного у властивості DefaultExt . Прапор не встановлюється, якщо властивість DefaultExt дорівнює Null (порожньо), якщо розширення відповідають один одному або якщо файл не має розширення. Значення прапора можна перевірити після закриття діалогового вікна.

Робить невидимим перемикач Read Only.

Визначає, що файл, що повертається, не матиме атрибутів ReadOnly і не буде захищений від запису.

Примушує перемикач Read Only бути відміченим при відкритті вікна діалогу. Прапор також вказує на стан перемикача Read Only, коли діалогове вікно закрито.

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

Визначає, що діалогове вікно дозволяє неприпустимі символи у імені файлу, що повертається.

Примушує діалогове вікно Save As генерувати блок повідомлень, якщо вибраний файл вже існує, користувач повинен підтвердити, щоб записати новий файл поверх старого.

Визначає, що спільне використання помилок порушення ігноруватиметься.

Примушує діалогове вікно відображати кнопку Help.

Виділяє вигляд діалогового вікна подібно до Explorer Windows 95. (Тільки для Windows 95)

Робить незворотні іконки (виклик зв'язків). (Тільки для Windows 95)

Дозволяє використати довгі імена файлів. (Тільки для Windows 95)