Книга представляет собой стандартный файл подсказок Windows. Он может быть просмотрен без применения специальной программы оболочки, потенциально не может быть заражен вирусом, что дает ему определенные преимущества при распространении книги.
| Вид материала | Книга |
- Название книги, 1658.14kb.
- И. А. Юдинцев Юдинцев, И. А. Волк и солнце. 2011. 189 с. Верите ли вы в то, что документальная, 222.67kb.
- -, 309.11kb.
- Книга может быть полезна всем, кто заинтересован познакомиться с процессами правотворчества, 2398.4kb.
- Малый алхимический свод, 613kb.
- Быть численность магистров и бакалавров в российских вузах, может быть решен только, 192.8kb.
- Альберт Великий – Малый алхимический свод, 782.44kb.
- Альберт Великий малый алхимический свод, 1989.43kb.
- Альберт Великий малый алхимический свод, 646.33kb.
- Альберт Великий малый алхимический свод, 2096.18kb.
Раздел [MAP]
В этом разделе содержится информация для использования этого HLP файла в качестве файла контекстной помощи в программе, написанной на С под Windows (например, BC4.5), Delphi 32 и т.п. Это апробировано мной в программах на Delphi 32 и показало отличные результаты. Информация представлена в виде строк соответствия вида
контекстное_имя_заголовка_пункта его_номер
Пример tema_1 1
main_help_item 3
Возможна вторая форма записи (привычная для программистов в C++) :
#define контекстное_имя_заголовка_пункта его_номер
Если таких строк очень много, то можно не загромождать HPJ файл и вместо списка строк в разделе [MAP] указать :
#include "имя_файла" - указать на текстовый файл, в котором и записать эти строки соответствия. Но как показал опыт, удобнее всего первая форма записи (она короче и практичнее) и размещение этих данных в HPJ файле.
Подробно и контекстных именах - в разделе о создании заголовка и примере 1.
Раздел [BITMAPS]
В этом разделе содержится перечень BMP файлов, фигурирующих в макросах вставки картинки в текст bmc, bml, и bmr. Более подробно о этом см. в разделе о создании в тексте кнопок и иконок. Поиск файлов картинок производится в текущем каталоге и каталогах, объявленных в переменной BMROOT раздела [OPTIONS]. В последних версиях HLP компиляторов (например Microsoft Help WorkShop) этот раздел потерял смысл и отсутствует - компилятор сам ищет картинки.
Раздел [WINDOWS]
Раздел со списком параметров первичного и вторичных окон системы просмотра.
Этот раздел содержит набор строк вида:
имя_окна = "заголовок", (x, y, ширина, длинна), масштабирование, (clientRGB), (nonscrollRGB), (fTop)
где
имя_окна - имя окна в системе, латынь без пробелов, main - имя главного окна
заголовок - строка, выводимая в заголовке окна. Заголовок главного окна может задаваться в разделе [OPTIONS]
x, y - координаты верхнего левого угла окна. Есть особенность - система полагает, что весь экран имеет размер 1024 на 1024 точек, если это не так, то производится пересчет; при этом соответственно 1,1 - верхний левый угол любого экрана; 1024,1024 - нижний правый; 512,512 - центр. Это удобно, т.к. местоположение окна не зависит от текущей разрешающей способности видеосистемы.
ширина, длинна - размеры окна
масштабирование - параметр масштабирования окна, может принимать значения: 0 - при создании окна использовать значения переменных x , y, ширина, длинна; 1 - максимизировать размер и игнорировать значения x , y, ширина, длинна.
(clientRGB) - три цифры через запятую, указывают значения RGB, определяющие цвет фона в окне. Узнать значения RGB для любого цвета можно при помощи редактора Paint. Для этого необходимо вызвать этот редактор, войти в меню Параметры/Изменить палитру, в появившемся окне нажать кнопку «Определить цвет >>», установить требуемый цвет и после этого считать данные RGB с соответствующих переменных окна.
(nonscrollRGB) - три цифры через запятую, указывают значения RGB, определяющие цвет фона «не перематываемого» текста, в частности для панели управления.
(fTop) - параметр размещения окна: если=1, то поверх всех окон, кроме уже существующих с подобным атрибутом; если=0, то окно имеет рядовой приоритет и может оказаться под другими окнами.
Важное примечание !! Любой из параметров можно опустить, оставив при этом просто запятые, тогда берутся параметры по умолчанию. Например, нет необходимости задавать цвета и заголовок окна, координаты угла и размер :
main =, (, , , ), 0, (, , ), (, ,)
Раздел [ALIAS]
Это раздел с «псевдонимами» контекстных строк. В нем задается список соответствия имен контекстных строк и их псевдонимов вида :
контекстное_имя = псевдоним
Псевдоним эквивалентен контекстному имени и может использоваться вместо него в макросах и секции [MAP]. Реальное применение для небольших книг ему придумать сложно, в больших вместо контекстных имен удобно в тексте использовать сокращения (например t023 - тема 23), а затем в этом разделе присвоить им длинные смысловые псевдонимы ( t023 main_book_glossary), и в тексте книги могут фигурировать как переходы к t023, так и к main_book_glossary, они будут абсолютно равноценны. Кроме того, имеется возможность изменять контекстные строки без переделки RTF файлов и использовать один псевдоним для разных контекстных строк.
Это решает важнейшую проблему с объединением тем: было например 3 темы, каждая со своим контекстных имен, на каждое из которых идут ссылки в макросах переходов по всему тексту. Эти три раздела объединяются в один и он имеет свое контекстное имя. Тогда все ссылки на предыдущие контекстные имена будут потеряны и придется переделывать весь текст (изыскивать в нем контекстные имена объединенных разделов и заменять его на новое для суммарного). Гораздо проще назначить один псевдоним, совпадающий с именем новой темы для имен 3х старых.
Раздел [BAGGAGE]
В этом разделе содержится перечень файлов, которые должны быть внедрены в HLP файл (фирменное руководство рекомендует затем самим создать DLL для того, чтобы их оттуда доставать). Всего таких файлов - <1000.
Раздел [BUILDTAGS]
В этом разделе содержится перечень используемых в переменной Build раздела Options идентификаторов компиляции.
Пример написания HPJ файла
; Пример №1 по написанию HPJ файла
; (С) Зайцев О.В.,1996+
[OPTIONS]
CONTENTS = tema_0
TITLE = Electronic Book
COMPRESS = HIGH
ERRORLOG = errors.inf
[CONFIG]
BrowseButtons()
CreateButton(«О &книге», «About()»)
[FILES]
text1.rtf
text2.rtf
[MAP]
tema_0 001
tema_1 002
[BITMAPS]
ris001.bmp
ris002.bmp
ris003.bmp
[ALIAS]
t003=t002
t004=t002
t005=t002
lbl1=picture_label
Макросы управления, вносимые в текст
Для создания HLP файла в исходный текст книги вставляют символы управления и макросы.
Создание темы и ее основные компоненты, правила создания
Разделом является участок текста, заключенный между двумя точками разрыва страницы. Первый раздел ограничен сверху началом файла и ограничивать его сверху точкой разрыва страницы нельзя. Эти точки вносятся в текст командой меню вставка/разрыв. В появившемся окне в разделе «Начать» необходимо выбрать пункт «Новую страницу» и нажать «ОК», после чего в текст будет вставлен разрыв страницы. Эту и прочие операции удобно вести в режиме Вид/Обычный, т.к. в этом режиме Word показывает разрывы страниц.
Необходимым атрибутом темы является ее заголовок, который одновременно с информацией для пользователя (какой раздел он смотрит) несет информацию для системы. Эта информация записывается в сносках к заголовку. Символ сноски несет информацию о тем, какие данные содержатся в сноске.
Каждая сноска несет информацию для системы. Приведем таблицу сносок и их назначение (все литеры, обозначающие сноску - латинские) :
| Символ сноски | Значение |
| # | Контекстное имя раздела. Может содержать только латинские символы и цифры (а так же символы - и _), регистр значения не играет. Применяется для контекстного перехода к этому разделу. Должно быть уникальным для каждого раздела . |
| $ | Заголовок темы. Может содержать любые символы и используется системой (например, системой запоминаются заголовки последних 40 тем, к которым были переходы и есть возможность перехода к необходимой теме по ее заголовку). Желательно снабдить заголовками все темы. |
| * | Информация для компилятора - идентификатор раздела. Может повторяться неограниченное число раз. Теоретически предназначен для работы с большими файлами - позволяет в результирующий HLP файл включить темы с определенными идентификаторами и наоборот (см. Переменную Build раздела Options) |
| K | Список слов и фраз для тематического поиска |
| + | Номер темы для перемотки кнопками >> и << . |
| ! | Макрос, выполняемый при вхождении в этот раздел |
Следует заметить, что каждая из сносок может многократно повторяться или отсутствовать. Сноска # является почти обязательной, но в некоторых случаях ее роль может играть сноска +, остальные сноски применяются по необходимости. Повторение одной и той же сноски позволяет, например, привязать к заголовку несколько макросов, а не один.
Пример :
#$~K Демонстрация текстовых возможностей - цвета, шрифты ...
------------ текст раздела ------ текст раздела ---------
В окне «сноски» - содержание сносок
# dd1
$ Демонстрация текстовых возможностей - цвета, шрифты ...
~ 002
K Демонстрация текстовых возможностей - цвета, шрифты ...
В заключении следует отметить, что в одной теме может быть несколько заголовков. В данном случае они выступают в роли информационных точек и позволят, например, осуществлять переходы не к теме, а к конкретной точке внутри темы (например, к формуле).
Горячий участок текста для контекстного перехода
Горячие участки текста предназначены для выполнения операций контекстного перехода. Переход совершается на любую тему книги, снабженную контекстным именем (см. сноску «#» заголовка темы) или на любую точку текста, которому присвоено контекстное имя. В предлагаемом алгоритме особое внимание следует обратить на подчеркивание, атрибуты текста - это несет информацию для компилятора.
Для создания горячего участка необходимо :
- Выделить будущий горячий участок текста блоком и в меню Формат/Шрифт (можно вызвать, нажав над блоком правую кнопку мыши и в появившемся меню нажать пункт Шрифт) установить двойное подчеркивание
- Встык к подчеркнутому тексту (без пробелов !!) дописать контекстное имя раздела, не содержащее пробелов, знаков препинания и русских букв
- Выделить его контекстное имя блоком и в меню настройки шрифта указать, что оно является скрытым текстом и подчеркнуто двумя чертами
Если все проделано верно, то Вы увидите :
Мультимедиаdd10
Создание всплывающих меню и комментариев
Всплывающий комментарий - небольшая тема (обычно 1 - 15 строк), показываемая системой в отдельном окне при нажатии на горячий участок текста. Комментарий может содержать горячие участки текста и макросы. Алгоритм создания :
- Создать тему (см. выше), в которой содержится тот текст, который необходимо вывести в всплывающем окне. У темы обычно отсутствует явно выделенный заголовок, вместо него используется первая строка текста. Сноска заголовка обычно единственная - «#».
- Выделить будущий горячий участок текста блоком и в меню Формат/Шрифт (можно вызвать, нажав над блоком правую кнопку мыши и в появившемся меню нажать меню Шрифт) установить одинарное подчеркивание
- Встык к подчеркнутому тексту (без пробелов !!) дописать контекстное имя раздела, который должен быть показан в всплывшем окне
- Выделить его контекстное имя блоком и в меню настройки шрифта указать, что оно является скрытым текстом и подчеркнуто одной чертой
Если все проделано верно, то Вы увидите :
Секвенсор MIDIhint3
К моменту вызова пользователем всплывающего окна можно привязать определенные действия - добавить сноску «!» к заголовку темы для всплывающего окна.
Создание горячих участков текста, выполняющих макрокоманду
Эти горячие участки текста применяются для выполнения любой из макрокоманд, список и краткое описание которых приведен далее. Алгоритм:
- Выделить будущий горячий участок текста блоком и в меню Формат/Шрифт (можно вызвать, нажав над блоком правую кнопку мыши и в появившемся меню нажать меню Шрифт) установить двойное подчеркивание
- Встык к подчеркнутому тексту (без пробелов !!) дописать символ «!» и текст макрокоманды. При написании текста макрокоманды особое внимание обратить на знаки препинания, особенно кавычки. Дело в том, что в составе любого шрифта имеется несколько вариантов начертания кавычек, система же распознает только один : ` ' (символы с кодами 64 и 7 соответственно в Times New Roman Cyr)
- Выделить символ «!» и текст макрокоманды блоком и в меню настройки шрифта указать, что оно является скрытым текстом , подчеркнуто двумя чертами и начертание шрифта - курсив. Относительно курсива нигде в описаниях системы ничего не приведено (но в фирменных примерах это именно так), при написании макроса обычным текстом он так же отлично компилируется. Возможно, это своего рода «правило хорошего тона». Практическое применение такого выделения курсивом - при распечатке исходного текста книги легко отличить скрытый текст макросов от обычного.
Если все проделано верно, то Вы увидите :
Воспроизвести файл 3D-Studio (FLI файл)!ExecProgram(`fliplay.exe demo.fli', 0)
Вывод определенной темы в вторичном окне
Любая тема может быть выведена во вторичном окне (создание темы и позиция в нем - как для первичного окна, более того, одна и та же тема может выводится как в первичном окне, так и во вторичных). Для вывода темы во вторичном окне применяется команда, созданная по алгоритму:
- Выделить будущий горячий участок текста блоком и в меню Формат/Шрифт установить двойное подчеркивание
- Встык к подчеркнутому тексту (без пробелов !!) дописать контекстное имя раздела, не содержащее пробелов, знаков препинания и русских букв
- Встык к контекстному имени раздела дописать символ «>» (знак математического «больше»), встык к нему записать имя окна, в которое должна выводиться тема.
- Выделить его контекстное имя, значок > и имя окна блоком и в меню настройки шрифта указать, что оно является скрытым текстом и подчеркнуто двумя чертами
Следует заметить, что значок «>» - признак направления и расшифровывается как «вывести в». Имя вторичного окна должно быть задано вместе с его параметрами в секции [Windows] HPJ файла.
Если все проделано верно, то Вы увидите :
Мультимедиаtema10>win2
Создание в тексте «кнопок», «иконок».
Наряду с использованием в качестве «горячих участков» для вызова макросов, переходов и т.п. участков текста имеется возможность создавать «кнопки» и «иконки» - рисунки в тексте, нажатие мышкой на которые приводит к определенным действиям. Здесь имеется полная аналогия между текстом и картинкой - она вносится в необходимое место текста средствами вставки рисунков Word или через буфер обмена, так же как текст выделяется блоком и подчеркивается необходимым образом (см. подробно в алгоритмах создания контекстных переходов, вставке макросов ... - вместо «горячий участок текста» будет фигурировать «рисунок»). Проведем пример :
!FileOpen()Кроме того, в некоторых случаях необходимо вставлять массу одинаковых картинок , или их внедрение в текст в стадии создания исходного текста по какой-либо причине нежелательно (например, i386 с 2 Мб ОЗУ - работа с текстом сильно замедлится) - тогда удобно применять макрос внедрения картинки. Этот макрос записывается следующим образом :
{bm* имя_файла_картинки_с_расширением}
{bm*wd имя_файла_картинки_с_расширением}
имя_файла_картинки_с_расширением - имя файла, в котором следует искать картинку. Имя этого файла обязательно заносится в список картинок, задействованных в проекте (секция [BITMAPS] HPJ файла) и при необходимости указывается список путей, по которым эту картинку следует искать (переменная BMROOT секции [OPTIONS] HPJ файла) Если картинка используется в тексте несколько раз и вставка ведется командой bm* , то в HLP файле она физически наличествует лишь в одном экземпляре, что уменьшает его размер. При вставке командой bm*wd каждому такому макросу вставки картинки соответствует физически расположенная в этом месте файла картинка, что ускоряет работу системы при размещении файла на CDROM диске. Размер картинки не должен превышать 64 Кб.
* - метод вставки, на месте * должно стоять :
c - выводить картинку по центру окна
l - выводить от левого края
r - выводить от правого края
Примеры : {bmc demo.bmp}
{bmlwd demo.bmp}
Макрокоманда вставки картинки полностью эквивалентна картинке, поэтому создание «кнопки» аналогично рассмотренному выше. Пример :
{bml demo.bmp}!FileOpen()
Обрамление текста - допустимо применять все основные элементы обрамления текста - рамки, линии разделители и т.п. . Кроме того, если в процессе работы с готовым HLP файлов меняется размер окна или конфигурация текста , то эти линии автоматически перестраиваются и подгоняются под новое расположение текста.
Сегментированные рисунки
Сегментированные рисунки создаются из обычных BMP картинок при помощи редактора Shed (он прилагается). Формат такого рисунка не воспринимается Word-ом и поэтому они вставляются только при помощи команд bm*, описанных в разделе 3.6.
Макрокоманды
Приведем данные по макрокомандам по разделам. Внимание !! Необходимо обратить особое внимание на символ кавычек. По всему тексту это ` ' (символы с кодами 64 и 7 шрифта Times New Roman Cyr соответственно). В тексте это правило соблюдено только в примерах, весь остальной текст содержит кавычки произвольной формы.
Макрокоманды общего назначения
History() - вызвать окно с списком последних 40 тем, к которым были переходы
Annotate() - вызвать окно редактора примечаний, в котором читатель может сделать свои пометки к данной теме.
Search() - вызвать окно поиска по слову, названию раздела ...
Contents() - перейти к разделу, который в HPJ файле заявлен как содержание
Next() - перейти к теме с следующим номером прокрутки (см. макрос + в заголовке темы)
Prew() - перейти к теме с предыдущим номером прокрутки
Print() - распечатать текущий раздел
PrinterSetup() - вызвать окно настройки принтера
Exit() - выйти из системы просмотра
CopyTopic() - переслать текст всего раздела в буфер обмена
CopyDialog() - вызвать окно, в котором выделяется текст для передачи в буфер обмена (под W95 не актуален)
HelpOn() - показать помощь по помощи (стандартный HLP файл Windows, в котором описана система просмотра HLP- файлов и описано, как с ней работать)
SetHelpOnFile(«имя_файла») - указать системе, какой файл содержит справку по системе просмотра HLP файлов - удобно, если необходимо применить нестандартное описание.
FileOpen() - вызвать окно запроса на переход в другой HLP - файл - очень удобно использовать для предоставления пользователю возможность переходить из книги в книгу.
Макрос запуска внешних программ
ExecProgram("командная строка", тип_запуска) - выполнить внешний исполнимый файл DOS или Windows (*.exe, *.com, *.pif, *.bat). Параметр тип_запуска показывает системе, как необходимо запустить программу :
0 - в окне нормального размера
1 - в минимизированном окне (свернув в кнопку на панели переключателя задач W95)
2 - в окне максимального размера
Макросы работы с кнопками на панели кнопок
BrowseButtons() - добавить в панель кнопок кнопки перемотки по разделам «<<» и «>>». Обычно этот макрос помешают в разделе [CONFIG] HPJ файла.
CreateButton(«текст на кнопке», «макрокоманда») - создает на панели кнопок кнопку , нажатие на которую приводит к выполнению макрокоманды. Используется только в разделе [CONFIG] HPJ файла. Если с текстом на кнопке необходимо связать горячую букву, то перед ней ставят знак &.
CreateButton(«button_ID»,«текст на кнопке», «макрокоманда») - создает на панели кнопок кнопку , нажатие на которую приводит к выполнению макрокоманды. «button_ID» - имя кнопки в менеджере кнопок системы, является ее идентификатором для обращения, не должно повторятся.
DisableButton("button_ID") - запретить кнопку. Текст кнопки становится рельефным и бледным, на кнопку нельзя нажать мышкой. Имя макроса можно сократить до DB.
EnableButton("button_ID") - разрешить кнопку. Текст кнопки становится нормальным, на кнопку можно нажать мышкой. Имя макроса можно сократить до ЕB.
ChangeButtonBinding("button_ID", "макрокоманда") - изменить функцию кнопки с именем-идентификатором button_ID. Можно сократить имя этого макроса до C BB. Этот макрос очень удобен для случая, когда одна и та же кнопка должна выполнять различные функции (Например, во всех разделах имеется кнопка «показать рисунок», но рисунок в каждом разделе свой - тогда и используется эта команда)
DestroyButton("button_ID") - уничтожает кнопку с именем-идентификатором button_ID.
Макросы работы с кнопками удобно связывать с заголовками разделов - при вхождении в раздел создаются, удаляются ... соответствующие кнопки. Пример:

Закладки и примечания.
В системе можно определять неограниченное количество закладок и осуществлять переходы по ним. Достоинство закладок - они создаются самим пользователем во время работы с книгой. Для работы с закладками имеется две функции :
BookMarkDefine() - вызвать окно создания закладок в тексте
BookmarkMore() - вызвать окно для перехода к любой из существующих закладок.
Для работы с примечаниями имеется функция :
Annotate() - вызвать окно редактора примечаний, в котором читатель может сделать свои пометки к данной теме.
Работа с окнами.
Для работы с окнами имеется ряд макрокоманд :
CloseWindow("window-name") - закрыть окно с именем window-name. Имя окна задается в разделе [Windows] HPJ файла
FocusWindow("window-name") - сделать окно с именем window-name активным
HelpOnTop() - указывает системе, что окно должно быть поверх всех окон в Windows
PositionWindow(x, y, ширина, длинна, " window-name") - задает параметры окна с именем window-name: координаты верхнего левого угла, размер. Подробно о этих параметрах см. описание раздела [Windows] HPJ файла
Маркеры и переменные в файле.
Имеется возможность создавать переменные типа Boolean - логический тип, принимающий значения true - истина или false - ложь. Такие переменные очень удобно применять для конфигурирования системы - есть или нет Sound Blaster и т.п. Кроме того, как «побочный эффект» имеется возможность использовать маркер как точку в тексте, к которой можно произвести переход.
SaveMark("marker-text") - создать маркер с именем marker-text
DeleteMark("marker-text") - удалить маркер с именем marker-text
GoToMark("marker-text") - перейти на маркер с именем marker-text
IsMark("marker-text") - возвращает true, если маркер с именем marker-text существует и false, если нет
Not(IsMark("marker-text")) - логическая инверсия IsMark
IfThen(IsMark("marker-text"), "macro") - выполняет макрокоманду macro если существует маркер с именем marker-text
IfThen(Not(IsMark("marker-text")), "macro") - выполняет макрокоманду macro если не существует маркер с именем marker-text
IfThenElse(IsMark("marker-text"), "macro1", "macro2") - выполняет макрокоманду macro1 если существует маркер с именем marker-text или macro2, если маркер с именем marker-text не существует (классический оператор if ... then ... else)
Пример использования маркеров :
в меню конфигурации
В системе есть плата Sound Blaster!SaveMark("SB-OK")
В системе нет платы Sound Blaster!DeleteMark("SB-OK")
где-то в тексте
....проиграем звук!IfThen(IsMark("SB-OK"), "ExecProgram(«mplayer.exe demo.wav»)") для примера ...
макрос ExecProgram срабатывает только в том случае, если пользователь после запуска нажал на пункт меню В системе есть плата Sound Blaster.
Горячие комбинации клавиш
Часто при разработке HLP системы может возникнуть необходимость часто выполнять определенные действия - переход к оглавлению, запуск определенных программ, переход из одной системы другую и т.п. . Для этого в системе предусмотрена возможность назначения определенным действиям горячей комбинации клавиш
AddAccelerator(key, shift-state, «macro») - выполнить макрос macro, если нажата клавиша с кодом key и спец- клавиши нажаты в соответствии с shift-state. Кодирование shift-state:
0None
1 SHIFT 2 CTRL
3 SHIFT+CTRL 4 ALT
5 ALT+SHIFT 6 ALT+CTRL
7 SHIFT+ALT+CTRL
Кодирование клавиши в переменной key приведено в таблице 1 приложения. Можно сократить до AA.
RemoveAccelerator(key, shift-state) - удалить горячую комбинацию клавиш, соответствующую key, shift-state. Можно сократить до RA.
Макросы связи файлов помощи и переходов из файла в файл.
Эти макросы применяются для свободного перехода из одного HLP- файла в другой к любой теме внутри них. После имени filename во всех макросах может стоять запись направления «>имя_окна», где имя_окна - имя того окна, в которое должна выводится информация. Окно должно быть описано в HPJ файле. Пример:
JumpId("demo1.hlp>win1", "tema_about_multimedia")
JumpContext("filename", number) - перейти к теме с контекстным номером number, находящейся в HLP файле с именем filename
JumpId("filename", "context-string") - перейти к теме с контекстным именем context-string, находящейся в HLP файле с именем filename
JumpKeyword("filename", "keyword") - перейти к первому из разделов HLP файла с именем filename, содержащему строку keyword
PopupContext("filename", context-number) - показать тему с контекстным номером number, находящейся в HLP файле с именем filename в всплывающем окне
PopupId("filename", "context-string") - показать тему с контекстным именем context-string, находящейся в HLP файле с именем filename в всплывающем окне
Добавление пунктов в меню программы просмотра HLP файлов.
При разработке сложных HLP систем может возникнуть необходимость в создании новых пунктов главного меню подпунктов в существующих меню или созданных.
InsertMenu("menu-ID", "menu-name", position) - вставить в главное меню пункт меню с идентификатором menu-ID, текст пункта меню menu-name, он будет размещен в главном меню в позиции position. Удалить пункт меню нельзя.
Добавлять, вставлять и удалять подпункты меню можно не только в созданных самим пунктах, но и в стандартных, для чего привожу идентификаторы menu-ID для всех стандартных (известных мне) пунктов меню :
menu-ID Пункт меню
MNU_FILE Файл
MNU_EDIT Правка
MNU_BOOKMARK Закладка
MNU_HELPON ? (вызов подсказки)
AppendItem("menu-id", "item-id", "item-name", "macro") - добавить подпункт меню с идентификатором item-id в меню с идентификатором menu-id. Текст подпункта меню - item-name, с этим подпунктом меню связать макрос macro.
InsertItem("menu-id", "item-id", "item-name", "macro", position) - вставить подпункт меню с идентификатором item-id в меню с идентификатором menu-id. Текст подпункта меню - item-name, с этим подпунктом меню связать макрос macro, подпункт будет размещен в меню в месте position. Если position=0, то подпункт будет первым.
DisableItem("item-id") - запретить подпункт меню с идентификатором item-id. Этот пункт выводится в меню рельефно и на него нельзя «нажать».
EnableItem("item-id") - разрешить подпункт меню с идентификатором item-id. Этот пункт выводится в меню нормальным цветом и на него можно «нажать».
CheckItem("item-id") - пометить пункт меню флажком «включено» (обычно «птичка») перед строкой названия пункта. Имя макроса можно сократить до CI.
UncheckItem("item-id") - снять флажок «включено» перед строкой названия пункта. Имя макроса можно сократить до UI .
DeleteItem("item-id") - удалить подпункт меню с идентификатором item-id.
Создание автосодержания для HLP файла под Windows 95.
В системе Windows 95 появилось весьма полезное расширение возможностей HLP системы - автосодержание. Это многоуровневое меню, раскрывающееся при непосредственном просмотре HLP файла из проводника или при нажатии кнопки содержание в любой момент просмотра помощи. Особенностью автосодержания является то, что оно может объединять несколько HLP файлов, причем имеется возможность явно указать, из какого файла извлекать данный пункт и в каком окне его показывать. Кроме того, любой пункт автосодержания можно связать с макросом (см. систему макрокоманд выше). Недостатки - автосодержание представляет собой отдельный файл (обычно его имя совпадает с именем HLP файла, а расширение - CNT. Поэтому далее по тексту будем называть его CNT файлом) и оно никак не защищено от внешнего вмешательства (это обычный текстовый файл в кодировке Windows, имеющий несложную структуру. Однако этот недостаток является и достоинством, т.к. такой файл можно добавить к уже готовому HLP файлу без вмешательства в его структуру.
Формат заголовка CNT файла.
Файл CNT состоит из небольшого заголовка и непосредственно перечня пунктов многоуровневого меню-содержания. Перед всеми служебными командами в CNT файле ставится «:». В [ ] размещены необязательные параметры, которые можно опустить.
:BASE имя_файла.hlp[>имя_окна] - задает имя базового HLP фала. Все темы, для которых нет явного указания на их месторасположение ищутся в этом файле. Кроме того, можно указать имя окна, в котором будут выводиться темы (см. секцию [WINDOWS] HPJ файла.
:Title Название темы (с пробелами) - название темы HLP файла. Оно будет выведено в заголовке окна с меню.
:Index имя=имя_файла.hlp - добавить файл имя_файла.hlp в индекс (это позволит, например, вести поиск по нескольким HLP файлам, произойдет объединение пунктов предметного указателя)
:Link имя_файла.hlp - подключить файл имя_файла.hlp к списку файлов, в которых производится поиск по ключевым словам (макросы Alink и Klink, только в версии 4.0)
Формат строк описания пунктов меню.
Строки описания пунктов меню имеют следующий формат:
код_уровня Название пункта меню=контекстное_имя_раздела[@имя_файла.hlp] [>имя_окна]
где:
код_уровня - номер уровня пункта меню. 1- верхний уровень, 2... - подуровни
Название пункта меню - название пункта. Может содержать пробелы, символы любого алфавита кроме знака «=».
контекстное_имя_раздела - контекстное имя раздела, который необходимо вызвать при двойном щелчке по этому пункту.
[@имя_файла.hlp] - имя файла, в котором необходимо искать раздел. Актуально только в случае многофайловой системы.
[>имя_окна] - в каком окне показывать.
Важное примечание: если пункт меню содержит подпункты, то запись для него состоит только из кода уровня и названия пункта меню. Последующие строки описания подпунктов будут иметь код уровня на единицу больше например:
1 Это пункт меню с подменю
2 Пункт подменю 1=t001
2 Пункт подменю 2=t002
Кроме того, любой подпункт меню сам может иметь подпункты :
1 Это пункт меню с подменю
2 Пункт подменю 1=t001
2 Пункт подменю, который сам имеет подменю
3 Это подменю 1=t0201
3 Это подменю 2=t0202
2 Пункт подменю 1=t002
В любом месте описания меню может стоять команда:
:include имя_файла.CNT - вставить в это место меню все меню из файла имя_файла.CNT. Это очень удобно для подключения своих меню к уже готовым. Например, необходимо подключить книгу с описанием MathCad 6.0 к его HLP системе. Для этого находим CNT файл и последней строкой вписываем
:include mcad-b.CNT
где mcad-b.CNT - СТЕ файл подключаемой книги по MathCad 6.0. Подобный подход очень широко использован в Windows 95 - там очень многие файлы имеют ссылки друг на друга в меню или включают меню друг друга в свои CNT файлы посредством команды include.
Пример CNT файла
:Base vbase.hlp
:Title База данных по журналам
1 Главное окно и управляющие элементы в нем=main_w
1 Горячие клавиши=hot_key
1 Менеджер работы с таблицами данных
2 Список доступных баз данных=t0701
2 Свойства текущей базы данных=t0702
2 Создание новой базы данных=t0705
2 Удаление текущей базы данных=t0706
2 Параметры доступа и ввод пароля=t0703
1 Настройки
2 Параметры сохранения=t0601
2 Общие параметры=t0602
1 Поиск
2 Поиск по набору полей=t0401
2 Поиск по текущему полю=t0402
1 Редактор примечаний
1 Сортировка
2 Сортировка по текущему полю
2 Приоритетная сортировка
Программа просмотра HLP файлов WinHelp
Ключи запуска из командной строки:
winhelp.exe [[-H] [-G[хх]] [-W имя_окна] [-K ключевое_слово][-I контекстное_имя] [-N хх][-P идентификатор] HLP-file]
Ключи :
-G[хх] Создать файл конфигурации (*.GID) и выход.
-H Выдать справку по winhelp
-I контекстное_имя Показать тему с указанным контекстным именем.
-K ключевое_слово Показать тему с указанным ключевым словом.
-N xx Показать раздел с контекстным номером хх (см. описание секции [MAP] HPJ файла).
-P идентификатор Показать тему, указанную в идентификаторе в pop-up окне. Идентификатор - ключ -I или -N, например
WinHelp -P -N 15 VBASE.HLP
-W имя_окна Показать HLP в указанном окне
HLP-file Имя HLP файла. Если имя не указано, то предлагается его выбрать.
Структура файла настроек winhelp.ini
Программа winhelp.exe имеет текстовый файл настроек winhelp.ini. Он представляет особый интерес для программистов, используется в основном раздел [FILES]. Он особенно полезен при работе с CD-ROM или дискетами, когда HLP файл оказывается на сменном носителе или в системе с множеством каталогов. Структура строк раздела:
HLP-file=путь[, сообщение]
Где :
HLP-file - имя HLP файла
путь - путь, по которому его необходимо искать
сообщение - текстовая строка, которая выводится в окне сообщения в случае, если по указанному пути файл не найден. При нажатии ОК будет произведена попытка найти файл, и в случае неудачи опять появится это окно. Пример:
vbase.hlp=f:\vbase\help, Вставьте пожалуйста CD-ROM диск HOME-BASE в устройство F:
