Книга представляет собой стандартный файл подсказок Windows. Он может быть просмотрен без применения специальной программы оболочки, потенциально не может быть заражен вирусом, что дает ему определенные преимущества при распространении книги.

Вид материалаКнига
Раздел [MAP]
Раздел [BITMAPS]
Раздел [WINDOWS]
Раздел [ALIAS]
Раздел [BAGGAGE]
Раздел [BUILDTAGS]
Compress = high
Макросы управления, вносимые в текст
Горячий участок текста для контекстного перехода
Создание всплывающих меню и комментариев
Секвенсор MIDIhint3
Создание горячих участков текста, выполняющих макрокоманду
Вывод определенной темы в вторичном окне
Создание в тексте «кнопок», «иконок».
Сегментированные рисунки
Макрокоманды общего назначения
Макрос запуска внешних программ
Макросы работы с кнопками на панели кнопок
Закладки и примечания.
Работа с окнами.
...
Полное содержание
Подобный материал:
1   2   3   4

Раздел [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 Демонстрация текстовых возможностей - цвета, шрифты ...


В заключении следует отметить, что в одной теме может быть несколько заголовков. В данном случае они выступают в роли информационных точек и позволят, например, осуществлять переходы не к теме, а к конкретной точке внутри темы (например, к формуле).

Горячий участок текста для контекстного перехода



Горячие участки текста предназначены для выполнения операций контекстного перехода. Переход совершается на любую тему книги, снабженную контекстным именем (см. сноску «#» заголовка темы) или на любую точку текста, которому присвоено контекстное имя. В предлагаемом алгоритме особое внимание следует обратить на подчеркивание, атрибуты текста - это несет информацию для компилятора.

Для создания горячего участка необходимо :

  1. Выделить будущий горячий участок текста блоком и в меню Формат/Шрифт (можно вызвать, нажав над блоком правую кнопку мыши и в появившемся меню нажать пункт Шрифт) установить двойное подчеркивание
  2. Встык к подчеркнутому тексту (без пробелов !!) дописать контекстное имя раздела, не содержащее пробелов, знаков препинания и русских букв
  3. Выделить его контекстное имя блоком и в меню настройки шрифта указать, что оно является скрытым текстом и подчеркнуто двумя чертами


Если все проделано верно, то Вы увидите :

Мультимедиаdd10

Создание всплывающих меню и комментариев


Всплывающий комментарий - небольшая тема (обычно 1 - 15 строк), показываемая системой в отдельном окне при нажатии на горячий участок текста. Комментарий может содержать горячие участки текста и макросы. Алгоритм создания :
  1. Создать тему (см. выше), в которой содержится тот текст, который необходимо вывести в всплывающем окне. У темы обычно отсутствует явно выделенный заголовок, вместо него используется первая строка текста. Сноска заголовка обычно единственная - «#».
  2. Выделить будущий горячий участок текста блоком и в меню Формат/Шрифт (можно вызвать, нажав над блоком правую кнопку мыши и в появившемся меню нажать меню Шрифт) установить одинарное подчеркивание
  3. Встык к подчеркнутому тексту (без пробелов !!) дописать контекстное имя раздела, который должен быть показан в всплывшем окне
  4. Выделить его контекстное имя блоком и в меню настройки шрифта указать, что оно является скрытым текстом и подчеркнуто одной чертой


Если все проделано верно, то Вы увидите :

Секвенсор MIDIhint3


К моменту вызова пользователем всплывающего окна можно привязать определенные действия - добавить сноску «!» к заголовку темы для всплывающего окна.

Создание горячих участков текста, выполняющих макрокоманду



Эти горячие участки текста применяются для выполнения любой из макрокоманд, список и краткое описание которых приведен далее. Алгоритм:
  1. Выделить будущий горячий участок текста блоком и в меню Формат/Шрифт (можно вызвать, нажав над блоком правую кнопку мыши и в появившемся меню нажать меню Шрифт) установить двойное подчеркивание
  2. Встык к подчеркнутому тексту (без пробелов !!) дописать символ «!» и текст макрокоманды. При написании текста макрокоманды особое внимание обратить на знаки препинания, особенно кавычки. Дело в том, что в составе любого шрифта имеется несколько вариантов начертания кавычек, система же распознает только один : ` ' (символы с кодами 64 и 7 соответственно в Times New Roman Cyr)
  3. Выделить символ «!» и текст макрокоманды блоком и в меню настройки шрифта указать, что оно является скрытым текстом , подчеркнуто двумя чертами и начертание шрифта - курсив. Относительно курсива нигде в описаниях системы ничего не приведено (но в фирменных примерах это именно так), при написании макроса обычным текстом он так же отлично компилируется. Возможно, это своего рода «правило хорошего тона». Практическое применение такого выделения курсивом - при распечатке исходного текста книги легко отличить скрытый текст макросов от обычного.

Если все проделано верно, то Вы увидите :

Воспроизвести файл 3D-Studio (FLI файл)!ExecProgram(`fliplay.exe demo.fli', 0)

Вывод определенной темы в вторичном окне


Любая тема может быть выведена во вторичном окне (создание темы и позиция в нем - как для первичного окна, более того, одна и та же тема может выводится как в первичном окне, так и во вторичных). Для вывода темы во вторичном окне применяется команда, созданная по алгоритму:
  1. Выделить будущий горячий участок текста блоком и в меню Формат/Шрифт установить двойное подчеркивание
  2. Встык к подчеркнутому тексту (без пробелов !!) дописать контекстное имя раздела, не содержащее пробелов, знаков препинания и русских букв
  3. Встык к контекстному имени раздела дописать символ «>» (знак математического «больше»), встык к нему записать имя окна, в которое должна выводиться тема.
  4. Выделить его контекстное имя, значок > и имя окна блоком и в меню настройки шрифта указать, что оно является скрытым текстом и подчеркнуто двумя чертами


Следует заметить, что значок «>» - признак направления и расшифровывается как «вывести в». Имя вторичного окна должно быть задано вместе с его параметрами в секции [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: