Как использовать справку в программах DelphiИсточник: gunsmokerru
Как использовать справку в программах Delphi
2. Практика: указываем файл справки. 3. Поддержка справки в Delphi программах. 4. Практика: простой вызов статической справки. 5. Практика: динамический вызов контекстно-зависимой справки. 6. Обзор распространённых форматов файлов справок. 7. Поддержка форматов справки в Delphi. 8.Заключение Как Delphi программы работают с файлами справкиПрежде чем ваша Delphi программа сможет показывать справку - вы должны сказать вашему приложению (т.е. программе), что она (справка) у вас вообще есть. Делается это установкой свойства
HelpFile у объекта Application или формы.В каждом VCL приложении Delphi есть глобальный объект Когда этому свойству присвоено значение, вы можете использовать методы и свойства объекта Application и ваших форм (окон), чтобы работать с вашей справкой. Значением свойства является имя файла справки вашей программы. Формат справки может быть любым из поддерживаемых вашим приложением (об этом чуть позже). Сейчас только отметим, что разные форматы файлов справок имеют разные возможности (и внешний вид!). Отличается также и поддержка этих форматов в самой Delphi. Поэтому, будет ли работать та или иная возможность, обсуждаемая ниже - будет зависеть от того, какой формат файла справки вы выберите. Но, опять-таки, об этом позже. Итак, помимо объекта Иными словами, Практика: указываем файл справкиВы можете установить свойство
HelpFile программно (кодом) или указать в свойствах проекта.Программно:
В этом примере файл справки должен называться
HelpFile.hlp и лежать в подпапке Help вашей программы. Разумеется, вы должны заменить эту строчку своими данными.Через GUI:
Здесь есть целых три проблемы:
Что даёт вам 100% гарантию работы, но... не проще ли просто использовать программную установку пути изначально, не трогая GUI? Что касается индивидуальных файлов справок для форм - то к ним применимы те же слова: вы можете выставлять свойства программно:
или через инспектор объектов:
И снова: проблемы с относительными/полными путями ведут к тому, что первый способ с программной установкой выглядит намного привлекательнее.
Поддержка справки в Delphi программахКак только Delphi приложение узнает, что у него есть файл справки, оно даст вам семь стандартных способов показать справку:
Нажатие Кнопка с вопросиком в заголовке окна Эта кнопка активирует контекстно-зависимый режим справки на форме - так называемая функция "What's this?" ("Что это такое?"). Когда пользователь нажимает на эту кнопку, форма временно отключается, а курсор меняет форму на стрелочку с вопросиком: Нажатие на любом элементе управления в этом режиме заставит приложение выполнить поиск темы в файле справки, ассоциированной с этим компонентом. Если тема найдена, то она будет показана во всплывающем окошке. Обычно этот способ не используется в современных программах. Исторически он появился в 16 разрядных Windows, когда ещё не было всплывающих подсказок. Сегодня же вместо этого функционала намного проще использовать обычное свойство Кнопка "Справка" с
Это простой способ вызвать справку, не создавая ни строчки кода. Нажатие на кнопку откроет тему с номером контекста или ключевым словом, заданными в свойствах либо самой кнопки, либо (обычно) формы.
Функции 1, 2 и 3 работают автоматически. Вам не нужно ничего делать, кроме как привязать темы справки к компонентам (через номера контекстов или по ключевым словам).
Практика: простой вызов справкиРазберём самые простые методы работы со справкой - показ фиксированных окон и тем без учёта контекста, используя последние четыре метода из списка в предыдущем пункте.
Каждое серьёзное Windows приложение имеет пункт меню "Справка" вроде такого:
Или хотя бы такого:
Когда вы нажимаете на подобные пункты меню - появляется окно, называемое (в терминах Microsoft) "Finder". Оно выглядит как-то так:
Или так (в этом случае окно Finder включает в себя и окно с темой):
Или так:
Как открыть справкуИтак, как вам открыть окно Finder? На самом деле, это очень просто: поместите этот код в обработчик нажатия пункта меню:
Этот код покажет окно Finder на той вкладке, которая была открыта в последний раз.
Как открыть оглавление справкиОглавление (Table Of Contents) - это первая вкладка окна Finder. Это так же просто, как открыть окно Finder, но команда будет выглядеть так:
Примечание: в некоторых версиях Delphi константа
HELP_TAB не определена. В этом случае добавьте в подходящее место программы это определение:
Как открыть тему по-умолчаниюТема по-умолчанию - это тема, которая была указана как тема по умолчанию в настройках файла справки. Если таковой не указано, то темой по умолчанию считается первая тема в оглавлении. Команда для открытия темы по умолчанию выглядит так:
Историческая справка
Что происходит, когда вы открываете старый файл справки из 16 битных Windows? Открывается окно, показывающее тему. Эта тема называется темой по умолчанию (default topic). 32 битный файл справки формата WinHelp состоит из двух файлов (16 битный - из одного): .HLP, который содержит темы и оглавление - .CNT. Если вы удалите .CNT файл и откроете .HLP файл, то увидите тему по умолчанию.
В прошлом веке, когда Windows 3.x ещё была передовыми технологиями, тема по умолчанию была единственным способом показать какой-то обзор (содержание). Эта тема обычно была первой темой в файле справки и содержала ссылки на другие темы. Вот почему Microsoft называла её "CONTENTS" (Оглавление). Если эта тема явно не задана, то темой по умолчанию считается первая тема в файле справки.
Вот почему команда
Как открыть индекс справкиВкладка индекс (Index) показывает алфавитный список ключевых слов (keyword). Ключевые слова должны быть заданы в свойствах тем. Если ключевые слова вообще не определены - эта вкладка не показывается.
Следующий пример показывает, как можно открыть справку на вкладке индекса:
Как открыть поиск по справкеВкладка поиска (Find) показывает диалог полнотекстового поиска по справке. Если в файле справки отключены возможности полнотекстового поиска, то эта вкладка вообще не показывается.
Следующий пример открывает окно справки с активным окном поиска:
Как открыть тему по имениДля показа темы по имени вы можете использовать метод
Application.HelpJump , который принимает один строковый параметр - ID (имя) темы. Например:
Этот метод возвращает
True , если тема существует и была найдена, и False - в противном случае. Однако, в последнем случае также автоматически показывается сообщение пользователю о том, что тема не существует. Если в вашей Delphi команды
HelpJump нет, то вот её код:
А для показа темы по контекстному номеру вы можете использовать метод
Application.HelpContext , который принимает один числовой параметр - номер контекста. Например:
Аналогично, этот метод возвращает
True , если тема существует и была найдена, и False - в противном случае. Если в вашей Delphi команды
HelpContext нет, то вот её код:
Эта команда покажет тему в отдельном окне. Если вы хотите использовать всплывающее окно - используйте другую команду:
Как открыть тему по ключевому словуИнтересовались ли вы когда-нибудь, как работает справка среды Delphi? Когда вы выделяете свойство компонента в инспекторе объектов или устанавливаете на него курсор в коде и нажимаете
F1 , то вы получаете описание этого свойства.Это работает при помощи ключевых слов. Когда вы нажимаете Для показа темы по ключевому слову используется метод
HelpContext нет, то вот её код:
Нет ничего проще:
Практика: вызов справки с контекстомКонтекстная справка (context sensitive help или contextual help) даёт мгновенную поддержку пользователям, не заставляя их покидать контекст, в котором они работают. Она показывает информацию о конкретном объекте, с которым работает пользователь. Обычно она отвечает на вопросы вроде "Что это такое?", "Зачем это использовать?" и "Что и как с этим делать?". Она очень полезна именно тем, что пользователь не отключается от процесса работы. Основные способы для контекстной справки включают в себя:
Когда я говорю про контекстную справку в этом посте, я в имею в виду первые два пункта. Вторые два пункта в этой статье не рассматриваются. Второй пункт реализуется либо ручным вызовом справки одним из методов, которые мы рассмотрели выше, либо назначением кнопки вида (
Kind ) bkHelp (обработчик при этом реализовывать не требуется).Итого, сейчас нам осталось поговорить про первый пункт.
Как включается контекстная справкаКонтекстная справка обычно вызывается одним из трёх основных способов:
Нажатие Как реализуется контекстная справкаПоказ темы в контекстно-зависимой справке требует идентификации темы по числовому номеру, называемому номером контекста (context number). В более поздних версиях Delphi также возможен показ контекстой справки по ключевым словам. По умолчанию в файле справки не задаются ни номера контекстов, ни ключевые слова. Вы должны либо вводить их вручную, либо (только для номеров контектов) вы можете включить в опциях автоматическую нумерацию (в некоторых продвинутых редакторах файлов справок, типа Help & Manual).
Возможно, вы уже заметили эти свойства в инспекторе объектов - это свойство
Свойство HelpType определяет, какое свойство нужно использовать для вызова контекстной справки. Обычно используются номера контекстов, а не ключевые слова - этот вариант является вариантом по умолчанию для свойства HelpType .Для работы контекстной справки или эти номера (не важно - созданные вами или проставленные автоматически) или ключевые слова должны быть присвоены темам и установлены в свойства компонентов на форме. Номера должны быть уникальны как в файле справки, так и в Delphi проекте. Вы можете присвоить один и тот же номер двум и более компонентам - но это будет означать, что эти компоненты привязаны к одной и той же теме. В отличие от номеров контекста, ключевые слова не обязаны быть уникальными. Если с одним ключевым словом связано более одной темы, то вам будет показано окно, из которого вы сможете выбрать нужную тему. Когда пользователь вызывает контекстную справку (любым из способов, описанных в предыдущем пункте - либо через Вам не нужно проставлять номера контекстов или ключевые слова абсолютно всем компонентам на форме - ведь свойства Итак, суммируя: чтобы в вашей программе работала контекстная справка, вам нужно: Вы должны указать приложению, что у вас есть файл справки. Это общее действие для любого типа справки в Delphi приложении. Вы должны придумать и присвоить номера контекстов (либо ключевые слова, либо и то и другое) темам в вашем файле справки. Необязательно делать это для всех тем. Если ключевые слова желательно проставлять вообще (для работы индекса), то номера контекстов можно указывать только у тех тем, которые должны быть доступны через контекстную справку. Вы можете включить автоматическую нумерацию, если ваша программа для создания файлов справок это позволяет. Вы должны присвоить контекстные номера (либо ключевые слова) форме и компонентам на ней в вашем Delphi приложении, чтобы ассоциировать элементы управления в приложении с темами справки. Как минимум, вы должны указать эти номера (ключевые слова) для форм. Готово. После этого в вашей программе будет работать контекстная справка. Вы можете открыть вашу программу и, к примеру, нажать
F1 - автоматически откроется тема в справке, которую вы задали в свойствах текущего элемента управления.Обзор распространённых форматов файлов справокНа сегодняшний день существуют такие форматы справок (из самых распространённых):
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 партнёрами. Понятно, что он не предназначен для общего использования. Microsoft Help aka HTML Help 2.0 (.HXS) - формат справки, используемый Visual Studio 2002/2003/2005/2008 и последними версиями Delphi. Разработан в 2001. Поддерживает Unicode. Сжатый файл .HxS получается из набора тем, написанных в HTML (похоже на .CHM). В отличие от всех прочих форматов, этот формат справки НЕ предназначен для программ общего назначения. Дело в том, что просмотрщик справки этого формата не входит в комплект ни одной ОС Windows на сегодняшний день. Поддержка справки этого формата устанавливается только вместе с Visual Studio или Delphi - это Document Explorer (dexplore.exe). Плюс ко всему вы не можете таскать вместе со своей программой установщик для этой справки (согласно лицензии). Microsoft Help System aka HTML Help 3.0 (.MSHC) - формат справки, используемый Visual Studio 2010. Разработан в 2009. Поддерживает Unicode. Аналогично формату HTML Help 2.0/HXS - НЕ предназначен для программ общего назначения (по крайней мере пока), хотя ограничений на просмотрщик уже нет (справку можно просматривать в любом браузере). Файл .MSHC является обычным переименованным .ZIP файлом. Компилятор не требуется - файлы содержимого, содержащие ссылки друг на друга, просто укладываются в архив. Сильные стороны формата: открытость, быстрота, простота и прозрачная интеграция с online-справкой. Этот формат справки имеет потенциал заменить собой .CHM и стать новой стандартной системой справки в будущем. HTML (.HTML) - представляет собой просто набор обычных HTM/HTML файлов. Понятно, что такой формат достаточно ограничен и обычно не имеет никаких преимуществ перед .CHM - окромя полной поддержки Unicode. Portable Document Format (.PDF) - формат, созданный Adobe Systems в 1993. Обычно этот формат используется для печати справки (ещё точнее - руководства) на бумаге, а не как файл справки в программе. Web/Online - вообще не файловая справка. Представляет собой открытие web-сайта со страничкой справки на нём. Официально рекомендации Microsoft на октябрь 2010-го выглядят так:
Итак, если подытожить - для Delphi программ у вас есть выбор из трёх вариантов:
Из них .CHM и Web/Online являются основными, а .HLP используется только в особых случаях.
Поддержка форматов справки в Delphi.HLPПоддержка этого формата есть во всех версиях Delphi. В Delphi 7 и ниже вам ничего специально делать не надо. В Delphi 2005 и выше вам нужно подключить модуль
WinHelpViewer в любую секцию uses .
.CHMШтатная поддержка этого формата есть в Delphi 2005 и выше. Для этого вам нужно только указать в любом
uses модуль HTMLHelpViewer (как обычно: чем раньше - тем лучше).Примечание: не подключайте одновременно Для Delphi 7 и ниже вы можете использовать моё решение. Использовать его не менее просто - просто распакуйте архив в папку вашего проекта и добавьте модуль Это решение также может быть использовано в Delphi 2005 и выше, если вас не устраивает стандартное решение (модуль См. табличку ниже для сравнения возможностей форматов и их реализации.
Web/OnlineПоскольку стандарта на эти системы справок не существует, то в Delphi нет никакой стандартной поддержки справки этого формата. Вам придётся делать её самостоятельно. Проще всего это сделать, назначив обработчик события
Application.OnHelp . В обработчике вам нужно организовать реакцию на команды, которые реально использует ваше приложение, например:
Обычно ключевыми командами являются
HELP_KEY (а также её обёртка через HELP_COMMAND ), HELP_CONTEXT /HELP_CONTEXTPOPUP , HELP_COMMAND с командой 'JI' , а также какая-то команда "открытия справки вообще" (например, HELP_FINDER ).Событие Только не забудьте установить свойство
Сравнение возможностей форматовКак я говорил выше, поддерживается ли та или иная команда - зависит от выбранного формата и версии Delphi. Я просуммирую основные возможности, которые мы рассматривали, на примере Delphi 7 и Delphi XE. Для наглядности, я добавил колонку с web-справкой, где + и - стоят по примеру чуть выше. Вы должны понимать что это только пример и ваша конкретная реализация может иметь как больше возможностей, так и меньше.
Я думаю, что табличка достаточно понятна, за исключением колонки D7/DXE - это я так обозначил стороннее (не штатное) решение с подключением модуля
+ означает поддержку возможности, - означает отсутствие поддержки, +/- означает, что сама команда работает, но её результат ничем не отличается от обычного открытия справки, а цифра - частичную поддержку (баг) со ссылкой на обходной путь (код ниже). Исправление/обходной путь для 1:
Исправление/обходной путь для 2: Вместо:
Нужно использовать один из следующих вариантов:
ЗаключениеНадеюсь, что эта статья поможет вам с интеграцией справки в ваши программы.
В этом руководстве были рассмотрены стандартные возможности использования справочных систем в Delphi, универсальные для любых установленных систем. Однако возможности конкретного формата справки этим не исчерпываются. К примеру, вы можете позиционировать окна справки (ну, например, так, чтобы окно справки всегда было сбоку вашего главного окна), вы можете получать обратную связь от окна справки (к примеру, нажатие на ссылку или кнопку в окне справки приводит к действию в вашей программе) и делать множество других вещей, недоступных через общий механизм в Delphi. Все эти расширенные возможности реализуются обращением к справочной системе напрямую, минуя обёртку Delphi. См. ссылки ниже для дополнительной информации. К примеру, для формата .CHM вас будет интересовать SDK и руководство по продвинутому использованию .CHM.
Если у вас всё ещё есть вопрос, а как же создавать сами файлы справки, то я вам рекомендую воспользоваться программой Help & Manual - это лучшее решение для создания справки в форматах HLP, CHM, HXS, PDF, HTML, RTF и E-book. Вы можете создавать файлы справки в HLP и CHM и вручную, используя только бесплатные компиляторы (Microsoft Help Workshop и HTML Help Workshop соответственно). |