Як використовувати довідку в програмах Delphi - Програмні продукти
Як використовувати довідку в програмах Delphi
-
1. Як програми Delphi працюють з файлами довідки. 2. Практика: вказуємо файл довідки. 3. Підтримка довідки в Delphi програмах. 4. Практика: простий виклик статичної довідки. 5. Практика: динамічний виклик контекстно-залежної довідки. 6. Огляд найпоширеніших форматів файлів довідок. 7. Підтримка форматів довідки в Delphi. 8.
Як Delphi програми працюють із файлами довідки
У кожному VCL додатку Delphi є глобальний об'єкт Application ("Додаток") типу TApplication. Цей об'єкт має властивості та методи, що впливають на все додаток цілком. І для активації довідки він має властивість Application.HelpFile .
Коли цій властивості надано значення, ви можете використовувати методи та властивості об'єкта Application і ваших форм (вікон), щоб працювати з вашою довідкою. Властивістю є ім'я файлу довідки вашої програми. Формат довідки може бути будь-яким із підтримуваних вашим додатком (про це трохи пізніше). Наразі тільки зазначимо, що різні формати файлів довідок мають різні можливості (і зовнішній вигляд!). Відрізняється також і підтримка цих форматів у Delphi. Тому, чи працюватиме та чи інша можливість, що обговорюватиметься нижче, залежатиме від того, який формат файлу довідки ви оберете. Але, знов-таки, про це пізніше.
Отже, крім об'єкта Application, властивість HelpFile є і об'єктів класу TForm. Коли програма надходить команда по роботі з довідковою системою (наприклад, користувач натиснув F1 ), Delphi додаток буде використовувати файл довідки, вказаний у Application.HelpFile для виконання цієї команди. Але якщо при цьому активна форма, яка має її властивістьHelpFile , то для виконання команди буде використовувати властивість форми, а не програми.
Іншими словами, Form.HelpFile просто змінює Application.HelpFile у контексті однієї конкретної форми. Якщо у вашій програмі є лише один файл довідки, то ви не повинні встановлювати властивості HelpFile у форм, а встановити властивість HelpFile у об'єкта Application.
Практика: вказуємо файл довідки
Програмно: Project / View Source
Через GUI:Project / Options / Application :
- Натискання на кнопку "Browse" покаже вам лише *.hlp файли. Щоб вибрати файл іншого формату, вам потрібно вибрати у фільтрі діалогу відкриття опцію All Files (*.*).
- Вибір файлу довідки кнопкою "Browse" занесе в поле повний шлях до файлу виду"C:\Users\Олександр\Documents\RADStudio\Projects\DemoProject\Help\HelpFile .hlp" - це не дуже вдала ідея, адже на машині, куди ваша програма буде встановлена потім, цей файл лежатиме в зовсім іншому місці. Найкраща ідея - обрізати шлях до відносного:". \ Help \ HelpFile.hlp ".
- Проблема з попереднім пунктом полягає в тому, що відносний шлях вважається щодо поточного каталогу . Який зазвичай дорівнює папці вашої програми, але далеко не завжди. Найкращим рішенням буде виправити цей момент так:
Що дає вам 100% гарантію роботи, але. чи не простіше просто використовувати програмне встановлення шляху спочатку, не чіпаючи GUI?
Підтримка довідки в програмах Delphi
Натискання F1Ця функція реалізує контекстну довідку. Коли користувач натискає F1, програма шукає у файлі довідці тему (topic) з номером контексту (context number) або ключовим словом (keyword), заданими у властивостях компонента, що має фокус. Якщо знайденоодна або кілька тем - відкривається файл довідки, показуючи ці теми в окремому вікні.
Кнопка з питанням у заголовку вікна
Ця кнопка активує контекстно-залежний режим довідки на формі – так звана функція "What's this?" ("Що це таке?"). Коли користувач натискає на цю кнопку, форма тимчасово відключається, а курсор змінює форму на стрілочку із запитанням:
Натискання будь-якого елемента керування в цьому режимі змусить програму виконати пошук теми у файлі довідки, асоційованої з цим компонентом. Якщо тема знайдена, то вона буде показана у вікні, що спливає.
Зазвичай цей спосіб не використовується у сучасних програмах. Історично він з'явився в 16 розрядних Windows, коли ще не було підказок. Сьогодні ж замість цього функціоналу набагато простіше використовувати звичайну властивість Hint.
Кнопка "Довідка" з Kind = bkHelp
Це простий спосіб викликати довідку, не створюючи жодного рядка коду. Натискання на кнопку відкриє тему з номером контексту або ключовим словом, заданими у властивостях самої кнопки, або (зазвичай) форми.
Application.HelpCommandЦе гнучкий метод, який дозволяє вам виконати будь-яку команду з вашим файлом довідки. Докладніше ця команда розглянута нижче.
Application.HelpJumpЦе допоміжна функція, яка є обгорткою до Application.HelpCommand з командою "jump". Вона дозволяє вам відобразити тему довідки з її ID (імені).
Application.HelpContextЦе допоміжна функція, яка є обгорткою до Application.HelpCommand . Вона дозволяє показати тему за так званим номером контексту (context number).
Application.HelpKeywordЦе допоміжнафункція, яка є обгорткою Application.HelpCommand . Вона дозволяє показати тему за ключовим словом (keyword).
Практика: простий виклик довідки
Кожна серйозна програма Windows має пункт меню "Довідка" на кшталт такого:
Як відкрити довідку
Отже, як відкрити вікно Finder? Насправді це дуже просто: помістіть цей код в обробник натискання пункту меню:
Як відкрити зміст довідки
Як відкрити тему за замовчуванням
Як відкрити індекс довідки
Наступний приклад показує, як можна відкрити довідку на вкладці індексу:
Як відкрити пошук по довідці
Наступний приклад відкриває вікно довідки з активним вікном пошуку:
Як відкрити тему на ім'я
Ця команда покаже тему в окремому вікні. Якщо ви хочете використовувати спливаюче вікно - використовуйте іншу команду:
Як відкрити тему за ключовим словом
Це працює за допомогою ключових слів. Коли ви натискаєте F1 , у довідці шукаються теми з ключовим словом, вказаним під курсором або в інспекторі об'єктів. Для цього файл довідки повинен містити список ключових слів, пов'язаних з темами. Ви задаєте це під час створення файлу довідки (вказуючи ключові слова у властивостях теми).
Для показу теми ключового слова використовується метод Application.HelpKeyword , який приймає один рядковий параметр - ключове слово. Наприклад:
Практика: виклик довідки із контекстом
- Контекстні теми у файлі довідки
- Кнопки виклику довідки (наприклад, кнопка Help поруч із OK та Cancel у діалогах)
- Підказки, що випливають (показуються при наведенні миші на об'єкт)
- Повідомлення у рядку статусу (StatusBar)
Отже, зараз нам залишилося поговорити про першийпункт.
Як включається контекстна довідка
Натискання F1, коли фокус введення знаходиться на якомусь елементі керування. Це основний спосіб показу контекстної довідки. Коли користувач застрягне, він натискає F1, а програма показує тему довідки, залежно від того, де він знаходиться. Цей спосіб підтримується Delphi і вам не потрібно писати для нього код.Функція "What's this?". Це або кнопка із запитанням у заголовку вікна, або аналогічна кнопка із запитанням на панелі інструментів (Toolbar-е), або пункт меню Довідка / Що це таке? . Як я вже казав, це старий режим роботи із довідкою. Я не буду його особливо розглядати, тому що в сучасних програмах набагато простіше і зручніше використовувати підказки.Кнопка з Kind = bkHelpабо аналогічний спосіб. Цей спосіб не можна повністю віднести до контекстної довідки - адже коли ви натискаєте кнопку, то фокус йде з поточного елемента управління. Тим не менш, я перераховую цей спосіб як ще один варіант автоматичного виклику довідки без написання коду.
Як реалізується контекстна довідка
Можливо, ви вже помітили ці властивості в інспекторі об'єктів - це властивість HelpContext та властивість HelpKeyword :
Для роботи контекстної довідки або ці номери (не важливо - створені вами або проставлені автоматично) або ключові слова повинні бути присвоєні темам і встановлені як компоненти на формі. Номери мають бути унікальними як у файлі довідки, так і в Delphi проекті. Ви можете присвоїти один і той же номер двом і більше компонентам - але це означатиме, що ці компоненти прив'язані до однієї і тієї ж теми. На відміну від номерів контексту, ключові слова повинні бути унікальними. Якщо з одним ключовим словом пов'язано більше ніж однутеми, то вам буде показано вікно, з якого ви зможете вибрати потрібну тему.
Коли користувач викликає контекстну довідку (будь-яким із способів, описаних у попередньому пункті - або через F1, або через функцію "What's this?", або кнопкою "Довідка") - то показується тема довідки, контекстний номер якої вказаний у властивості HelpContext. Або ж, якщо HelpType встановлено в htKeyword , то показується тема(и) з ключовим словом із властивості HelpKeyword . Для роботи контекстної довідки вам не потрібно робити нічого, крім як проставити номери контекстів темам та компонентам. Усю роботу Delphi зробить автоматично.
Вам не потрібно проставляти номери контекстів або ключові слова всім компонентам на формі - адже властивості HelpContext і HelpKeyword успадковується. Тобто. якщо раптом у компонента потрібна властивість не задано (рівно нулю або порожньому рядку відповідно), то використовується властивість HelpContext/HelpKeyword його батька (в сенсі Parent). Якщо ж це властивість не задано і в батька - то перевіряється властивість батька. І так далі, аж до форми. Якщо ж властивість не задано й у форми, контекстна довідка взагалі не викликається. Якщо ви використовуєте кнопку виклику довідки з Kind = bkHelp , то ви повинні присвоїти номер контексту або ключове слово або їй або формі.
Отже, підсумовуючи: щоб у вашій програмі працювала контекстна довідка вам потрібно:
Ви повинні вказатидодатку, що у вас є файл довідки. Це загальна дія для будь-якого типу довідки в програмі Delphi.
Ви повинні придумати іприсвоїти номери контекстів(або ключові слова, або й те й інше)тем у файлі довідки. Необов'язково робити це всім тем. Якщо ключові слова бажано проставляти взагалі (для роботиіндексу), то номери контекстів можна вказувати лише у тих тем, які мають бути доступні через контекстну довідку. Ви можете увімкнути автоматичну нумерацію, якщо це програма для створення файлів довідок це дозволяє.
Ви повинніприсвоїти контекстні номери(або ключові слова)формі та компонентам на нійу вашому Delphi додатку, щоб асоціювати елементи управління у додатку з темами довідки. Щонайменше, ви повинні вказати ці номери (ключові слова) для форм.
Огляд найпоширеніших форматів файлів довідок
16 біт Windows Help aka WinHelp 1.0 (.HLP) - пропрієтарний формат файлів довідки, розроблений компанією Microsoft для організації довідкової системи. Вихідна інформація готується у форматах RTF (текст) та BMP (зображення), а потім за допомогою компілятора генерується бінарний файл з розширенням HLP. Підтримки Unicode немає. Може бути декомпільований у вихідні файли. Розроблений в 1990 році і підтримується в Win16, Win32, WinNT до XP включно. Застарілий у 2006. Обмежено доступний у Windows Vista та Windows 7 (і вище) – підтримка для нього має бути встановлена додатково. Сьогодні в здоровому глузді не використовується ніким.
32 біт Windows Help aka WinHelp 2.0-4.0 (.HLP + .CNT) - покращений варіант формату .HLP, що з'явився в Windows 95. Підтримується в Win32/WinNT до Windows XP включно. Підтримки Unicode немає. Застарілий у 2006. Обмежено доступний у Windows Vista та Windows 7 (і вище) – підтримка для нього має бути встановлена додатково. Сьогодні в основному використовується старими програмами або тими, кому потрібні спеціальні функції формату WinHelp.
Compiled HTML Help aka HTML Help 1.0-1.4 (.CHM) - основний та найпопулярніший формат файлів довідок, випущений у 1997і підтримуваний починаючи з Windows 98 у всіх Windows, включаючи Windows Vista і Windows 7. Є скомпільованим файлом, отриманим із звичайних HTML-файлів зі спеціальною розміткою. Тому формат став популярним для створення e-books. Може бути декомпільований у вихідні файли. Однак у цей формат вже не вносяться зміни та нові можливості, а лише усуваються знайдені вразливості. Microsoft планує замінити його на якийсь інший формат у майбутньому. Підтримка Unicode обмежена.
Assistance Platform 1.0 (.H1S) - досить специфічний формат довідки, оскільки використовується тільки для розширення вбудованої довідки ОС OEM партнерами. Зрозуміло, що вона не призначена для загального використання.
HTML (.HTML) - це просто набір звичайних HTM/HTML файлів. Зрозуміло, що такий формат досить обмежений і зазвичай не має жодних переваг перед .CHM, крім повної підтримки Unicode.
Portable Document Format (.PDF) - формат, створений Adobe Systems в 1993. Зазвичай цей формат використовується для друку довідки (іще точніше - посібника) на папері, а не як файл довідки у програмі.
Web/Online – взагалі не файлова довідка. Являє собою відкриття веб-сайту зі сторінкою довідки на ньому.