Ноу Інти, лекція, створення довідкової системи

Контекстні довідки, що з'являються у спливаючих вікнах

Інструментарій HHW дозволяє створювати і включати в довідкове керівництво спеціальну секцію TEXT POPUPS, призначену для забезпечення роботи з контекстними довідками до елементів інтерфейсу і поява цих довідок у спливаючих вікнах. Створенню секції TEXT POPUPS, яка необхідна при роботі з такими контекстними довідками, має передувати створення двох текстових файлів. Один з них вже може існувати, якщо створювалася секція MAP, - це заголовки, що задає відображення між символьними і числовими ідентифікаторами. Другий текстовий файл містить опис контекстних повідомлень, які будуть з'являтися у спливаючих вікнах. Трохи пізніше я розповім про синтаксис, якому повинен задовольняти цей файл. Після того, як ці два файли будуть створені, можна переходити до створення секції TEXT POPUPS, для чого достатньо натиснути однойменну вкладку.

Ноу Інти, лекція, створення довідкової системи


Мал. 9.21. Створення секції TEXT POPUPS

Дві командні кнопки "Header" і "Text File" дозволяють включити в секцію два файли - заголовки і файл з контекстними повідомленнями, що і повинно забезпечити скомпілювати chm-файлу можливість видавати при запитах контекстні довідки до елементів інтерфейсу. Існує невелика, але прикра різниця в тому, як підключається заголовки в секціях MAP, ALIAS і TEXT POPUPS. У двох перших випадках формується пропозиція #include <имя файла>. В останньому випадку вставляється безпосередньо ім'я файлу, що не дозволяє обійти виникає проблему "невидимості" заголовки.

Створення текстового файлу з контекстними довідками

Контекстні довідки, що з'являються у спливаючих вікнах, як правило, представляють собою тексти невеликого розміру. Тому на відміну від звичайних розділів довідкового керівництва, кожен з яких міститься в окремому файлі, все такі контекстні довідки можуть бути зібрані в одному файлі. Іноді краще замість одного великого файлу мати кілька файлів, наприклад, окремі файли для елементів кожної форми. Такий збірний файл з контекстними довідками в HHW створюється в текстовому, а не в HTML форматі. Структура такого файлу досить проста і задовольняє наступному синтаксису:

Файл, як бачите, являє послідовність озаглавлених розділів. Тема розділу починається спеціальним ключовим словом і містить символьний ідентифікатор розділу. Ось його синтаксис:

Текст контекстної довідки являє собою звичайний текст без картинок і інших прикрас, можливих для текстів в форматі HTML, які використовуються в розділах довідкового керівництва. Ось два початкових розділу з файлу, створеного для чергового прикладу:

Ноу Інти, лекція, створення довідкової системи


Мал. 9.22. Результат компіляції hhp-проекту гри "Вовк, Коза і Капуста"

З іншого боку варто відзначити, що при тестуванні проекту обидві команди HtmlHelp API функції працюють успішно, що вже само по собі забезпечує можливість організувати отримання контекстних довідок, використовуючи виклики функції HtmlHelp.

На цьому я завершую опис двох важливих питань, що виникають при створенні chm-файлів. В кінцевому підсумку, ми навчилися пов'язувати символьні і числові ідентифікатори з розділами довідкового керівництва. Я детально описав, як можна побудувати збірний текстовий файл, який містить контекстні довідки, і як додати секцію POPUPS в довідкове керівництво, але, на жаль, мої зусилля по вирішенню проблем, що виникають на цьому етапі, не увінчалися успіхом.

Контекстні довідки до елементів інтерфейсу. експеримент

Виконана вся необхідна роботу, як на стороні програмного проекту "Вовк, Коза і Капуста", так і на стороні створення довідкового керівництва для цієї гри. Я створив і зареєстрував chm-файл, який містить, як розділи звичайного довідкового керівництва, так і контекстні довідки до елементів інтерфейсу форми, що представляє ігрове поле. На основі chm-файлу був створений і Aw-файл, що дозволяє Роккі відповідати на питання. Залишилося провести експерименти і подивитися, що з усього цього працює. Перш за все, я спробував отримати контекстні довідки до тих написів на формі, для яких визначені числові ідентифікатори і створені відповідні розділи в довідковому керівництві:

Ноу Інти, лекція, створення довідкової системи


Мал. 9.23. Спроба отримання контекстної довідки до елементу інтерфейсу

Як бачите, видається повідомлення про відсутність контекстної довідки для цього елемента інтерфейсу. Хоча справжня причина полягає не у відсутності розділу, а в тому, що не задано потрібне відображення числового ідентифікатора на символьний ідентифікатор і пов'язаний з ним розділ, де міститься контекстна довідка. Що ж все-таки працює в даній ситуації? Якщо спеціалізований курсор зі знаком питання не підводити до елементів інтерфейсу, для яких заданий HelpContextID. а клацнути де-небудь в довільному місці форми, то відкриється довідкове керівництво і можна буде отримати довідку звичайним способом. Зауважте, що для цього не знадобилося створювати ніяких додаткових командних кнопок або команд меню. Це не зовсім те, що хотілося б, але викликати довідкове керівництво в формі досить просто, що, в кінцевому рахунку, дозволяє отримати довідки до всіх елементів інтерфейсу.

Для отримання контекстних довідок в формах може використовуватися і клавіша F1. У нашому прикладі вона працює також як і спеціальний курсор зі знаком питання, дозволяючи відкрити довідкове керівництво, але відкривається розділ завжди задається самою формою - її HelpContextID і не залежить від того, який елемент інтерфейсу був активним. Зауважте, натискання клавіші F1 призводить до відкриття довідкового керівництва і в тому випадку, якщо властивість форми WhatThisButton вимкнено.

Довідки може видавати і Помічник.

Ноу Інти, лекція, створення довідкової системи


Мал. 9.24. Роккі відповідає на питання про основні героях гри

Як бачите, Роккі показав усі теми в яких описані запитувані візуальні об'єкти. Це ще один спосіб вирішення поставленого завдання. Спосіб впоратися із завданням завжди існує. Сподіваюся, правда, що в наступній версії HHW не потрібно буде шукати обхідні шляхи і буде доступний прямий спосіб вирішення даного завдання.

Схожі статті