﻿














                   Т У Р Б О      П А С К А Л Ь

                       для    W I N D O W S



         К О М П И Л Я Т О Р     С П Р А В О Ч Н О Й
     
                     И Н Ф О Р М А Ц И И
     

























                          СОДЕРЖАНИЕ

     ГЛАВА 1:
     ПРЕДОСТАВЛЕНИЕ ПОМОЩИ: СИСТЕМА HELP
       Cоздание Help системы:
       Цикл разработки программ...............................
       Как Help представляется пользователю...................
       Как Help представляется разработчику текста Help.......
       Как Help представляется программисту...................
       Резюме.................................................

     ГЛАВА 2:
     ПЛАНИРОВАНИЕ СИСТЕМЫ HELP
       Разработка плана.......................................
         Определение категории пользователей..................
         Планирование содержания системы Help.................
         Планирование структуры тем Help......................
         Выведение на дисплей контекстно-чувствительных тем
         Help.................................................
       Определение структуры тематического файла..............
         Выбор файловой структуры для Вашей программы.........
       Конструирование представления тем Help.................
         Компоновка Help текста...............................
         Типы шрифтов и размеров..............................
         Графические изображения..............................
       Резюме.................................................

     ГЛАВА 3:
     СОЗДАНИЕ HELP ТЕМАТИЧЕСКИХ ФАЙЛОВ
       Выбор санкционированного средства......................
       Структурирование Help тематических файлов..............
       Кодирование Help тематических файлов...................
         Присваивание тегов построения........................
         Присваивание контекстных строк.......................
         Присваивание заголовков..............................
         Присваивание ключевых слов...........................
           Создание многочисленных таблиц ключевых слов.......
       Присваивание номеров последовательностям просмотров....
         Организация последовательностей просмотров...........
         Кодирование последовательностей просмотров...........
       Создание перекрестных ссылок между темами..............
       Определение терминов...................................
         Создание тем определений.............................
         Кодирование определений..............................
       Вставка графических изображений........................
         Создание и захват растров............................
         Размещение растров с использованием графических
         систем подготовки текстов............................
         Размещение растров посредством ссылки................
       Управление тематическими файлами.......................
         Отслеживание файлов и тем............................
         Создание Help трассировщика..........................
       Резюме.................................................

     ГЛАВА 4:
     ПОСТРОЕНИЕ HELP ФАЙЛА
       Создание Help файла проекта............................
       Определение тематических файлов: Сегмент Files.........
       Определение тегов построения: Сегмент BuildTags........
       Определение опций: Сегмент Options.....................
         Определение сообщений об ошибках: Опция Warning......
         Определение тем построения: Опция Build..............
         Определение корневого справочника: Опция Root........
         Спецификация индекса: Опция Index....................
         Присваивание заглавия в Help системе: Опция Title....
         Преобразование шрифтов: Опция Forcefont..............
         Изменение размеров шрифтов: Опция Mapfontsize........
         Таблица ключевых слов: Опция Multikey................
         Сжатие файлов: Опция Compress........................
       Определение новых контекстных строк: Сегмент Alias.....
       Отображение контекстно-чувствительных тем: Сегмент Map.
       Включение растров по ссылке: Сегмент Bitmaps...........
       Компилирование Help файлов.............................
         Использование Help компилятора.......................
       Разработка программы для доступа к Help................
         Вызов WinHelp из программ............................
       Получение контекстно-чувствительной помощи.............
         Shift+F1 поддержка...................................
         F1 поддержка.........................................
       Получение Help по элементу, перечисленному в меню Help.
       Доступ к дополнительным таблицам ключевых слов.........
       Отмена Help............................................
       Резюме.................................................

     ГЛАВА 5:
     ПРИМЕРЫ HELP И СООБЩЕНИЯ ОБ ОШИБКАХ КОМПИЛЯТОРА
       Help тематические примеры.............................
       Сообщения об ошибках Help Compiler....................
       Ошибки во время обработки файла проекта...............
       Ошибки во время обработки RTF тематических файлов.....










                           ГЛАВА 1

             ПРЕДОСТАВЛЕНИЕ ПОМОЩИ: СИСТЕМА HELP

     Система Help обеспечивает пользователей интерактивной ин-
формацией о  программе.  Создание  системы  требует усилий как
разработчиков текстов Help,  так и программистов Help.  Разра-
ботчик текстов  Help  планирует,  пишет,  кодирует,  создает и
отслеживает Help тематические файлы,  которые являются тексто-
выми файлами, описывающими различные аспекты программы. Разра-
ботчик программы Help гарантирует,  что система Help правильно
работает с программой.
     В данной главе описываются следующие темы:
     - Создание системы Help
     - Как Help предоставляется пользователю
     - Как Help предоставляется разработчику текста Help
     - Как Help предоставляется программисту Help
     Эта и  последующие  главы предполагают,  что Вы знакомы с
Microsoft Windows Help.  Эти главы используют примеры из учеб-
ных программ (написанных на С и Pascal),  которые находятся на
Ваших дисках.  Если Вы не знакомы с Windows Help, выберите мо-
мент для прогона примеров программ и используйте Helpex Help.

       Создание системы Help : Цикл разработки программ

     Создание системы  Help для приложения Windows заключает в
себе следующие основные задачи:
     1. Сбор информации для тем Help.
     2. Планирование системы Help.
     В главе 2 "Планирование системы Help" описываются сообра-
жения, необходимые Вам при планировании системы Help.
     3. Написание текста для тем Help.
     4. Введение всех требуемых кодов управления  в  текстовые
файлы.
     Коды управления определяют,  как пользователь может пере-
мещаться по  системе Help.  В раздел,  озаглавленный "Как Help
представляется разработчику текста Help",  включен  пример  из
нескольких управляющих кодов. В главе 3 "Создание Help темати-
ческих файлов" эти коды описываются более подробно.
     5. Создание файла проекта для построения.
     Help файл проекта обеспечивает информацию,  которая необ-
ходима  Help  Compiler  для построения Help файла ресурсов.  В
главе 4 "Построение файла Help" описывается Help файл проекта.
     6. Построение Help файла ресурсов.
     Help файл ресурсов является компилированной версией тема-
тических файлов  создаваемых  разработчиком текста.  В главе 4
"Построение файла Help"  описывается  как  компилировать  Help
файл ресурсов.
     7. Тестирование и отладка системы Help.
     8. Программирование  приложения таким образом,  чтобы она
могла иметь доступ к Windows Help.
     Следующая блок  - схема показывает основной рабочий поток
в концепции  и разработке системы Help.

            Рисунок 1.1  Диаграмма рабочего потока
        ┌─────────────────────────────────────────────────┐
        │  Соберите данные программного продукта из:      │
        │  - Спецификации программного продукта           │
        │  - Руководства "Справочника команд" или         │
        │    "Справочника пользователя"                   │
        │  - Практической работы с программой             │
        │  - Разрабатываемого программного обеспечения    │
        └────────────────────────┬────────────────────────┘
                                 │
        ┌────────────────────────┴────────────────────────┐
        │ Перечислите темы и создайте контур Help         │
        └────────────────────────┬────────────────────────┘
                                 │
        ┌────────────────────────┴────────────────────────┐
        │  Напишите программу с возможность доступа       │
        │      к Help. Определите контекстно-             │
        │      чувствительные добавочные блоки.           │
        └────────────────────────┬────────────────────────┘
                                 │
        ┌────────────────────────┴────────────────────────┐
        │  Напишите и отредактируйте текстовые файлы.     │
        │  Введите управляющие коды для переходов и       │
        │  определений. Определите контекстные строки,    │
        │  заголовки, последовательные номера,            │
        │  ключевые слова и признаки построения.          │
        └────────────────────────┬────────────────────────┘
                                 │
        ┌────────────────────────┴────────────────────────┐
        │         Перенесите файлы на ПВМ                 │
        │           (если необходимо)                     │
        └────────────────────────┬────────────────────────┘
                                 │
        ┌────────────────────────┴────────────────────────┐
        │        Создайте Help файл проекта.              │
        │    Установите соответствие контекстно-          │
        │  чувствительных тем с контекстными номерами.    │
        │        Прогоните программу Build.               │
        └────────────────────────┬────────────────────────┘
                                 │
        ┌────────────────────────┴────────────────────────┐
        │         Испытайте систему Help.                 │
        │  Выполните отладку и повторное испытание.       │
        └─────────────────────────────────────────────────┘

            Как Help предоставляется пользователю

     Для пользователя система Help представляется частью прог-
раммы, которая создается из текста и графических  изображений,
выводимых в окне Help впереди программы.
     На рисунке 1.2 показано окно Help,  которое появляется на
экране когда  пользователь запрашивает подсказку при копирова-
нии текста в Helpex.
              Рисунок 1.2 Окно подсказки Helpex
 ╔═[■]════════════════════════════════════════════════[°][∙]═╗
 ║                       Help Example                        ║
 ║───────────────────────────────────────────────────────────║
 ║ File  Edit  Help                                          ║
 ║───────────────────────────────────────────────────────────║
 ║                                                           ║
 ║                                                           ║
 ║         ╔═[■]═════════════════════════════[°][∙]═╗        ║
 ║         ║     Help Example Help - helpex.hlp     °        ║
 ║         ║────────────────────────────────────────▒        ║
 ║         ║  File Edit Bookmark Help               ▒        ║
 ║         ║────────────────────────────────────────▒        ║
 ║         ║ Index Back Browse Browse Search        ▒        ║
 ║         ║────────────────────────────────────────▒        ║
 ║         ║Copying Text                            ■        ║
 ║         ║                                        ▒        ║
 ║         ║Это объясняет как копировать текст в и  ▒        ║
 ║         ║из clipboard.                           ▒        ║
 ║         ║(Эта тема связывается с ключевыми слова-▒        ║
 ║         ║ми "копировать" и "clipboard".)         ▒        ║
 ║         ║                                        ▒        ║
 ║         ║                                        ∙        ║
 ║         ╚<■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒>─┘        ║
 ║                                                           ║
 ║                                                           ║
 ╚══════════════════════════════════════════════════════════─┘
     Окно Help выводит на экран один пример темы Help, частич-
ное описание того,  как выполнить одну задачу.  На рисунке 1.2
первое предложение  включает определение слова "clipboard" (бу-
фер вырезанного изображения). Посредством нажатия кнопки мышки
в тот  момент,  когда  курсор  находится  на слове (выделенном
пунктирной линией), пользователь может прочитать определение в
накладываемом окне, которое остается на экране до тех пор, по-
ка нажата кнопка мышки.
     Перекрестные ссылки  на  соответствующие  темы называются
операциями перехода.Нажав на кнопку мышки,  чтобы выбрать тер-
мин перехода  для  соответствующей темы (отмеченной пунктирной
линией),пользователь изменяет содержание окна Help на описание
новой темы или команды.  Рисунок 1.2 включает просмотр опреде-
ления "clipboard".

       Как Help представляется разработчику текста Help

     Для разработчика текста система Help является группой те-
матических файлов, которые представляют собой текстовые файлы,
включающие особые коды. На рисунке 1.3 показан исходный текст,
который соответствует теме, показанной на рисунке 1.2.
                Рисунок 1.3 Тематический файл
╔═[■]════════════════════════════════════════════════[°][∙]═╗
║            Microsoft Word - \HELP\HELPEX.RTF              ║
║───────────────────────────────────────────────────────────║
║File Edit Help View Insert Format Macro Window         Help║
║───────────────────────────────────────────────────────────║
║   Font:                 Ptr:                              ║
║───────────────────────────────────────────────────────────║
║   Copying Text                                            ║
║                                                           ║
║   Это объясняет как копировать текст в и из clipboard.    ║
║   (Эта тема связывается с ключевыми словами "копировать" и║
║    "clipboard".)                                          ║
║───────────────────────────────────────────────────────────║
║   Deleting Text                                           ║
║                                                           ║
║   Это объясняет как удалить текст.(Эта тема связывается с ║
║   с ключевыми словами "копировать" и "clipboard".)        ║
║───────────────────────────────────────────────────────────║
║   Exiting                                                 ║
║                                                           ║
║   Это объясняет как выйти из HelpEx.                      ║
║                                                           ║
║                                                           ║
╚══════════════════════════════════════════════════════════─┘
     Для того,  чтобы раскрыть эту  тему,  разработчик  текста
Help описывает  задачу,  форматирует  текст  и вставляет коды,
использующие зачеркнутый и подчеркнутый  текст  и  подстрочные
примечания. Вместо   зачеркнутого   текста  разработчик  может
использовать двойное подчеркивание,  если текстовый  процессор
не выполняет  форматирование зачеркнутого текста.  Подстрочные
примечания в тексте содержат информацию о редактировании,  не-
обходимую для компилятора Help. В главе 2 "Планирование систе-
мы Help" обсуждаются проблемы форматирования.В главе 3 "Созда-
ние Help  тематических  файлов" описывается то,  как создаются
темы и вводятся особые коды, которые использует система Help.

          Как Help представляется программисту Help

     Для программиста  Windows  Help   автономной   программой
Windows, которую  пользователь  может  прогонять подобно любой
другой программе.  Ваша  программа   может   вызвать   функцию
WinHelp для  запроса Windows о выполнении программы Help и оп-
ределить какую тему вывести на дисплей в окно Help.
     Смотрите главу 4 "Построение файла Help",где дается более
подробная информация о программном интерфейсе Help программы.

                      Резюме

     Система Help создается из  тем,  связанных  через  гипер-
текст. Темы  и  связи  появляются на экране для пользователя в
другом виде, чем для разработчика текста в тематическом файле.
Для программиста Help является автономной программой.
     Для получения  дополнительной   информации   относительно
соответствующих тем, смотрите следующие главы:
     Тема                     Ссылка
   ────────────────────      ─────────────────────────────────
   Кодируемые в Help          Глава 3 "Создание Help
   темы                       тематических файлов"
   Компилирование файлов      Глава 4 "Построение файла Help"
   Help






                           ГЛАВА 2

                  ПЛАНИРОВАНИЕ СИСТЕМЫ HELP

     Первейшей задачей для разработчика текста  Help  является
разработка плана для создания системы. В данной главе обсужда-
ется планирование системы Help для особой программы.
     В данную главу входят следующие темы:
     - Разработка плана
     - Разработка структуры тематического файла
     - Конструирование визуального представления тем Help

                       Разработка плана

     До того как приступить к написанию  тем  Help,  используя
собранную Вами  информацию,  Вам и другим членам группы разра-
ботки Help, необходимо разработать план, учитывающий следующее:
     - Категорию пользователей Вашей программы
     - Содержание тем Help
     - Структура тем
     - Использование контекстно-чувствительных тем
     Вы можете  пожелать  представить  Ваш  план  в документах
конструирования, которые включают схему информации Help, диаг-
рамму  структуры  тем  и примеры различных видов тем,  которые
должна   включать    Ваша    система.Запомните,    что    кон-
текстно-чувствительная  Help  требует  дополнительного времени
разработки, особенно для разработчика программы.

             Определение категории пользователей

     Категория пользователей,  для  которой  создается  данная
Help система, определяет какой вид информации будет доступен в
Вашей системе и как Вы можете представить информацию.
     Пользователи Help системы могут классифицироваться следу-
ющим образом:
     Пользователь          Данные
   ───────────────────────────────────────────────────────────
     Начинающие         Полностью незнакомые с работой на ЭВМ
     программисты
     Незнакомый с       Некоторое знание ЭВМ,однако незнакомый
     программой         с Вашим видом программы.Например, если
                        Вы обеспечиваете  Help  для  программы
                        электронной таблицы,  то такой пользо-
                        ватель может быть знаком  только с па-
                        кетом подготовки текстов.
     Ознакомленный      Хорошо  осведомленный  о  Вашем  виде
     с  программой      программы.
     на среднем уровне
     Специалист         Имеющий  опыт  работы  с  Вашим  типом
                        программы.
   ───────────────────────────────────────────────────────────
     Запомните, что  каждый пользователь может иметь различные
уровни знаний. Например, специалист в области систем подготов-
ки текстов  может  не  иметь опыта в использовании электронных
таблиц.

             Планирование содержания системы Help

     Вы должны разработать темы,  которые весьма многочисленны
и весьма  специфичны для того,  чтобы обеспечить пользователей
необходимой помощью.
     Начинающие пользователи  нуждаются  в помощи при изучении
задач и большинства определений терминов.  Более опытные поль-
зователи иногда  обращаются к помощи для разъяснения процедуры
или термина, однако наиболее часто для восстановления в памяти
команд и функций.  Специалист обращается к помощи только в том
случае, когда ему требуется ознакомление с  синтаксисом команд
и функций, эквивалентами клавиатуры и клавишами быстрого выбо-
ра.
     Не существует правил для определения всего содержания Ва-
шей системы Help. Если Вы обеспечиваете Help для пользователей
всех типов,  то Вы должны документировать команды,  процедуры,
определения, особенности,  функции  и  другие  соответствующие
аспекты Вашей  программы.  Если Вы обеспечиваете помощь только
для специалистов,  то Вы  можете  не  включать  темы,  которые
описывают процедуры.  Учитывайте  категорию  пользователей при
решении того,  какие темы необходимо включить в Help. Помните,
что является  важным  решение о выполнении контекстно-чувстви-
тельной Help.  Контекстно-чувствительная Help требует  тесного
рабочего взаимодействия  между  автором  Help  и разработчиком
программы и,  поэтому,  будет увеличиваться время  разработки,
необходимое для создания хорошо работающей системы Help.

               Планирование структуры тем Help

     Большинство систем  Help  имеют  иерархическую  структуру
тем. В верхней части иерархии находится индекс или таблица со-
держаний, или  то и другое.  Индекс и таблица содержаний пере-
числяет индивидуальные темы или категории тем, которые доступ-
ны для пользователя.
     Сами темы могут связываться по иерархии.  Каждый успешный
шаг дает  возможность  пользователю спуститься на один уровень
иерархии Help системы до тех пор, пока пользователь не достиг-
нет тематической  информации.  Иерархическое  соотношение  тем
Help частично определяет как пользователь проходит по  системе
Help. На рисунке 2.1 показана возможная иерархия:
               Рисунок 2.1 Пример иерархии Help
                       ┌───────────┐
                       │Индекс Help│
                       └─────┬─────┘
                             │
        ┌───────────┬────────┴────┬────────────┬──────────┐
   ┌────┴────┐  ┌───┴───┐  ┌──────┴────┐ ┌─────┴────┐  ┌──┴──┐
   │ Команды │┌─┤Словарь│  │Как выбрать│ │Клавиатура│  │Мышка│
   └────┬────┘│ └───────┘  └──────┬────┘ └──────────┘  └─────┘
        │     │                   │
   ┌────┴────┐│           ┌───────┴────┐
 ┌─┤ Индекс  ││ ┌──────┐┌─┤ Как выбрать│
 │ │ команды │├>┤Тема  ││ │ индекс     │
 │ └─────────┘│ └──────┘│ └────────────┘
 │ ┌────────┐ │ ┌──────┐│ ┌─────────┐
 ├>┤ Тема   │ ├>┤Тема  │├>┤ Тема    │
 │ └────────┘ │ └──────┘│ └─────────┘
 │ ┌────────┐ │ ┌──────┐│ ┌─────────┐
 ├>┤ Тема   │ ├>┤Тема  │├>┤ Тема    │
 │ └────────┘ │ └──────┘│ └─────────┘
 │  ┌───────┐ │ ┌──────┐│ ┌─────────┐
 ├─>┤Тема   │ └>┤      │└>┤         │
 │  └───────┘   └──────┘  └─────────┘
 │  ┌───────┐
 └─>┤       │
    └───┼───┘
        │
        └── Продолжение тем

     Helpex содержит индекс, который перечисляет несколько ка-
тегорий тем. Каждая категория включает вторичный индекс, кото-
рый перечисляет темы в данной категории и сами темы.
     Перемещаясь о индекса к теме,  пользователь  проходит  от
общего к частному.
     Иерархическая структура обеспечивает пользователя  точкой
ссылки внутри Help. Пользователи не ограничиваются в перемеще-
нии вверх и вниз по иерархии.  Они могут переходить  от  одной
темы к другой,  перемещаясь через категории тем. Результат пе-
реходов состоит в наблюдении иерархических  отношений.  Напри-
мер, программа Windows Help содержит свойство поиска,  которое
позволяет пользователю ввести ключевое слово в диалоговое  ок-
но  и  искать  темы,  связанные с этим ключевым словом.  Затем
программа Help выводит список заголовков,  из  которого  можно
выбирать для получения доступа к информации,  связанной с клю-
чевым словом.
     Так как  пользователи часто знают для какого свойства бу-
дут использовать Help,  то они,  обычно, могут обнаружить, что
они желают  более  быстрого использования свойств поиска,  чем
при перемещении через иерархическую структуру.  Для  получения
более подробной  информации  о  свойствах поиска обращайтесь к
разделу в главе 3 "Присвоение ключевых слов".
     Кроме того,  чтобы организовать темы иерархически,  можно
организовать их в логической последовательности,  которая под-
ходит Вашей категории пользователей. Логическая последователь-
ность или последовательность окон просмотра позволяет  пользо-
вателю выбрать  кнопку  Browse  для  перехода  от темы к теме.
Последовательности окон просмотра особенно важны для пользова-
телей, которым нравится читать несколько тем сразу,  например,
темы, описывающие команды меню File.  Более подробная информа-
ция о  последовательности  окон  просмотра находится в главе 3
"Создание Help тематических файлов".
     Какую бы  структуру Вы не решили использовать,  постарай-
тесь минимизировать количество списков,  которые  пользователь
должен просмотреть для того,  чтобы получить информацию. Кроме
того, избегайте  заставлять  пользователя  перемещаться  через
множество уровней,  чтобы  достигнуть  нужной темы.  Для боль-
шинства функций Help систем  вполне  достаточно  два  или  три
уровня.

        Выведение на дисплей контекстно-чувствительных
                           тем Help

     Windows Help поддерживает контекстно-чувствительную Help.
Написанная с учетом разработки программы,  контекстно-чувстви-
тельная Help позволяет пользователю нажать F1 в открытом меню,
чтобы получить помощь с выбранным элементом меню. Альтернатив-
но пользователь может нажать Shift-F1, а затем нажать на кноп-
ку мышки, чтобы выбрать часть экрана или команду для получения
помощи по такому элементу.
     Например, если пользователь нажимает Shift-F1,  затем на-
жимает на кнопку мышки,  чтобы выбрать пиктограмму увеличения,
когда использует пример программы Helpex, система Help выводит
информацию, показанную на рисунке 2.2:
     Рисунок 2.2 Пример Help темы пиктограммы увеличения
 ╔═[■]════════════════════════════════════════════════[°][∙]═╗
 ║                       Help Example                        ║
 ║───────────────────────────────────────────────────────────║
 ║ File  Edit  Help                                          ║
 ║───────────────────────────────────────────────────────────║
 ║                                                           ║
 ║                                                           ║
 ║         ╔═[■]═════════════════════════════[°][∙]═╗        ║
 ║         ║         Help - helpex.hlp              ║        ║
 ║         ║────────────────────────────────────────▒        ║
 ║         ║  File Edit Bookmark Help               ▒        ║
 ║         ║────────────────────────────────────────▒        ║
 ║         ║ Index Back Browse Browse Search        ▒        ║
 ║         ║────────────────────────────────────────▒        ║
 ║         ║Maximize Icon                           ■        ║
 ║         ║                                        ▒        ║
 ║         ║Для увеличения окна до его максимального▒        ║
 ║         ║размера:                                ▒        ║
 ║         ║   1. Выберите окно, которое Вы хотите  ▒        ║
 ║         ║        увеличить.                      ▒        ║
 ║         ║   2. Нажмите и отпустите кнопку мышки  ▒        ║
 ║         ║      для выбора пиктограммы увеличения.▒        ║
 ║         ║                                        ∙        ║
 ║         ╚<■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒>─┘        ║
 ║                                                           ║
 ║                                                           ║
 ╚══════════════════════════════════════════════════════════─┘
     Разработка контекстно-чувствительной Help требует коорди-
нации между разработчиком текста Help и разработчиком програм-
мы так,  чтобы  Help  и программа передавали точную информацию
друг другу.
     Для планирования   контекстно-чувствительной  Help  автор
Help и разработчик программы должны согласовать список номеров
контекста. Контекстные номера - это произвольные номера, кото-
рые соответствуют каждой команде меню или части экрана в прог-
рамме и они используются для создания связей с соответствующи-
ми темами Help.  Затем вы можете ввести эти номера вместе с их
соответствующими контекстно-строковыми идентификаторами в Help
файл проекта,  который Help Compiler использует  для  создания
Help файла  ресурсов.  Раздел  в  главе 4 "Создание Help файла
проекта" дает более подробную информацию о  том,  как  создать
Help файл проекта.
     Контекстные номера,  определенные в  Help  файле  проекта
должны соответствовать контекстным номерам,  которые программа
посылает во время выполнения для активизации определенной  те-
мы. Смотрите  раздел  в  главе  4  "Разработка  программы  для
обеспечения доступа к Help" для получения более подробной  ин-
формации по назначению контекстных номеров.
     Если Вы неточно определили контекстные номера для тем, то
Help Compiler  генерирует значения,  определенные по умолчанию
посредством преобразования строк контекста тем  в  контекстные
номера. Смотрите   раздел   в   главе   4   "Отображение  кон-
текстно-чувствительных тем:  раздел отображения" для получения
более подробной  информации о контекстно-чувствительной Help и
контекстных строках.
     Для управления  контекстными номерами и файловой информа-
ции, у Вас может возникнуть необходимость разработать програм-
му формирования  следа в Help для перечисления контекстных но-
меров для ваших контекстно-чувствительных тем.  Информация  об
использовании программы формирования следа приведена в разделе
главы 3 "Разработка Help программы формирования следа".

          Определение структуры тематического файла

     Help структура файла остается в основном  одинаковой  для
всех программ,  даже если отличаются контекст и количество те-
матических файлов.Тематические файлы сегментируются на различ-
ные темы  посредством  разрыва  страниц.  Когда  Вы формируете
систему Help, компилятор использует эти тематические файлы для
создания информации, выводимой на экран для пользователя в ок-
не Help программы.
     На рисунке 2.3 показана эта основная файловая структура.
     Рисунок 2.3 Основная файловая структура системы Help

         Help файлы,  которые  должны быть переведены
                    для операции создания
                              │
         ┌──────────────┬─────┴──────┬─┬─┬─────────────┐
    ┌────┴─────┐   ┌────┴─────┐      │ │ │       ┌─────┴────┐
    │Файл слов │   │Файл слов │     Большое      │Файл слов │
    │          │   │          │     количество   │          │
    │Страница 1│   │Страница 1│     файлов       │Страница 1│
    ├──────────┤   ├──────────┤     слов         ├──────────┤
    │          │   │   ...    │                  │          │
    │   ...    │   ├──────────┤                  │   ...    │
    │          │   │Страница n│                  │          │
    ├──────────┤   └──────────┘                  │          │
    │Страница n│                                 ├──────────┤
    └──────────┘                                 │Страница n│
                                                 └──────────┘

         Выбор файловой структуры для Вашей программы

     При выборе файловой структуры для Вашей Help системы при-
мите во внимание сферу действия и содержание системы Help, ко-
торые Вы собираетесь использовать.  Например,  Вы могли бы по-
местить все темы Help в один большой тематический файл. Или Вы
могли бы поместить каждую тему Help в отдельный файл.  Ни одна
из этих файловых структур не  является  приемлемой.  Громадный
единичный файл  или  слишком большое количество индивидуальных
файлов могут вызвать трудности во время  создания  Help  файла
ресурсов.
     Количество тем связывается с количеством свойств, охваты-
ваемых системой  Help.  Следовательно,  Вы  не  можете сделать
больших изменений в одном,  не сделав изменений в другом. Нап-
ример, если  к  Help  добавляется  ряд  дополнительных свойств
программных продуктов,  то тогда должны  создаваться  дополни-
тельные темы для приспособления новой информации.
     На рисунке 2.4 показана структура возможной системы Help.
количество тем  и тематических файлов ограничивается для упро-
щения диаграммы и более четкого  показа  концепции  связывания
тем вместе благодаря переходам, показанном на рисунке стрелоч-
ками. Рисунок не предназначен для  показа  количества  файлов,
которые могут включаться в Help файловую систему.  Кроме того,
на рисунке не показано как организуются тематические  файлы  с
использованием свойства просмотра.
      Рисунок 2.4 Help файловая структура,  показывающая
                   гипертекстовые переходы

    ТЕМАТИЧЕСКИЙ ФАЙЛ        ТЕМАТИЧЕСКИЙ ФАЙЛ
     (индекс темы)            (предметы тем)
    ┌─────────────────┐      ┌─────────────────┐
    │Элемент индекса 1├─────>┤Элемент индекса 1│
    │Элемент индекса 2├────┐ │Предмет 1   ─────┼─────────┐
    │Элемент индекса 3├──┐ │ │Предмет 2   ─────┼──────┐  │
    │                 │  │ │ │Предмет 3   ─────┼────┐ │  │
    │END-OF-FILE      │  │ │ │Предмет 4   ─────┼──┐ │ │  │
    └─────────────────┘  │ │ │                 │  │ │ │  │
                         │ │ │PAGE BREAK       │  │ │ │  │
                         │ │ ├─────────────────┤  │ │ │  │
                         │ └>┤Элемент индекса 2│  │ │ │  │
                         │   │Предмет 5        │  │ │ │  │
                         │   │Предмет 6        │  │ │ │  │
                         │   │Предмет 7        │  │ │ │  │
                         │   │                 │  │ │ │  │
                         │   │PAGE BREAK       │  │ │ │  │
                         │   ├─────────────────┤  │ │ │  │
                         └──>┤Элемент индекса 3│  │ │ │  │
                             │Предмет 8        │  │ │ │  │
                             │Предмет 9        │  │ │ │  │
                             │Предмет 10       │  │ │ │  │
                             │Предмет 11       │  │ │ │  │
                             │Предмет 12       │  │ │ │  │
                             │Предмет 13       │  │ │ │  │
                             │                 │  │ │ │  │
                             │END-OF-FILE      │  │ │ │  │
                             └─────────────────┘  │ │ │  │
                ┌─────────────────────────────────┘ │ │  │
                │                ┌──────────────────┘ │  │
                │                │                ┌───┘  │
                │                │                │  ┌───┘
  ТЕМАТИЧЕСКИЙ  │  ТЕМАТИЧЕСКИЙ  │  ТЕМАТИЧЕСКИЙ  │  │ ТЕМАТИЧЕСКИЙ
ФАЙЛ (темы Help)│ФАЙЛ (темы Help)│ФАЙЛ (темы Help)│  │ФАЙЛ (темы Help)
 ┌───────────┐  │ ┌───────────┐  │  ┌───────────┐ │  │┌───────────┐
┌┤Тема 1  <──┼──┘ │Тема 7  <──┼──┘  │Тема 12  <─┼─┘  ││Тема 18    │
││           │    │           │     │           ├─┐  └┼───>       │
││PAGE BREAK │    │PAGE BREAK │     │PAGE BREAK │ │   │PAGE BREAK │
│├───────────┤    ├───────────┤     ├───────────┤ │   ├───────────┤
││Тема 2     │    │Тема 8     │  ┌──┤Тема 13    │ │   │Тема 19    │
││           │    │           │  │  │           │ │   │           │
││PAGE BREAK │    │PAGE BREAK │  │  │PAGE BREAK │ │   │PAGE BREAK │
│├───────────┤    ├───────────┤  │  ├───────────┤ │   ├───────────┤
││Тема 3     │    │Тема 9  <──┼──┘  │Тема 14    │ │   │Тема 20    │
└┼───>       │ ┌──┼───>       │     │           │ │ ┌─┤           │
 │PAGE BREAK │ │  │PAGE BREAK │     │PAGE BREAK │ │ │ │PAGE BREAK │
 ├───────────┤ │  ├───────────┤     ├───────────┤ │ │ ├───────────┤
 │Тема 4     │ │  │Тема 10    │     │Тема 15    │ │ │ │Тема 21    ├┐
 │           │ │  │           │     │PAGE BREAK │ │ │ │PAGE BREAK ││
 │PAGE BREAK │ │  │PAGE BREAK │     ├───────────┤ │ │ ├───────────┤│
 ├───────────┤ │  ├───────────┤     │Тема 16    │ │ │ │Тема 22    ││
 │Тема 5     ├─┘  │Тема 11    │     │           │ │ │ │           ││
 │           │ ┌──┼────>      │     │      <────┼─┼─┘ │     <─────┼┘
 │           │ │  │           │     │PAGE BREAK │ │   │PAGE BREAK │
 │PAGE BREAK │ │  │END-OF-FILE│     ├───────────┤ │   ├───────────┤
 ├───────────┤ │  └───────────┘     │Тема 17    │ │   │Тема 23    │
 │Тема 6     │ │                    │           │ └───┼────>      │
 │           │ │                    │END-OF-FILE│     │PAGE BREAK │
 │END-OF-FILE├─┘                    └───────────┘     ├───────────┤
 └───────────┘                                        │Тема 24    │
                                                      │           │
                                                      │END-OF-FILE│
                                                      └───────────┘

            Конструирование представления тем Help

     То,как информация в окне Help представляется  пользовате-
лю,является главной  функцией  компоновки  темы Help.Программа
Windows Help обеспечивает ряд атрибутов текста  и  графических
изображений,которые Вы можете использовать для разработки Help
окна.
     В этом  разделе представлены общие принципы по разработке
окна и  описаны  шрифты  и   графические   изображения,которые
обеспечивает Windows Help.

                     Компоновка Help темы

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

Вопрос конструирования            Принцип

     Язык              Используйте язык,соответствующий данной
                       категории пользователей.
                       Язык,который является  слишком  сложным
                       для Вашей категории пользователей,может
                       вызвать  затруднения  у  пользователей,
                       требуя от них  заучивания  определенных
                       незнакомых принципов и понятий.
     Количество        Используйте минимальное количество тек-
       текста          ста.
                       Исследования  показывают , что скорость
                       чтения уменьшается на 30%,когда пользо-
                       ватель  читает интерактивный,а не напе-
                       чатанный текст.Минимальный,сжатый текст
                       помогает  пользователям  компенсировать
                       уменьшение скорости чтения.
     Длина             Используйте короткие параграфы.
   параграфа           Интерактивные пользователи  более легко
                       перегружаются текстом,чем читатели  на-
                       печатанного  материала. Разбивка текста
                       на короткие параграфы помогает избежать
                       этой проблемы.
     Пробел            Используйте их,чтобы  сгруппировать ин-
                       формацию визуально.
                       Пробел имеет важное значение  для того,
                       чтобы сделать интерактивный текст более
                       читабельным.Используйте его свободно ,в
                       то же время также учитывайте общий раз-
                       мер,который тема будет иметь на экране.
                       Предполагается,что пользователи думают,
                       что на экране находится больше информа-
                       ции,чем существует на самом деле.Напри-
                       мер,если  отношение  пробелов  к тексту
                       равно 50:50, пользователь считает,  что
                       это отношение 40:60.
     Высвечивание      Используйте  технологию    высвечивания
                       разумно. Windows Help обеспечивает мно-
                       жество средств для высвечивания, напри-
                       мер, размеры  шрифтов,  типы  шрифтов и
                       цвет. Использование нескольких  средств
                       может помочь  пользователю быстро найти
                       информацию. Использование        многих
                       средств будет  уменьшать  эффективность
                       визуального представления  и   вызывать
                       затруднения у  пользователей.  Как  и в
                       случае документации основанной на печа-
                       ти , используйте  одновременно   только
                       один или два шрифта.
    Графика и          Используйте графику для объяснения  ви-
    пиктограмма        зуальных событий.
                       Windows Help обеспечивает использование
                       изображений  растровой графики. Исполь-
                       зуйте соответствующие изображения,чтобы
                       объяснить  функции пиктограмм и элемен-
                       тов экрана в Вашей программе.Запомните,
                       что графика будет изображать глаз поль-
                       зователя  перед  сопутствующим текстом.
                       Просмотрите Ваши  изображения  в  целях
                       удаления вводящей в заблуждение  инфор-
                       мации.Используйте цветные   изображения
                       только в  том случае,  если Вы уверены,
                       что у всех пользователей Вашей  системы
                       есть цветные        дисплеи.        Для
                       контекстно-чуствительной  Help  примите
                       во внимание дополнительное время, необ-
                       ходимое для создания точных и смысловых
                       графических изображений.
    Непротиворечивость Будьте строго последовательны  в  Вашем
    конструирования    конструировании.
                       Пользователи ожидают, что представление
                       Help тем будет одинаковым независимо от
                       представленной информации.    Согласую-
                       щийся заголовок, высвечивание, шрифты и
                       расположение текста в окне имеют важное
                       значение в эффективной системе Help.
     На рисунке 2.5.  показано окно Help, которое следует этим
принципам конструирования.
            Рисунок 2.5. Компоновка текста помощи
  ╔═[■]═════════════════════════════════════════════[°][∙]═╗
  ║        Program Manager Help - PROGMAN.HLP              ║
  ║────────────────────────────────────────────────────────▒
  ║  File   Edit   Bookmark   Help                         ▒
  ║────────────────────────────────────────────────────────▒
  ║ Index  Back  Browse  Browse  Search                    ▒
  ║────────────────────────────────────────────────────────▒
  ║Creating Groups                                         ■
  ║Вы можете создать группы в Program Manager чтобы        ▒
  ║помочь организовать Ваши программы и документы.         ▒
  ║   Чтобы создать новую группу:                          ▒
  ║ 1. Выберите New из File меню.                          ▒
  ║ 2. Отберите Progran Group опцию и выберите ОК.         ▒
  ║ 3. Введите описание группы, которую Вы желаете создать.▒
  ║ Это описание появляется в полоске заглавия             ▒
  ║  окна группы сразу под пиктограммой меню.              ▒
  ║ 4. Выберите ОК.                                        ▒
  ║ Администратор программы автоматически создаст .GRP файл▒
  ║ для новой группы, поэтому Вы можете оставить окно Group▒
  ║ File пустым.                                           ▒
  ╚<■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒>─┘

                    Типы шрифтов и размеры

     Программа Windows Help может выводить на  экран  текст  с
любым шрифтом и размером, доступными для данной системы. Когда
тематические файлы передаются  для  процесса  построения  Help
Compiler пытается использовать шрифты и размеры,  обнаруживае-
мые в тематических файлах.  Если шрифт или точечный размер  не
могут подходить   точно   при   выводе  на  экран  файла  Help
посредством Windows Help, то будет использоваться ближайший по
характеристикам доступный  шрифт и размер используемой системы
пользователя.
     Окна заполняются только определенными шрифтами и размера-
ми.  Если Вы пишете файлы Help с использованием этих шрифтов и
размеров,  то  выводимый на экран файл Help будет близко соот-
ветствовать файлу ,отпечатанному c помощью системы  подготовки
текстов.  Так  как иные шрифты,  чем те,  которые поставляются
вместе с Windows,  не могут быть доступны на машинах пользова-
телей, то у Вас возникнет необходимость ограничить выбор шриф-
тов шрифтами, поставляемыми с Windows.
     Шрифтами, используемыми Windows, являются:
     - Courier 10,12,15
     - Гельветика 8,10,12,14,18,24
     - Современный шрифт
     - Прямой светлый шрифт
     - Рукописный шрифт
     - Символьный 8,10,12,14,18,24
     - Tms Rmn 8,10,12,14,18,24
     Так как  Windows  Help поддерживает любой Windows шрифт ,
специальные символы,  например,  стрелочки, могут включаться в
Ваши темы, благодаря использованию символьного шрифта, как по-
казано на рисунке 2.6.
                Рисунок 2.6. Символьный шрифт
   ╔═[■]═══════════════════════════════════════════[°][∙]═╗
   ║                 Microsoft  Help                      ║
   ║──────────────────────────────────────────────────────▒
   ║  File   Edit   Bookmark   Help                       ▒
   ║──────────────────────────────────────────────────────▒
   ║ Outline icon bar                                     ▒
   ║Контур прямоугольника пиктограммы                     ■
   ║Выводится через вершину окна документа в виде контура.▒                                      ▒
   ║Выберите пиктограммы или нажмите комбинации клавиш,   ▒
   ║чтобы создать нужную Вам структуру контура.           ▒
   ║      Пиктограмма     Клавиши и действия              ▒
   ║         │ў│          Alt + Shift + ў                 ▒
   ║                      Продвигает заголовок            ▒
   ║         │Ў│          Alt + Shift + Ў                 ▒
   ║                      Смещает заголовок               ▒
   ║         │∙│          Alt + Shift + ∙                 ▒
   ║                      Передвигает выбранный           ▒
   ║                     параграф выше предыдущего        ▒
   ║         │°│          Alt + Shift + °                 ▒
   ║                      Передвигает выбранный           ▒
   ║                     параграф ниже следующего         ▒                        ∙
   ╚<■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒>─┘

                   Графические изображения

     Программа Windows  Help  позволяет  Вам вводить графику в
файл Help.Графика может размещаться и выводиться  на  экран  в
любом месте  страницы.Текст  может размещаться вслед за графи-
кой,как показано на рис.2.7.
                   Рисунок 2.7 Графика Help
  ╔═[■]════════════════════════════════════════════[°][∙]═╗
  ║         winhelp Windows Help - WINHELP.HLP            ║
  ║───────────────────────────────────────────────────────▒
  ║  File   Edit   Bookmark   Help                        ▒
  ║───────────────────────────────────────────────────────▒
  ║ Index  Back  Browse  Browse  Search                   ▒
  ║───────────────────────────────────────────────────────▒
  ║Для того, чтобы выбрать Help тему:                     ■
  ║                                                       ▒
  ║ мышка   Укажите подчеркнутую тему,Вы желаете увидеть и▒
  ║         нажмите кнопку мышки.                         ▒
  ║         Когда указатель находится над элементом,      ▒
  ║         который Вы можете выбрать, указатель изменя-  ▒
  ║         ется на пиктограмму, изображающую стрелки.    ▒
  ║ клави-  Нажмите Tab для перемещения высвечивания на   ▒
  ║ атура   подчеркнутую тему, которую Вы желаете         ▒
  ║         просмотреть, а затем нажмите Enter.           ▒
  ╚<■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒>─┘
     Могут включаться   цветные  графические  изображения  при
условии,что Вы можете использовать только  имеющие  в  наличии
цвета системы    Windows.Если   Вы   используете   графические
средства,которые поддерживают расширенную цветовую палитру для
создания или фиксирования изображений,эти изображения не всег-
да могут выводиться на экран с желаемыми цветами.А так как  Вы
не можете  управлять цветовыми возможностями на машине пользо-
вателя,то Вы должны ограничить Ваши изображения черными и  бе-
лыми битовыми отображениями.
     Помните,что графические  изображения  наиболее  эффектив-
ны,когда они  участвуют в процессе обучения.Графика,не связан-
ная с информацией ,обычно является скорее раздражающей,чем по-
лезной,ее нужно избегать.Более подробная информация о размеще-
нии графики в Help файлах приведена в разделе  главе  'Вставка
графических изображений'.

                            Резюме

     В этой  главе  описано как необходимо планировать систему
Help,включая определение категории  пользователей,планирование
содержания,реализацию контекстно-чувствительной  Help,структу-
рирование тематических файлов и  назначение  шрифтов  для  тем
Help.



                           ГЛАВА 3

              СОЗДАНИЕ HELP ТЕМАТИЧЕСКИХ ФАЙЛОВ

     Разработка Help тематических файлов, с которых будет ком-
пилироваться Help система,  вероятно является задачей, требую-
щей наибольшего  количества  времени   при   разработке   Help
системы для  Вашего приложения.  Help тематические файлы явля-
ются текстовыми файлами, которые определяют, что видит пользо-
ватель при использовании Help системы.  тематические файлы мо-
гут определять различные виды информации, например, индекс ин-
формации по системе, список команд или описание способа выпол-
нения задачи.
     Создание тематических  файлов  влечет  за собой написание
текста, который  пользователь  видит  при  использовании  Help
системы и ввод управляющих кодов, которые определяют как поль-
зователь может перемещаться от одной темы к другой.
     В этой главе описываются следующие темы:
     - Выбор санкционированного средства
     - Структурирование Help тематических файлов
     - Кодирование Help тематических файлов
     - Управление Help тематическими файлами

              Выбор санкционированного средства

     Чтобы написать текстовые файлы, Вам понадобится Rich Text
Format (RTF) редактор,  который  позволяет  создавать  сноски,
подчеркнутый текст  или зачеркнутый,  или текст,  подчеркнутый
двойной линией, который указывает на управляющие коды. Эти ко-
ды описаны  в  разделе "Кодирование Help тематических файлов".
Ваши выборы включают, но не ограничиваются:
     - Microsoft Word для Windows, версия 1.0
     - Microsoft Word для PC, версия 5.0
     - Microsoft Word для Macintosh, версия 3.0 или 4.0
     - Иные  системы  подготовки  текстов,  чем  те,   которые
       обеспечивает RTF.
     Возможности RTF Microsoft Word дают Вам возможность  вве-
дения кодированного текста,  требуемого для определения терми-
нов Help,  например,  переходы,  ключевые слова и определения.
Если Вы выбираете иной редактор, чем редактор программных про-
дуктов Microsoft Word,  то убедитесь,  будет ли  он  создавать
Help файлы, которые там работают как Вы хотите.

          Структурирование Help тематических файлов

     Help тематические файлы содержат множество Help тем.  Для
идентификации каждой темы в файле:
     - Темы разделяются жесткими разрывами страниц.
     - Каждая  тема,  доступная  через  гипертекстовую  связь,
должна иметь уникальный идентификатор или строку контекста.
     - Каждая тема может иметь заголовок.
     - Каждая тема может иметь список связанных с ней ключевых
слов.
     - Каждая тема может иметь идентификатор тега построения.
     - Любая  тема  может  иметь  заданную  последовательность
просмотра.
     На рисунке 3.1 показана часть тематического файла, содер-
жащая описание  того,  как  выполняются  задачи,  использующие
программу примера Helpex.
                Рисунок 3.1 Пример тем помощи
  ╔═[■]════════════════════════════════════════════════[°][∙]═╗
  ║             Microsoft Word - \HELP\HELPNEW.NRM            ║
  ║───────────────────────────────────────────────────────────║
  ║ File Edit Help View Insert Format Utilities Macro Window  ║
  ║───────────────────────────────────────────────────────────║
  ║───────────────────────────────────────────────────────────║
  ║ #$+Deleting Text                                          ║
  ║ Эта тема объясняет как удалить текст (Эта тема связывается║
  ║  с ключевыми словами "copy" и "clip".)                    ║                                      ║
  ║───────────────────────────────────────────────────────────║
  ║ #$+Exiting                                                ║
  ║  Эта тема объясняет как выводить Helpex.                  ║
  ║───────────────────────────────────────────────────────────║
  ║  #$+Edit Clear Command                                    ║
  ║───────────────────────────────────────────────────────────║
  ║  # proc_deleting_text                                     ║
  ║  $ Deleting Text                                          ║
  ║  + procedures:020                                         ║
  ║  K delete; clipboard                                      ║
  ║  # proc_exiting                                           ║
  ║  $ Exiting                                                ║
  ║  + procedures:exiting                                     ║
  ║  # HELPID_EDIT_CLEAR                                      ║
  ║  $ EDIT Clear Command                                     ║
  ╚══════════════════════════════════════════════════════════─┘
     Для получения информации о введении разрывов страниц меж-
ду темами,  смотрите документацию для  редактора,  который  вы
используете. Для получения информации о присвоении контекстных
строк и заголовков темам, смотрите следующие разделы.

             Кодирование Help тематических файлов

     Система Help использует коды управления для особых целей:

  Управляющий код            Цель
  ───────────────────────────────────────────────────────────
  Сноска в виде         Тег  построения - Определяет     тег,
  звездочки (*)         определяющий темы, которые компилятор
                        условно встраивает  в  систему.   Теги
                        построения являются   необязательными,
                        однако, когда  они  используются,  они
                        сперва должны появляться в теме.
  Знак фунта (#)        Контекстная строка - Определяет   кон-
                        текстную строку,   которая   уникально
                        идентифицирует тему.  Так  как  гипер-
                        текст основан на связях,  обеспечивае-
                        мых контекстными  строками,  темы  без
                        контекстных строк могут быть доступны-
                        ми только  посредством   использования
                        ключевых слов  или последовательностей
                        просмотра.
  Сноска в виде знака   Заголовок - Определяет заголовок темы.
  доллара ($)           Заголовки являются необязательными.
  Сноска в виде         Ключевое слово - Определяет   ключевое
  буквы "К"             слово, которое пользователь использует
                        для поиска темы.  Ключевые слова явля-
                        ются необязательными.
  Сноска в виде         Номер  последовательности  просмотра -
  знака плюс (+)        Определяет последовательность, которая
                        определяет порядок,  в котором пользо-
                        ватель может    просматривать    темы.
                        Последовательности просмотра  являются
                        необязательными. Однако,    если    Вы
                        опустите последовательности просмотра,
                        окно Help должно еще  включать  кнопки
                        Browse (просмотра),  однако они должны
                        быть  серыми.
  Зачеркивание или      Перекрестная ссылка - Указывает     на
  текст с двойным       текст,    который  пользователь  может
  подчеркиванием        выбрать для перехода на другую тему.
  Подчеркнутый текст    Определение - Определяет,  что  должны
                        выводится на  экран  временный прямоу-
                        гольник или "справочный" прямоугольник,
                        когда пользователь   нажимает   кнопку
                        мышки или клавишу Enter. Прямоугольник
                        может включать  такую информацию,  как
                        определение слова или фразы или  намек
                        на процедуру.
  Скрытый текст         Контекстная строка перекрестной ссылки
                        - Определяет строку контекста для темы,
                        которая должна выводится  на  дисплей,
                        когда пользователь выбирает текст, ко-
                        торый непосредственно предшествует ей.
  ───────────────────────────────────────────────────────────
     Если Вы используете теги построения,  вынесите их в самое
начало темы. Поместите другие сноски в любом желаемом порядке.
Более подробная  информация о присвоении специальных управляю-
щий кодов приведена в последующих разделах.

                 Присваивание тегов построения

     Теги построения являются строками, которые Вы присваивае-
те теме для того, чтобы условно включить или исключить эту те-
му из построения. Каждая тема может иметь один или более тегов
построения. Теги построения не являются необходимыми компонен-
тами Вашей Help системы.  Однако, они действительно предостав-
ляют средство  поддержки различных версий системы Help без не-
обходимости создания  различных  исходных  файлов  для  каждой
версии. Темы без тегов построения всегда включаются в построе-
ние. Вы вставляете теги построения в качестве сносок,  исполь-
зуя знак звездочки(*). Когда Вы присваиваете сноску тега пост-
роения теме,  компилятор включает или исключает тему в зависи-
мости от  информации  построения,  заданной  в BUILD опции и в
[Build Tags] разделе Help файла проекта.  Более подробная  ин-
формация об  опции  BUILD  в разделе [Build Tags] и Help файле
проекта содержится в главе 4 "Построение Help файла".
     Чтобы присвоить  тег построения теме:
     1. Поместите курсор в начало строки заголовка  темы  так,
чтобы он появлялся перед всеми другими сносками для этой темы.
     2. Вставьте звездочку (*)  в  качестве  метки  ссылки  на
сноску.
     Заметим, что звездочка (*) в  качестве  верхнего  индекса
появляется вслед за заголовком.
     3. Наберите имя тега построения в качестве сноски.
     Убедитесь, что  между  звездочкой и тегом построения есть
только один пробел.
     Теги построения  могут  составляться  из  любых  алфавит-
но-цифровых символов.Тег построения не является чувствительным
к регистру. этот тег не может содержать много пробелов. вы мо-
жете определить несколько тегов построения, отделяя их друг от
друга точкой с запятой, как в следующем примере:
         * AppVersion1; AppVersion2; Test_Build
     Включение сноски  тега построения  с темой  эквивалентно
установке для тега истинного значения  при сравнении со значе-
нием, установленном в файле проекта.  Компилятор предполагает,
что все другие теги построения имеют ложное значение для  этой
темы. После  установки  истинного  значения  для  сносок тегов
построения компилятор оценивает выражение построения в разделе
Options Help файла проекта.  Заметим,  что все теги построения
должны быть объявлены в файле  проекта,  независимо  от  того,
объявляет или нет заданная условная компиляция теги.  Если ре-
зультат проверки имеет истинное значение,  то компилятор вклю-
чает данную  тему в построение.  В противном случае компилятор
пропускает данную тему.
     Компилятор включает  во  все построения темы,  которые не
имеют сноску тега построения,  независимо от  выражений  тегов
построений, определенных  в Help файле проекта.По этой причине
у Вас может возникнуть необходимость использовать теги постро-
ения, главным  образом,  чтобы  исключить определенные темы из
некоторых построений.  Если компилятор находит любой тег пост-
роений, необъявленный  в Help файле проекта,  то он выводит на
экран сообщение об ошибке.
     Допуская условное  включение  и  исключение  определенных
тем, Вы можете создавать несколько построений,  используя оди-
наковые тематические файлы. то экономит время и затраты разра-
ботчиков Help системы.  Это также означает, что можно разрабо-
тать Help  темы,  которые  будут  помогать  поддерживать более
высокий уровень согласованности строк Вашего программного про-
дукта.

                 Присваивание контекстных строк

     Контекстные строки  идентифицируют  каждую  тему  в  Help
системе. Каждая контекстная строка должна быть уникальна.  За-
данной контекстной  строке  можно  присвоить  только одну тему
внутри Help проекта;  ее нельзя использовать для любой  другой
темы.
     Контекстная строка обеспечивает средства для создания пе-
реходов между  темами  или,  чтобы вывести на экран справочные
прямоугольники, например,  определение слова и фразы. Хотя это
не требуется,  большинство тем в Help системе будет иметь кон-
текстно-строковые идентификаторы.  Темы без контекстных  строк
не допускаются через гипертекстовые переходы. Однако, темы без
контекстно-строковых идентификаторов могут  допускаться  через
последовательности просмотров или поисков ключевых слов,, если
это нужно. Разработчик текста Help должен обосновывать санкци-
онирование тем,  к которым возможен доступ только этими спосо-
бами. Более подробная информация о присвоении переходов содер-
жится в  разделе  под  названием "Создание перекрестных ссылок
между темами".  Более  подробная  информация  о   присваивании
последовательностей просмотров содержится в разделе под назва-
нием "Присваивание  номеров  последовательностям  просмотров".
Более подробная информация о присваивании ключевых слов содер-
жится в разделе под названием "Присваивание ключевых слов".
     Для присваивания контекстной строки Help теме:
     1. Поместите курсор слева от заголовка темы.
     2. Вставьте знак фунта (#) как справочную метку сноски.
     Заметим, что знак фунта (#) в качестве  верхнего  индекса
появляется вслед за заголовком.
     3. Наберите контекстную строку в качестве сноски.
     Убедитесь в  том,  что  между  знаком фунта (#) и строкой
должен быть только один пробел.
     Контекстные строки не являются чувствительными к регистру.
     Правильные контекстные строки могут содержать  алфавитные
символы A  -  Z,  цифровые символы 0 - 9,  точку (.) и символы
подчеркивания (_).   Следующий    пример    показывает    кон-
текстно-строковую сноску, которая идентифицирует тему, назван-
ную "Opening an Existing Text File"  ("Открытие  существующего
текстового файла"):
            # OpeningExistingTextFile
     Хотя контекстная  строка  имеет практическое ограничение,
примерно 255 символов, нет разумного основания для приближения
к этому значению. Создавайте строки разумными и короткими так,
чтобы их было легче вводить в текстовые файлы.

                    Присваивание заголовков

     Сноски заголовков выполняют следующие функции в  пределах
Help системы:
     - Они появляются в меню Bookmark.
     - Они  появляются в "Topics found" списке,  который явля-
ется результатом поиска ключевого  слова.  (Темы,  которые  не
имеют заголовков, но доступны через ключевые слова, перечисля-
ются как >>Untitled Topic<< в списке обнаружений Topics.)
     Хотя это и не требуется, однако большинство тем имеет за-
головок. Вы можете не присваивать заголовок темам,  содержащим
информацию низкого уровня,  к которой не имеют доступ свойства
поиска, справочные прямоугольники и сообщения систем Help.
     Для того, чтобы присвоить заглавие теме:
     1. Поместите курсор слева от заголовка темы.
     2. Вставьте  сноску  со знаком доллара ($) как справочную
метку сноски.
     Заметим, что знак доллара в качестве верхнего индекса по-
является вслед за заголовком.
     3. Наберите заглавие в качестве сноски.
     Убедитесь, что между знаком доллара ($) и заглавием  дол-
жен быть только один пробел.
     Следующее выражение является примером сноски, которая оп-
ределяет заголовок для темы:
             $ Help Keys
     При добавлении заглавия помните о следующих ограничениях:

    Элемент            Ограничения
  ───────────────────────────────────────────────────────────
    Символы       Заголовки могут иметь в длину до 128  симво-
                  лов.
                  Компилятор  Help  отсекает строку заголовка,
                  имеющую длину больше 128 символов.
                  Система помощи выводит на дисплей заголовки
                  в прямоугольнике списка,  когда пользователь
                  ищет ключевое слово или вводит закладку.
     Форматиро-   Элементы сноски заголовка не могут  формати-
     вание        роваться.
  ───────────────────────────────────────────────────────────

                   Присваивание ключевых слов

     Help позволяет пользователю искать темы с помощью исполь-
зования ключевых слов,  присвоенных темам. Когда  пользователь
ищет слово посредством ключевого слова, Help сопоставляет вво-
димое пользователем слово с  ключевыми  словами,  присвоенными
особым темам. Затем Help перечисляет сопоставляемые темы по их
заголовкам в Search диалоговом окне.  Так как поиск  ключевого
слова часто  является быстрым способом получения пользователем
доступа к Help темам, то возможно, Вы пожелаете присвоить клю-
чевые слова большинству тем в Вашей Help системе.
     Примечание. Вы должны определить только сноску  ключевого
слова, если тема имеет сноску заголовка, так как заголовок те-
мы будет появляться в поисковом  диалоге,  когда  пользователь
ищет ключевое слово.
     Для того, чтобы присвоить ключевое слово теме:
     1. Поместите курсор слева от заголовка темы.
     2. Вставьте  прописную  букву  К,  как  справочную  метку
сноски.
     Заметим, что знак К в качестве верхнего  индекса  появля-
ется вслед за заголовком.
     3. наберите ключевое слово или ключевые слова в  качестве
сноски.
     Убедитесь в том,  что между знаком К  и  ключевым  словом
должен быть только один пробел.
     Если Вы добавляете более, чем одно ключевое слово, разде-
лите их точкой с запятой.
     Следующее выражение является примером  ключевых  слов для
темы:
       К open;opening;text file;ASCII;existing;text
       only;documents;
     Всякий раз, как пользователь выполняет поиск по любому из
этих ключевых слов, соответствующие заголовки появляются в ок-
не списка. Более, чем одна тема может иметь одно и то же клю-
чевое слово.
     При введении ключевых слов помните о следующих  ограниче-
ниях:
     Элемент           Ограничения
  ───────────────────────────────────────────────────────────
  Символы           Ключевые слова могут включать любой  сим-
                    вол  ANSI, включая символ  штриха. Макси-
                    мальная длина для ключевых слов равна 255
                    символов.
                    Пробел, включаемый в ключевую фразу  счи-
                    тается символом, что позволяет фразам быть
                    ключевыми словами.
  Фразы             Help ищет любое слово в определенной фра-
                    зе.
  Форматирование    Ключевые слова не форматируются.
  Чувствительность  Ключевые  слова не  чувствительны  к  ре-
  к регистру        гистру.
  Пунктуация        За исключением разделителей в  виде точки
                    с запятой Вы можете использовать  пункту-
                    ацию.
  ───────────────────────────────────────────────────────────

         Создание многочисленных таблиц ключевых слов

     Многочисленные таблицы ключевых слов пригодны для допуска
программы к поиску тем,  которые определяюся в  альтернативных
таблицах ключевых слов.  Вы можете использовать дополнительную
таблицу ключевых слов,  позволяющую пользователям,  знакомым с
ключевыми словами  в  других  программах,  обнаруживать  соот-
ветствующие ключевые слова в Вашей программе.
     Создаваемые дополнительные  таблицы  ключевых  слов - это
процесс из двух частей.  В первой части MULTIKEY опция  должна
помещаться в  разделе  [Options]  файла проекта.  Более полная
информация о MULTIKEY опции находится в разделе главы 4  "Мно-
гочисленные таблицы ключевых слов: Опция MULTIKEY".
     Во второй части темы, связанные с дополнительной таблицей
ключевых слов, должны создаваться и отмечаться. Сноски присва-
иваются таким же образом,  как и обычные сноски ключевых слов,
за исключением тех случаев,  когда используются буквы, которые
определяются опцией MULTIKEY.  С этой версией  Help  Compiler,
используемая сноска  ключевых  слов  чувствительна к регистру.
Поэтому нужно следить за использованием одинакового  регистра,
обычно прописного верхнего регистра, для Вашей сноски ключево-
го слова.  Убедитесь,  что только одна тема связана с ключевым
словом. Help не выводит на дисплей обычное диалоговое окно по-
иска для многократного поиска ключевого слова.  Вместо  этого,
она выводит  на дисплей первую тему,  обнаруживаемую с помощью
ключевого слова.  Если Вы желаете, чтобы темы в Вашей дополни-
тельной таблице ключевых слов появлялись в обычной Help табли-
це ключевых слов,  то Вы также должны определить сноску "К"  и
данное ключевое слово.
     Программа, разрабатываемая Вами для Help, может затем вы-
водить на экран Help тему,  связанную с данной строкой в опре-
деленной таблице ключевых слов. Ключевые слова сортируются без
учета регистра для таблицы ключевых слов.  Более подробная ин-
формация по параметрам, передаваемым программой для вызова те-
мы, находящейся в альтернативной таблице ключевых слов,  нахо-
дится в разделе главы 4 "Доступ к дополнительным таблицам клю-
чевых слов".

       Присваивание номеров последовательностям просмотра

     Browse>> и  Browse<< клавиши в прямоугольнике пиктограммы
в Help окне позволяют пользователю передвигаться назад и  впе-
ред между связанными темами. Порядок тем, прослеживаемый поль-
зователями при перемещении от темы к теме, называется "последо-
вательность просмотра". Последовательность просмотра определя-
ется номером последовательности,  установленным  разработчиком
текста Help.
     Для создания последовательностей просмотра в  Help  темах
разработчик текста должен:
     1. Решить какие темы должны группироваться вместе и какой
порядок они  должны  иметь,  когда  рассматриваются в качестве
группы.
     Help обеспечивает   многочисленные   прерывистые   списки
последовательностей.
     2. Закодировать темы для выполнения последовательности.
     Примечание. В  этой  версии  Help  темы,  определенные  в
последовательностях просмотров,   доступны  при  использовании
Browse клавиши в верхней части Help окна.  Будущие версии Help
обычно не  будут  выводить  на  дисплей  клавиши просмотра для
пользователя. Однако,  если Ваш Help  файл  ресурсов  включает
последовательности просмотра, созданные в описанном здесь фор-
мате, эти  будущие  версии  будут  обеспечивать  это  свойство
посредством автоматического   выведения   на   экран   клавиши
просмотра для пользователя.

          Организация последовательностей просмотра

     При организации последовательностей просмотра разработчик
текста должен организовывать темы в таком порядке,  чтобы соз-
давался смысл для пользователя. Темы могут выстраиваться в ал-
фавитном порядке  в  пределах темы,  в порядке повышения труд-
ности или в смысловом порядке,  который кажется   естественным
для данной программы. Следующий пример иллюстрирует последова-
тельности просмотра для команд  меню,  используемых  в  данной
программе. Разработчик  текста Help субъективно определяет по-
рядок, создающий наибольший смысл с процедурной точки  зрения.
Конечно, Вы можете избрать другой порядок.
     SampleApp Commands
         File Menu - commands:005
            New Command - file_menu:005
            Open Command - file_menu:010
            Save Command - file_menu:015
            Save As Command - file_menu:020
            Print Command - file_menu:025
            Printer Setup Command - file_menu:030
            Exit Command - file_menu:030
         Edit Menu - commands:010
            Undo Command - edit_menu:025
            Cut Command - edit_menu:015
            Copy Command - edit_menu:010
            Paste Command - edit_menu:020
            Clear Command - edit_menu:005
            Select All Command - edit_menu:030
            Word Wrap Command - edit_menu:035
            Type Face Command - edit_menu:040
            Point Size Command - edit-menu:045
         Search Menu - commands:015
            Find Command - search_menu:005
            Find Next Command - search_menu:010
            Previous Command - search_menu:015
         Window Menu - commands:020
            Title Command - window_menu:005
            Cascade Command - window_menu:010
            Arrange Icons Command - window_menu:015
            Close All Command - window_menu:020
            Document Names Command - window_menu:025
     Каждая строка  состоит  из  имени  списка  последователь-
ности , за которым следует двоеточие  и  номер  последователь-
ности. Имя списка последовательности  является необязательным.
Если последовательность не имеет имени списка, как в последую-
щем примере, компилятор помещает тему в "пустой" список:
       Window Menu - 120
     Заметим, что используемые номера в примере последователь-
ности просмотра начинаются с 005 и наращиваются на 005.  Обыч-
но, хорошей  практикой является перескок на один или более но-
меров последовательности так, чтобы Вы могли позже, если необ-
ходимо, добавить новые темы. Пропущенные номера не имеют  зна-
чения для Help Compiler, важен только их порядок.
     Номера последовательностей  устанавливают  порядок  тем в
пределах списка последовательностей просмотра. Номера последо-
вательностей могут состоять из любых алфавитно-цифровых симво-
лов. Во  время  процесса  компилирования  строки  сортируются,
используя ASCII   методику  сортировки,  которая  не  является
числовой сортировкой.
     Как алфавитные,  так  и цифровые части последовательности
могут состоять из нескольких символов; однако, их длина должна
быть согласована по всем тематическим файлам.  Если Вы исполь-
зуете только номера в строках, убедитесь, что все строки имеют
одну и  ту же длину;  в противном случае,  более высокий номер
последовательности мог бы появиться перед более низким номером
последовательности в определенных случаях. Например, номер 100
в цифровом значении выше,  чем 99, однако 100 будет появляться
перед 99  при сортировке,  используемой Help,  потому что Help
сравнивает первые две цифры в строках.  Для того, чтобы сохра-
нить темы  в их точном цифровом порядке,  Вы должны сделать 99
трехцифровой строкой: 099.

          Кодирование последовательностей просмотра

     После определения как группировать и упорядочивать  темы,
закодируйте последовательность  посредством  присвоения  соот-
ветствующего имени списка последовательности и  номера  каждой
теме, как следует ниже:
     1. Поместите курсор слева от заголовка темы.
     2. Вставьте знак плюс (+), как справочную метку сноски.
     Заметим, что знак плюс (+) в  качестве  верхнего  индекса
появляется вслед за заголовком.
     3. Наберите номер последовательности,  используя алфавит-
но-цифровые символы.
     Например, следующая сноска  определяет  номер  последова-
тельности просмотра для темы меню Edit в предшествующем приме-
ре последовательности просмотра:
              + commands:010
     Хотя может быть более легким перечисление тем в  пределах
файла в  том  же  самом  порядке,  в  котором они появляются в
последовательности просмотра,  но в  этом  нет  необходимости.
Компилятор сам упорядочивает последовательность.

          Создание перекрестных ссылок между темами

     Перекрестные ссылки  или  "переходы"  являются специально
закодированными словами или  фразами,  которые  связываются  с
другими темами. Хотя Вы указываете термины перехода зачеркива-
нием или двойным подчеркиванием в тематическом файле,  они по-
являются в Help окне подчеркнутыми.  В дополнение к этому тер-
мины перехода появляются в цвете на цветных  системах.  Напри-
мер, зачеркивание  (двойное  подчеркивание в Word для Windows)
появляется как New Command в зеленом тексте для пользователя.
     Для того,  чтобы  закодировать слово или фразу в качестве
перехода в тематическом файле:
     1. Поместите курсор в точке текста, где Вы желаете ввести
термин перехода.
     2. Выберите свойство зачеркивания (или двойного подчерки-
вания) Вашего редактора.
     3. Наберите  слово  перехода  или слова перехода в режиме
зачеркивания.
     4. Отключите  зачеркивание и выберите свойство редактора,
позволяющее скрывать текст.
     5. Наберите контекстную строку,  присваиваемую теме,  ко-
торая является целью перехода.
     При кодировании переходов помните, что:
     - Между зачеркнутым  (или  подчеркнутым  двойной  линией)
текстом и скрытым текстом не должно быть пробелов.
     - Закодированные пробелы перед или после терминов перехо-
да не допустимы.
     - Метки параграфов должны вводится как простой текст.

                     Определение терминов

     Большинство тематических содержат слова или фразы,  кото-
рые требуют дальнейшего определения.  Чтобы получить определе-
ние слова или фразы,пользователь вначале выбирает слово,а  за-
тем нажимать на кнопку мышки или клавишу Enter,  вызывая появ-
ление определения в окне внутри Help окна.  Разработчик текста
Help решает какие слова определить, учитывая категорию пользо-
вателей,  которые будут использовать это  приложение  и  какие
термины могут  уже быть знакомыми.
     Примечание. Свойство поиска нельзя ограничивать определе-
ниями. С помощью возможности временного выведения информации в
окне, Вы можете посмотреть подсказку по процедуре  или  другую
подходящую информацию для пользователя.
     Определение термина требует, чтобы Вы:
     - Создали тему, которая определяет этот термин.
     Определяемая тема  должна  включать  контекстную  строку.
Смотрите раздел "Присваивание контекстных строк".
     - Обеспечили перекрестную ссылку  для  определения  темы,
когда бы не встретился этот термин.
     Вам не нужно определять одно и то же слово несколько  раз
в одной и той же теме,  кроме его первого появления. Кроме то-
го, примите во внимание количество цветного текста,  создавае-
мого в Help окне.
     Смотрите следующий раздел "Кодирование определений".

                   Создание тем определений

     Вы можете организовать темы определений  любым  способом.
Например, Вы можете включить в каждую тему определений темати-
ческий файл,  который упоминает термин. Или можно организовать
все определения  в одном тематическом файле и обеспечить поль-
зователя непосредственным доступом к нему.  Helpex  использует
последний метод, все определения содержатся в TERMS.RTF файле.
Организация тем определений в один файл обеспечивает Вас  сло-
варем и позволяет легко производить изменения.

                    Кодирование определения

     После того,  как  созданы  темы определений,  закодируйте
термины, по мере их появления, следующим образом:
     1. Поместите точку вставки там,  где Вы желаете поместить
термин,который требует определения.
     2. Выберите свойство подчеркивания Вашего редактора.
     3. Наберите термин.
     4. Отключите  свойство  подчеркивания и выберите свойство
редактора по созданию невидимого текста.
     5. Наберите контекстную строку, присвоенную теме, которая
содержит определения термина.
     Рисунок 3.2 включает определение термина "clipboard" (бу-
фер вырезанного изображения).
         Рисунок 3.2 Определение, как оно появляется
                        в окне поиска
╔═[■]══════════════════════════════════════════════[°][∙]═╗
║        winhelp Windows Help  -  WINHELP.HLP             ║
║─────────────────────────────────────────────────────────║
║ File  Edit  Bookmark  Help                              ║
║─────────────────────────────────────────────────────────║
║ Index  Back  Browse  Browse  Search                     ║
║─────────────────────────────────────────────────────────║
║           или нажмите клавишу или комбинацию клавиш, о  ▒
║           которых Вы хотите узнать более подробно       ▒
║           Это свойство доступно только в определенном   ■
║          ┌─────────────────────────────────────────────────┐
║          │  Clipboard (буфер вырезанного изображения)      │
║          │  Зона временного хранения для удаляемых или     │
║          │  копируемых текста или графики. Вы можете встав-│
║          │  лять содержание этого буфера в Windows програм-│
║          │  му.                                            │
║          └─────────────────────────────────────────────────┘
║ Ctrl+Ins   Копирует Help тему в Clipboard, таким образом▒
║            Вы можете вставлять ее в другую программу или▒                                             ▒
║            документ.                                    ▒
║ Alt+F4     Закрывает Help окно.                         ▒
╚<■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒>─┘

               Вставка графических изображений

     Растровые графические изображения можно помещать в  Help
темы, используя один из двух методов. Если Ваша система подго-
товки текстов обеспечивает вставку Windows 2.1 или Windows 3.0
графики непосредственно в документ,  то Вы можете просто вста-
вить Ваши растры в каждый тематический файл. Альтернативно, Вы
можете сохранить  каждый  растр в отдельном файле и определить
файл по имени в том месте, где Вы желаете, чтобы он появился в
Help тематическом файле. Второй из этих методов вставки графи-
ки называется "растры посредством ссылок". В следующем разделе
описывается процесс   вставки   растров   непосредственно  или
посредством ссылки в Ваши Help темы.

                  Создание и захват растров

     Вы можете создать Ваши  растры,  используя  любые  графи-
ческие средства,  пока  получаемые изображения могут выводится
на дисплей в Windows среду. Затем каждое графическое изображе-
ние может  копироваться  в Windows буфер вырезанного изображе-
ния. Будучи в буфере вырезанного  изображения,  графика  может
вставляться в графический редактор,  такой как Paint и модифи-
цироваться или доводиться, когда необходимо.
     Windows Help 3.0 обеспечивает цветной растр.  Однако, для
будущей совместимости у Вас может возникнуть необходимость ог-
раничить графику монохромным форматом. Если Вы создаете монох-
ромное изображение,  то  Вам,  возможно,  потребуется  вручную
настраивать элементы  исходной графики,  которые первоначально
отличались цветами, были черными, белыми или комбинацией белых
и черных пикселов.
     Когда вы удовлетворены внешним видом  растра,  Вы  можете
или сохранить  его как файл,  чтобы использовать его как растр
по ссылке, или можно скопировать его в буфер вырезанного изоб-
ражения и  вставить его в систему подготовки текстов.  Если Вы
сохраняете графику как файл,  то необходимо вначале задать его
размер в графическом редакторе так,  чтобы только интересующая
область сохранялась для вывода на экран в Help окне. Чем более
плотно Вы  заполняете  Ваше  изображение,  тем более близко Вы
должны разместить текст,  следующий  за  изображением.  Всегда
сохраняйте (или  преобразуйте  и сохраняйте,  если необходимо)
графику Windows в .BMP формате.
     Растровые изображения  должны создаваться в том же экран-
ном режиме,  который Вы предназначаете для использования Help,
когда темы выводятся на экран. Если Help файлы будут выводится
на экран в различных режимах,  то растры не  смогут  сохранять
одинаковое соотношение аспектов или информацию,  как их исход-
ные изображения.

             Размещение растров с использованием
            графических систем подготовки текстов

     Простейшим способом для точного размещения растров в Help
темах является использование  графической  системы  подготовки
текстов. Microsoft Word для Windows обеспечивает прямое импор-
тирование растров из буфера  вырезанного  изображения.  Просто
вставляйте графическое  изображение  там,где Вы хотите,  чтобы
оно появлялось в Help теме. Вы можете форматировать текст так,
чтобы он располагался ниже или вдоль растра. Когда Вы сохраня-
ете Help тематический файл в RTF файл, вставляемый растр также
преобразуется и  будет  автоматически  включаться  в Help файл
ресурса.

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

     Если Ваша система подготовки текста на  может  импортиро-
ваться и выводиться на экран непосредственно, то Вы можете за-
дать расположение этого растра, который Вы сохранили как файл.
Чтобы вставить  ссылку  на  растр  в  Help тематическом файле,
вставьте одно из следующих предложений туда,  где  Вы  хотите,
чтобы растр появился  в теме:
     {bmc filename.bmp}
     {bml filename.bmp}
     {bmr filename.bmp}
     Примечание. Не задавайте полный путь для filename .  Если
Вам необходимо направить компилятор к растру в позиции, отлич-
ной от корневого справочника для построения,  то задайте абсо-
лютный путь для растра в разделе [Bitmaps] файла проекта.
     Аргумент bmc означает "растровый символ",  указывая,  что
растр, на который есть ссылка,  будет обрабатываться также как
символ, помещенный  в  тематическом  файле в той же позиции на
строке. Текст может предшествовать или следовать за растром на
той же  строке и длина строки будет определяться в зависимости
от размера символов (включая символ растра) на строке.  Не за-
давайте отрицательную длину строки для параграфа с изображени-
ем растра,  иначе изображение  может  неумышленно  перекрывать
текст над ним, когда изображение выводится на экран Help. Ког-
да Вы используете аргумент  bmc,  нет  автоматического  цикли-
ческого перехода текста в графическом изображении. Текст будет
следовать за растром, расположенным в основной линии.
     Аргумент bml  определяет,  что  растр появляется на левой
границе с автоматическим циклическим переходом текста на  пра-
вой границе  изображения.  Аргумент bmr определяет,  что растр
появляется на правой границе с текстом,  находящимся слева  от
него. Имена файлов растра должны быть такие же, как в списке в
разделе [Bitmaps] Help файла проекта.  Раздел [Bitmaps] описан
в главе 4 "Построение Help файла".
     Примечание. Многочисленные ссылки на растр одного и  того
же имени относятся к одному и тому же растру при выводе на эк-
ран Help файла. Это означает, что растровые ссылки могут появ-
ляться в  Вашей  Help системе без заметного увеличения размера
Help файла ресурсов.
     На рисунке  3.3  показано размещение трех растров со свя-
занным текстом в теме при выводе на экран в Help.
            Рисунок 3.3 Help тематический дисплей,
            показывающий растры посредством ссылки
 ╔═[■]════════════════════════════════════════════════[°][∙]═╗
 ║                       Help Example                        ║
 ║────────────╔═[■]════════════════════════════════[°][∙]═╗──║
 ║ File  Edit ║     Help Example Help - helpex            ║  ║
 ║────────────║───────────────────────────────────────────▒──║
 ║            ║  File Edit Bookmark Help                  ▒  ║
 ║            ║───────────────────────────────────────────▒  ║
 ║            ║ Index Back Browse Browse Search           ▒  ║
 ║            ║───────────────────────────────────────────▒  ║
 ║            ║Bitmaps by Reference                       ■  ║
 ║            ║                                           ▒  ║
 ║            ║Растр может помещаться в последовательности▒  ║
 ║            ║точно так же как любой другой символ       ▒  ║
 ║            ║  WinWord                                  ▒  ║
 ║            ║   Вы также можете поместить растр у левого▒  ║
 ║            ║   поля Help окна.Текст будет автоматически▒  ║
 ║            ║   циклически переходить на правой границе ▒  ║
 ║            ║   растра.                                 ▒  ║
 ║            ║Или  растр может  находится у правого поля ▒  ║
 ║            ║окна,а текст будет автоматически циклически▒  ║
 ║            ║переходить у левого края.                  ▒  ║
 ║            ╚═══<■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒>─┘  ║
 ║                                                           ║
 ╚══════════════════════════════════════════════════════════─┘

               Управление тематическими файлами

     Help тематические файлы могут сохраняться в  определенном
графическом формате  системы подготовки текстов или в RTF.Если
Вы всегда сохраняете файлы в RTF,а позже Вам  необходимо  сде-
лать изменение  ,то система подготовки текстов может предоста-
вить дополнительное время для интерпретирования  формата,когда
он перезагружает  файл.Если  Вы  предчувствуете многочисленные
изменения во время Help разработки,то может возникнуть необхо-
димость минимизировать эти задержки посредством сохранения те-
матических файлов как в определяемом по умолчанию  формате,так
и в RTF формате с различными расширениями файлов для их разли-
чия.Компилятору требуется только RTF файлы и Вы  будете  иметь
более быстрый доступ к исходным файлам для изменений.Для боль-
шого проекта эта практика может сохранить  значительное  коли-
чество времени разработки.

                  Отслеживание файлов и тем

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

                 Создание Help трассировщика

     Хотя важно,  чтобы  Вы трассировали тематические файлы во
время цикла разработки,  средство трассировки может быть любым
подходящим для Ваших потребностей. Вы можете сохранить текущий
список тем в ASCII текстовом файле,  в Quattro Pro электронной
таблице или в другом формате.
     Когда Вы или другой разработчик текста создаете или  исп-
равляете тему,  Вы должны модифицировать Help файл трассировки
для отражения изменения.  Содержание файла трассировки опреде-
лено не  жестко,  но  должно содержать записи для имени файла,
контекстную строку, заголовок, последовательность просмотров и
ключевые слова.   Если  ваша  программа  содержит  контекстно-
чувствительное свойство Help, то, возможно, Вы захотите отсле-
дить контекстно-чувствительную информацию.Этот элемент необхо-
дим только если Вы присваиваете номера контекста темам в  Help
файле проекта.  Можно  также  включить необязательную информа-
цию, например,  созданные данные, модифицированные данные, ин-
формацию о  статусе  и  авторе,  если Вы хотите проследить все
аспекты процесса разработки системы Help.  Как Вы  организуете
эту информацию зависит только от Вас.
     Следующий пример текстового файла и  рабочий  листок  ил-
люстрируют как  трассировщик  должен  быть организован для тем
Help системы.  Примеры  показывают  и  меню   Help,   и   кон-
текстно-чувствительные Help записи тематических файлов. Типич-
но, одни и те же темы,  к которым пользователь имеет доступ во
время команды выбора из Help меню, могут быть доступными с по-
мощью контекстно-чувствительного свойства Help. Темы с запися-
ми в  контекстной  колонке идентификации используются для кон-
текстно-чувствительной помощи, а также для Help меню. Заметим,
что некоторые    темы   имеют   более   одного   номера   кон-
текстно-чувствительной помощи.  Это дает возможность  выводить
темы на  экран,  когда  пользователь  нажимает кнопку мышки на
различных районах экрана.
      Рисунок 3.4 Пример текстового файла трассировщика

Ctx.String    Title               Browse Seg.   Key Words
hlpidx_idx_mp Multipad Help Index
mc_cmd_mp     Multipad Commands   commands:0001 commands;menus
fm_cmd_mp     File Menu           commands:0004 commands;menus;files;
                                                documents
nc_cmd_mp     New command         commands:0008 commands;new files;
                                                new documents
oc_cmd_mp     Open Command        commands:0012 commands;files;open;
                                                documents;read only
sac_cmd_mp    Save Command        commands:0016 commands;file;save;save as;
                                                documents;files
sasc_cmd_mp   Save As Command     commands:0020 commands;file;save as;save;
                                                documents;files
ptc_cmd_mp    Print Command       commands:0024 commands;files;print;
                                                document;files
psc_cmd_mp    Print Setup Command commands:0028 commands;file;printer setup;
                                                print

    Рисунок 3.5 Пример рабочего листка Help трассировщика
┌──┬─────────────┬───────────────────┬─────────────┬───────────────────────────┬─
│  │     A       │        B          │      C      │           D               │
├──┼─────────────┼───────────────────┼─────────────┼───────────────────────────┼─
│ 1│Ctx.String   │Title              │Browse Seg.  │Key Words                  │
├──┼─────────────┼───────────────────┼─────────────┼───────────────────────────┼─
│ 2│hlpidx_idx_mp│Multipad Help Index│             │                           │
├──┼─────────────┼───────────────────┼─────────────┼───────────────────────────┼─
│ 3│mc_cmd_mp    │Multipad Commands  │commands:0001│commands;menus             │
├──┼─────────────┼───────────────────┼─────────────┼───────────────────────────┼─
│ 4│fm_cmd_mp    │File Menu          │commands:0004│commands;menus;files;      │
├──┼─────────────┼───────────────────┼─────────────┼───────────────────────────┼─
│ 5│             │                   │             │documents                  │
├──┼─────────────┼───────────────────┼─────────────┼───────────────────────────┼─
│ 6│nc_cmd_mp    │New command        │commands:0008│commands;new files;        │
├──┼─────────────┼───────────────────┼─────────────┼───────────────────────────┼─
│ 7│             │                   │             │new documents              │
├──┼─────────────┼───────────────────┼─────────────┼───────────────────────────┼─
│ 8│oc_cmd_mp    │Open Command       │commands:0012│commands;files;open;       │
├──┼─────────────┼───────────────────┼─────────────┼───────────────────────────┼─
│ 9│             │                   │             │documents;read only        │
├──┼─────────────┼───────────────────┼─────────────┼───────────────────────────┼─
│10│sac_cmd_mp   │Save Command       │commands:0016│commands;file;save;save as;│
├──┼─────────────┼───────────────────┼─────────────┼───────────────────────────┼─
│11│             │                   │             │documents;files            │
├──┼─────────────┼───────────────────┼─────────────┼───────────────────────────┼─
│12│sasc_cmd_mp  │Save As Command    │commands:0020│commands;file;save as;save;│
├──┼─────────────┼───────────────────┼─────────────┼───────────────────────────┼─
│13│             │                   │             │documents;files            │
├──┼─────────────┼───────────────────┼─────────────┼───────────────────────────┼─
│14│ptc_cmd_mp   │Print Command      │commands:0024│commands;files;print;      │
├──┼─────────────┼───────────────────┼─────────────┼───────────────────────────┼─
│15│             │                   │             │document;files             │
├──┼─────────────┼───────────────────┼─────────────┼───────────────────────────┼─
│16│psc_cmd_mp   │Print Setup Command│commands:0028│commands;file;printer setup│
├──┼─────────────┼───────────────────┼─────────────┼───────────────────────────┼─
│17│             │                   │             │print                      │
├──┼─────────────┼───────────────────┼─────────────┼───────────────────────────┼─

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

                      Резюме

     В этой главе описывалось как разрабатывать,  кодировать и
отслеживать Help тематические файлы.  Более подробная информа-
ция о  построении Help файла дается в главе 4 "Построение Help
файла".













                           ГЛАВА 4

                   ПОСТРОЕНИЕ  HELP  ФАЙЛА

     После того,  как разработаны тематические файлы для Вашей
Help системы, вы готовы к созданию Help файла проекта и прого-
ну построения для проверки Help файла.  Help файл проекта  со-
держит всю информацию, которая требуется компилятору для  при-
ращения тематических  файлов  помощи  в  бинарный  Help   файл
ресурсов.
     Вы используете  Help  файл  проекта  для  подсказки  Help
Compiler о  том,  какие  тематические файлы включать в процесс
построения. Информация в Help файле проекта также дает возмож-
ность компилятору  отображать особые темы в номерах контекстов
(для контекстно-чувствительной части Help).
     После того,  как Вы откомпилировали Ваш Help файл, разра-
ботчики создают программу таким  образом,  чтобы  пользователь
мог иметь к ней доступ.
     В данной главе описывается следующее:
     - Создание Help файла проекта
     - Компилирование Help файла
     - Создание программы для доступа к Help
     Хотя большинство примеров в этой книге написаны на С,  Вы
также можете делать те же самые задачи в Turbo Pascal, кодовые
примеры для обоих языков включены в Ваши диски  Borland  прог-
раммного продукта.

                 Создание Help файла проекта

     Вы используете  Help файл проекта для контроля,  как Help
Compiler создает Ваши тематические файлы.Help файл проекта мо-
жет содержать  вплоть  до  шести сегментов,  которые выполняют
следующие функции:
  Сегмент        Функция
 ───────────────────────────────────────────────────────────
  [Files]     Определяет тематические файлы,  которые  должны
              включаться в построение.
              Этот сегмент является обязательным.
  [Options]   Определяет уровень сообщаемой ошибки,  темы, ко-
              торые должны быть включены в построение,справоч-
              ник, в котором находятся имена файлов и располо-
              жение Вашего Help индекса.
              Этот сегмент может быть необязательным.
  [BuildTags] Определяет действительные теги построения. Этот
              сегмент является необязательным.
  [Alias]     Присваивает одну или  более  контекстных  строк
              одной и той же теме.  Этот  сегмент является не-
              обязательным.
  [Map]       Связывает  контекстные   строки  с  контекстными
              номерами. Этот сегмент является необязательным.
  [Bitmaps]   Определяет растровые файлы, которые должны вклю-
              чаться  в  построение. Этот сегмент является не-
              обязательным.
 ───────────────────────────────────────────────────────────
     Вы можете использовать любой ASCII текстовый редактор для
создания Вашего  Help  файла  проекта.  Расширением Help файла
проекта является.HPJ.  Если Вы не используете расширение  .HPJ
на командной строке HC, то компилятор разыскивает файл проекта
с этим расширением перед тем,  как загрузить файл. .HPJ выход-
ной файл будет иметь то же самое имя, что и .HPJ файл.
     Порядок различных сегментов в пределах Help файла проекта
является произвольным,  с одним исключением:  при всех обстоя-
тельствах [Alias] сегмент должен предшествовать [Map] сегменту
(если используется [Alias] сегмент).
     Имена сегментов помещаются в квадратных скобках с исполь-
зованием следующей синтаксической структуры:
          [ сегмент - имя]
     Вы можете  использовать точку с запятой для указания ком-
ментария в файле проекта.  Компилятор игнорирует весь текст от
точки с запятой до конца строки, где они находятся.

        Определение тематических файлов: Сегмент Files

     Используйте сегмент  [Files] Help файла проекта для пере-
числения всех тематических файлов,  которые Help Compiler дол-
жен обрабатывать  для создания Help файла ресурсов.  Help файл
проекта должен иметь сегмент [Files].
     Следующий пример показывает формат [Files] сегмента:
     [Files]
     HELPEX.RTF ;Основные темы для Helpex программы
     TERMS.RTF  ;Термины поиска для Helpex программы
     Используя путь  доступа,  определенный ROOT опцией,  Help
Compiler находит и обрабатывает все файлы  ,  перечисленные  в
этом разделе файла проекта.  Если файл не находится на опреде-
ленном пути доступа и не может быть найден,  то компилятор ге-
нерирует ошибку. Более подробная информация о ROOT опции можно
найти в разделе "Определение корневого каталога:  корневая оп-
ция".
     Вы можете включить файлы в процесс построения,  используя
управляющую команду    #include    .    Управляющая    команда
#include использует следующий синтаксис:
     #include <filename>
     Вы должны включить угловые  скобки  вокруг  имени  файла.
Знак фунта (#) должен быть первым символом в строке. Имя файла
должно определять полный путь доступа либо путь доступа, опре-
деленный ROOT  опцией или абсолютным каталоговым путем доступа
к файлу.
     Вы можете обнаружить ,  что легче создать текстовый файл,
чем перечислить все файлы в Help проекте и включить такой файл
в построение, как например в этом примере:
     [Files]
     #include <hlpfiles.inc>

       Определение тегов построения: Сегмент BuildTags

     Если Вы  кодируете  теги  построения в Ваших тематических
файлах, используйте [BuildTags] сегмент Help файла проекта для
определения всех  действительных тегов построения особого Help
проекта. Сегмент [BuildTags] является необязательным.
     Следующий пример  показывает  формат [BuildTags] сегмента
в примере Help файла проекта:
     [BuildTags]
     WINENV     ;темы для включения в Windows построение
     DEBUGBUILD ;темы для включения в построение отладки
     TESTBUILD  ;темы для включения в минипостроение для тести-
                 рования
     Сегмент [BuildTags] может включать до 30  тегов  построе-
ния. Теги построения  не чувствительны к регистрам и не должны
содержать пробелы. В этом сегменте на строку допускается толь-
ко один тег построения.  Компилятор будет генерировать сообще-
ние об ошибке,  если что-нибудь иное,  чем  комментарий  пере-
числяется после тега построения в сегменте [BuildTags].
     Более подробную информацию о тегах построения  в  темати-
ческих файлах  можно найти в разделе главы 3 "Присвоение тегов
построения".

              Определение опций: Сегмент Options

     Используйте [Options] сегмент Help файла проекта для  оп-
ределения следующих опций:
  Опция         Значение
 ───────────────────────────────────────────────────────────
  BUILD      Определяет какие файлы компилятор включает в по-
             строение.
  COMPRESS   Задает уплотнение Help файла ресурсов.
  FORCEFONT  Определяет создание Help файла ресурсов, исполь-
             зуя только один шрифт.
  INDEX      Определяет контекстную строку Help индекса.
  MAPFONT-   Определяет  отображение  определенных  размеров
  SIZE       шрифта в различные размеры.
  MULTIKEY   Определяет альтернативное соответствие  ключево-
             го слова для тем.
  ROOT       Разрабатывает  каталог, который должен использо-
             ваться для Help построения.
  TITLE      Определяет заголовок,показанный для Help системы.
  WARNING    Указывает вид сообщения об ошибке, которое сооб-
             щает компилятор.
 ───────────────────────────────────────────────────────────
     Эти опции могут появляться в любом  порядке  в  [Options]
сегменте. Сегмент [Options] не является обязательным.
     Подробные объяснения имеющихся опций следуют далее.

        Определение сообщения об ошибке: Опция Warning

     Используйте опцию WARNING для определения количества  от-
ладочной информации,  о  которой сообщает компилятор.  WARNING
опция имеет следующий синтаксис:
     WARNING = level (уровень)
     Вы можете установить WARNING опцию на любом из  следующих
уровней:
  Уровень       Сообщаемая информация
 ───────────────────────────────────────────────────────────
   1      Только очень строгие предупреждения.
   2      Промежуточный уровень предупреждений.
   3      Все предупреждения. Это уровень, определенный по
          умолчанию, если не определяется опция WARNING.
 ───────────────────────────────────────────────────────────
     Следующий пример определяет промежуточный уровень сообща-
емой ошибки:
        [OPTIONS]
        WARNING=2
     Компилятор сообщает  об  ошибках  в  стандартный выходной
файл, обычно экран.  Вы можете перенаправить ошибки в дисковый
файл так, чтобы Вы могли просмотреть его, когда Вы отлаживаете
Help систему.  Следующий пример показывает перенаправление вы-
вода экрана компилятора в файл:
        HC HELPEX > errors.out
     Намек: Используйте клавишу акселератора DOS CONTROL+PRINT
SCREEN перед тем,  как начнете Вашу компиляцию для  эхоошибок,
которые появляются  на  экране  для Вашего принтера.  Наберите
снова CONTROL+PRINT SCREEN для остановки посылки информации на
принтер.

           Определение тем построения: Опция Build

     Если Вы включили теги построения в Ваши тематические фай-
лы, используйте BUILD опцию для определения, какие темы услов-
но включаются  в  построение.  Если Ваши тематические файлы не
имеют тегов построения,  то опустите опцию BUILD из  [Options]
сегмента.
     Примечание. Все теги построения  должны  перечисляться  в
[BuildTags] сегменте файла проекта, независимо от того, объяв-
ляет или нет данная условная компиляция теги.
     Более подробную  информацию о присвоении тегов построения
темам в Help тематических файлах смотрите в главе 3  "Создание
Help тематических фалов".
     Строка опции BUILD использует следующий синтаксис:
        BUILD = expression (выражение)
     Выражения BUILD не могут превышать в длину 255 символов и
должны вводиться только в одну строку. BUILD выражения исполь-
зуют булеву логику для определения какие темы в пределах опре-
деленных Help тематических файлов компилятора будут включаться
в построение.  Компилятор оценивает все  выражения  построения
слева направо.  Обозначениями  языка  (перечисленные в порядке
старшинства от наивысших к самым низшим) являются:
     Обозначение         Описание
 ───────────────────────────────────────────────────────────
     <tag>           Тег построения
     ()              Круглые скобки
     ~               Оператор отрицания
     &               Оператор И
     │               Оператор ИЛИ
 ───────────────────────────────────────────────────────────
     Например, если Вы закодировали теги построения, названные
WINENV,APP1 и TEST_BUILD в Ваших тематических  файлах,  то  Вы
могли бы  включить  одно  из  следующих выражений построения в
сегмент [Options]:
  Выражение построения    Построенные темы
 ───────────────────────────────────────────────────────────
  BUILD = WINENV     Только темы, которые имеют тег WINENV
  BUILD = WINENV     Темы, которые  имеют  как WINENV,  так и
  &APP1              APP1 теги
  BUILD = WINENV │   Темы, которые  имеют  либо  WINENV  тег,
  APP1               либо APP1 тег
  BUILD = (WINENV │  Темы, которые  имеют  либо  WINENV, либо
  APP1) & TESTBUILD  APP1    теги  и   которые  также   имеют
                     TESTBUILD тег
  BUILD =~APP1       Темы, которые не имеют APP1 тег
 ───────────────────────────────────────────────────────────

        Определение корневого справочника: Опция ROOT

     Используйте ROOT опцию для обозначения корневого справоч-
ника Help проекта. Компилятор ищет файлы в определенном корне-
вом справочнике.
     ROOT опция использует следующий синтаксис:
        ROOT = partname (имя пути)
     Например, следующая корневая опция определяет, что корне-
вым справочником является \BUILD\TEST на D дисководе:
        [OPTIONS]
        ROOT=D:\BUILD\TEST
     ROOT опция позволяет Вам ссылаться на соответствующие пу-
ти доступа из корневого справочника  Help  проекта.  Например,
следующая запись  в сегменте [Files] относится к соответствую-
щему пути из корневого справочника:
        TOPIC\FILE.RTF
     Для ссылки на файл в фиксированной позиции, независимо от
корневого проекта Вы должны задавать полностью квалифицирован-
ный или "абсолютный" путь,  включая букву драйвера, если необ-
ходимо, как в следующей строке:
        D:\HELPTEST\TESTFILE.RTF
     Если Вы  не включаете ROOT опцию в Ваш Help файл проекта,
то все пути являются соответствующими для текущего  DOS  спра-
вочника.

              Спецификация индекса: Index опция

     Используйте INDEX  опцию  для  идентификации  контекстной
строки Help индекса.  Так как INDEX кнопка  дает  пользователю
доступ к индексу из любого места в Help системе,  то Вы, веро-
ятно, не захотите,  чтобы автор переходил к индексу. Пользова-
тели имеют  доступ  этому  основному  индексу или из Help меню
программы, или посредством выбора INDEX кнопки из Help окна.
     Присваивание контекстной строки в индексной теме сегмента
[Options] позволяет компилятору узнать размещение главного ин-
декса Help тем для приложений Help файла. Если Вы не включаете
Index опцию в сегменте [Options],  то компилятор предполагает,
что первая тема, которая встречается - это индекс.
     Опция Index использует следующий синтаксис:
        INDEX = context-string (контекстная строка)
     Заданная контекстная строка должна  соответствовать  кон-
текстной строке,  которую Вы присвоили Help индексной теме.  В
следующем примере разработчик Help  информирует  компилятор  о
том, что контекстная строка Help индекса является "главным ин-
дексом":
        [OPTIONS]
        INDEX=main_index
     Более подробная  информация  о  присваивании  контекстных
строк приведена в разделе главы  3  "Присваивание  контекстных
строк".

      Присваивание заглавия в Help системе: Опция Title

     Можно присвоить заглавие Вашей Help системе с помощью оп-
ции TITLE.  Заглавие появляется в прямоугольнике заглавия Help
окна со словом "Help",  добавляемом автоматически,  за которым
следует DOS имя Help ресурсного файла.
     Опция TITLE  использует следующий синтаксис:
     TITLE=Help-system-title-name (имя-заглавие-система-Help)
     Заглавия ограничены 32 символами в длину.  Если Вы не за-
даете заглавие,  используя опцию TITLE,  то только слово Help,
за которым следует имя файла системы Help, будет выводиться на
дисплей в прямоугольнике заглавия.  Так как компилятор  всегда
вставляет слово Help,  то нужно это помнить, чтобы не дублиро-
вать это слово в заглавии.

           Преобразование шрифтов: Опция Forcefont

     Можно использовать опцию FORCEFONT для создания Help фай-
ла ресурсов,  который состоит только из одного шрифта. Это по-
лезно, если Вы должны компилировать  Help  систему,  используя
тематические файлы, которые включают шрифты, не поддерживаемы-
ми Вашими пользовательскими системами.
     Опция FORCEFONT использует следующий синтаксис:
        FORCEFONT = fontname (имя шрифта)
     Параметр fontname  -  это  любой  шрифт  системы Windows.
Windows поставляется со следующими шрифтами и размерами:
     - Courier 10,12,15
     - Гельветика 8,10,12,14,18,24
     - Современный
     - Прямой светлый шрифт
     - Script
     - Символьный 8,10,12,14,18,24
     - Tms Rmn 8,10,12,14,18,24
     Имена файлов должны записываться также,  как они записаны
в Font  диалоговом  окне управляющей панели.  Имена шрифтов не
превышают 20 символов в длину.  Если Вы задаете шрифт, который
не распознается  компилятором,  то  он генерирует сообщение об
ошибке и компиляция продолжается с использованием определенно-
го по умолчанию шрифта "Гельветика".
     Примечание. Имя шрифта,  используемое в опции  FORCEFONT,
не может  содержать пробелы.  Следовательно,  шрифт Tms Rmn не
может использоваться с помощью FORCEFONT.

         Изменение размеров шрифта: Опция Mapfontsize

     Размер шрифтов,заданный в тематических файлах,может отоб-
ражаться с  различными размерами с помощью опции MAPFONTSIZE.В
этом случае Вы можете создать и отредактировать текст в разме-
ре,выбранном для  более  раннего просмотра в тематических фай-
лах,а затем компилятор будет определять их размер для действи-
тельного изображения  в Help.Это может быть полезным,если есть
большая разница в размерах между Вашим создаваемым монитором и
предназначенным дисплейным монитором.
     Опция MAPFONTSIZE использует следующий синтаксис:
        MAPFONTSIZE = m[-n]:p
     Параметр m - это размер исходного шрифта,  а параметр p -
это размер  желаемого  шрифта для Help файла ресурсов.  Размер
всех шрифтов в тематических файлах,  которые имеют  размер  m,
изменяются на  p.  Необязательный параметр m позволяет Вам за-
дать диапазон, в котором может отображаться шрифт. Размер всех
шрифтов тематических  файлов,  попадающий  между m и p включи-
тельно, меняется на размер p.  Следующие примеры  иллюстрируют
использование опции MAPFONTSIZE:
     MAPFONTSIZE=12-24:16 ;делает размер шрифтов, имеющих раз-
                           мер от 12 до 24, равным 16.
     MAPFONTSIZE=8:12 ;делает  размер  всех  шрифтов,  имеющих
                       размер 8, равным 12.
     Заметим, что Вы  можете  отобразить  только  один  размер
шрифта или диапазон с каждым MAPFONTSIZE предложением, исполь-
зуемом в сегменте Options.  Если Вы используете  более  одного
MAPFONTSIZE в  предложении,  то  исходный  размер или диапазон
шрифта, заданные в последовательных предложениях, не могут пе-
рекрывать предыдущее отображение.  Например, следующее отобра-
жение будут генерировать ошибку,  когда  компилятор  встречает
второе предложение:
     MAPFONTSIZE=12-24:16 MAPFONTSIZE=14:20
     Так как второе отображение,  показанное в первом примере,
содержит размер,  уже отображенный в  предыдущем  предложении,
компилятор будет игнорировать эту строку. В файле проекта мож-
но задать максимум 5 диапазонов шрифтов.

            Таблица ключевых слов: Опция Multikey

     Опция MULTIKEY задает  символ,  который  будет  использо-
ваться для таблицы дополнительных ключевых слов.
     Опция MULTIKEY будет использовать следующий синтаксис:
        MULTIKEY = footnote-character (сноска-символ)
     Параметр footnote-character является чувствительной к ре-
гистру буквой, которая должна использовать для сноски ключево-
го слова.  Следующий пример иллюстрирует определение  буквы  L
для сноски в таблице ключевых слов:
        MULTIKEY=L
     Примечание. Вы  должны  быть  уверенными в том,  что Ваши
сноски в таблице ключевых  слов  ограничены  одним  регистром,
обычно используются  строчные буквы.  В предыдущем примере для
тем со сноской L ключевые слова будут введены в дополнительную
таблицу ключевых  слов,  а для тем,  которым назначено l,  это
происходить не будет.
     Вы можете  использовать  любой  алфавитно-цифровой символ
для любой таблицы ключевых слов, за исключением "К" и "к", ко-
торые резервируются  для  обычной  таблицы ключевых слов Help.
существует абсолютный предел из 5 таблиц ключевых слов,  вклю-
чая обычную таблицу.  Однако , в зависимости от конфигурации и
структуры Help системы  фактически  имеет  место  практический
предел только из 2 или 3 таблиц. Если компилятор не может соз-
дать дополнительную таблицу,  то при построении лишняя таблица
игнорируется.

                 Сжатие файла: Опция Compress

     Вы можете  использовать опцию COMPRESS ,  чтобы сократить
размер Help файла ресурсов, созданного компилятором.Объем сжа-
тия файла будет изменяться в зависимости от количества, разме-
ра и сложности тем, которые компилируются. В общем, чем больше
файлы Help, тем тем больше они могут быть сжаты.
     Опция COMPRESS имеет следующий синтаксис:
        COMPRESS = TRUE │ FALSE
     Так как Help программа может загружать быстро сжатые фай-
лы, то  очевидным  преимуществом  является создание и поставка
сжатых Help файлов с Вашей программой.  Однако, компилирование
с включенным  сжатием может увеличивать время компиляции из-за
дополнительного времени,  необходимого для  ассемблирования  и
сортировки таблицы ключевых фраз.  Таким образом,  возможно Вы
захотите компилировать без сжатия на ранних стадиях разработки
проекта.
     Опция COMPRESS  заставляет  компилятор  сжимать  систему,
посредством компилирования повторяющихся фраз, найденных внут-
ри исходного файла (файлов). Компилятор создает файл из табли-
цы фраз с расширением .PH,  если такой файл еще не существует.
Если компилятор находит файл с .PH, он будет использовать этот
файл для текущей компиляции. Это используется для того,  чтобы
ускорить сжатие,  когда со времени последней компиляции, изме-
нилось немного текста. Удаление файла ключевых фраз перед каж-
дой компиляцией будет предотвращать использование компилятором
предыдущего файла. Максимальное сжатие будет получаться только
тогда, когда компилятор будет создавать новую таблицу фраз.

      Определение новых контекстных строк: Сегмент Alias

     Используйте сегмент  [Alias]  для  присвоения  одной  или
нескольких контекстных  строк  одному  и тому же тематическому
псевдоимени. Так как контекстные строки должны быть уникальны-
ми для  для  каждой  темы  и не могут использоваться для любой
другой темы в Help проекте,  то сегмент  [Alias]  обеспечивает
способ удаления  или  комбинирования Help тем без записи Ваших
файлов,. Сегмент [Alias] является необязательным.
     Например, если Вы создали тему, которая заменяет информа-
цию в трех других темах и Вы удаляете эти  три  темы,  то  Вам
придется искать  в  файлах неправильную перекрестную ссылку на
удаленные темы.  Вы можете избежать этой проблемы  посредством
использования сегмента [Alias] для присвоения имени новой темы
удаленным темам.  Сегмент [Alias] может также  использоваться,
когда Ваша  прикладная  программа  имеет составные контекстные
идентификаторы, для которых Вы имеете только  одну  тему.  Это
может быть регистр с контекстно-чувствительной Help.
     Каждое выражение в сегменте [Alias] имеет следующий  фор-
мат:
        context_string=alias
     В выражении псевдоимени параметр alias является альтерна-
тивной строкой или псевдоименем, а context_string параметр яв-
ляется контекстной   строкой,  идентифицирующей  особую  тему.
Строка псевдоимени имеет тот же самый формат и следует тем  же
самым обычаям, что и тематическая контекстная строка. То есть,
она не чувствительна к регистру и может  содержать  алфавитные
символы A  - Z,  цифровые символы 0 - 9 и символы точки и под-
черкивания.
     Следующий пример иллюстрирует сегмент [Alias]:
     [Alias]
     sm_key= key_shrtcuts
     cc_key= key_shrtcuts
     st_key= key_shrtcuts;комбинирует в сокращения клавиатуры
     clskey=us_dlog_bxs
     maakey=us_dlog_bxs;реализуется в  использовании темы диа-
                        логового окна
     chk_key=dlogprts
     drp_key=dlogprts
     lst_key=dlogprts
     opt_key=dlogprts
     tbx_key=dlogprts;комбинируется в  части  темы диалогового
                      окна
     frmtxt=edittxt
     wrptxt=edittxt
     seltxt=edittxt;реализуется в редактировании темы текста
     Примечание. Вы можете использовать псевдоимена в сегменте
[Map] Help файла проекта.  Однако,  если Вы так поступите,  то
сегмент [Alias] должен предшествовать сегменту [Map].

    Отображение контекстно-чувствительных тем: Сегмент Map

     Если Ваша Help  система  обеспечивает контекстно-чувстви-
тельную Help, то используйте [Map] сегмент для ассоциации кон-
текстных строк или псевдоимен с  контекстными  номерами.  Кон-
текстный номер  соответствует  значению родительской программы
при передаче Help программе для того, чтобы вывести на дисплей
определенную тему. Этот сегмент является необязательным.
     При написании [Map] сегмента Вы можете сделать следующее:
     - Используйте  как  десятичные ,  так и шестнадцатиричные
номера, отформатированные в стандартной С системе  обозначений
для определения контекстных номеров.
     - Присвойте не более, чем один контекстный номер для кон-
текстной строки или псевдоимени.
     Присвоение одного и того же номера более,  чем одной кон-
текстной строке будет генерировать ошибку компилятора.
     - Разделите  контекстные  номера  и  контекстные   строки
посредством произвольного  количества пробелов,  используя как
символы пробелов, так и символы табуляции.
     Вы можете использовать  С#include директиву для включения
других файлов в отображение. В дополнение к этому, сегмент Map
обеспечивает расширенный  формат,  который  позволяет  Вам не-
посредственно включать С файлы  с  расширением  .H.  Элементы,
использующие этот   формат,   должны   начинаться   с  #define
и могут содержать комментарии в С формате,  как в данном  при-
мере:
     #define context_string context_number /* комментарий*/
     Следующий пример иллюстрирует несколько форматов, которые
Вы можете использовать в сегменте [Map]:
     [Map]
     1).
     Edit_Window       0x0001
     Control_Menu      0x0002
     Maximize_Icon     0x0003
     Minimize_Icon     0x0004
     Split_Bar         0x0005
     Scroll_Bar        0x0006
     Title_Bar         0x0007
     Window_Border     0x0008
     2).
     dcmb_scr       30;Document Control-menu Icon
     dmxi_scr       31;Document Maximize Icon
     dmni_scr       32;Document Minimize Icon
     dri_scr        33;Document Restore Icon
     dtb_scr        34;Document Title Bar
     3).
     #define vscroll 0x010A /* Линейка вертикальной прокрутки*/
     #define hscroll 0x010E /* Линейка горизонтальной прокрутки*/
     #define scrollthm  0x0111 /* Кнопка скролинга*/
     #define upscroll   0x0112 /* Прокрутка вверх*/
     #define dnscroll   0x0113 /* Прокрутка вниз*/
     4).
     #include <sample.h>

    В примере:
     1). Эти восемь записей  дают  шестнадцатиричные эквивален-
ты для номеров контекста.
     2). Эти  пять  записей  показывают десятичные контекстные
номера.
     3). Эти  пять записей показывают как Вы могли бы включить
темы, определенные в С include файл.
     4). Эта запись показывает С#include директиву для некото-
рых основных тем.
     Если контекстные  номера  используют  #define директиву и
файл, содержащий #define предложения,  включается  как  в  код
программу, так и в Help файл,  то тогда модификации, сделанные
в контекстных номерах разработчиками программы,  будут автома-
тически отражаться в следующем Help построении.
     Вы можете определить, перечисленные в [Map] сегменте, ли-
бо в Help теме,  или в [Alias] сегменте. Компилятор генерирует
предупреждение, если контекстная строка,  появляющаяся в [Map]
сегменте, не определяется в любом из тематических файлов или в
[Alias] сегменте.
     Примечание. Если   Вы   используете   псевдоимя,  сегмент
[Alias] должен предшествовать [Map] сегменту в Help файле про-
екта.
     Более подробную информацию о контекстно-чувствительной по-
мощи смотрите  в  разделе  главы  2 "Выведение на дисплей кон-
текстно-чувствительных Help тем".

         Включение растров по ссылке: Сегмент Bitmaps

     Если Ваша Help система использует растры  по  ссылке,  то
имена файлов   каждого   из  растров  должны  перечисляться  в
[Bitmaps] сегменте файла проекта. Следующий пример иллюстриру-
ет формат [Bitmaps] сегмента:
     [Bitmaps]
     DUMP01.BMP
     DUMP02.BMP
     DUMP03.BMP
     c:\PROJECT\HELP\BITMAPS\DUMP04.BMP
     Примечание. [Bitmaps] сегмент использует те же самые пра-
вила, как и [Files] сегмент для расположения растровых файлов.

                  Компилирование Help файлов

     После того,  как Вы создали Help файл проекта, Вы уже го-
товы создать  Help файл,  используя Help Compiler.  Компилятор
генерирует бинарный Help файл ресурсов из тематических файлов,
перечисленных в Help файле проекта.  Когда завершается процесс
построения, Ваша программа может иметь  доступ  к  полученному
Help файлу ресурсов.
     До инициирования операции построения  для  создания  Help
файла, рассмотрите расположение следующих файлов:
     - Help Compiler,  HC.EXE.  Компилятор должен быть в спра-
вочнике, из которого он может выполняться.Это может быть теку-
щий рабочий справочник на пути, установленном переменной среды
PATH или справочник,  определенный полным именем пути, как по-
казано ниже:
     С:\BIN\HC HELPEX.HPJ
     - Help файл проекта,  filename.HPJ.  Файл  проекта  может
располагаться или  в  текущем справочнике,  или определяться в
справочнике, определенном путем, как показано ниже:
     C:\BIN\HC D:\MYPROJ\HELPEX.HPJ
     - Тематические файлы,  названные в  Help  файле  проекта,
сохраняются как RTF.  Тематические файлы могут располагаться в
текущем рабочем справочнике,  подсправочнике текущего рабочего
справочника, определенного в [Files] сегменте,  или его распо-
ложение определяется в ROOT опции.
     - Файлы,  включенные  с помощью #include директивы в Help
файл проекта. Так как #include директива может принимать имена
пути, то  тогда  любое количество мест будет работать для этих
файлов.
     - Все растровые файлы, перечисленные по ссылке, в темати-
ческих файлах.
     Вы также   должны  поместить  любые  файлы,  названные  в
#include директиве,  на пути корневого справочника проекта или
определить их  путь,  используя  ROOT  опцию.  Компилятор ищет
только справочники,  определенные в Help файле проекта.  Более
подробную информацию о ROOT опции Вы можете получить в разделе
"Определение корневого справочника: Опция ROOT".
     Примечание. Если  Вы  используете  оперативную память для
рабочих файлов (установленную с помощью DOS  среды  переменной
TMP) ,  то  она  должна быть достаточно большой для сохранения
откомпилированного Help файла ресурсов.  Если  Ваш  Help  файл
больше, чем размер доступной оперативной памяти, то компилятор
будет генерировать сообщение  об  ошибке  и  компиляция  будет
прекращаться.

                Использование Help компилятора

     Для прогона Help Compiler используйте HC команду.  Для HC
не существует опций.  Все опции определяются в Help файле про-
екта.
     HC команда использует следующий синтаксис:
        HCfilename.HPJ
     Когда прогоняется программа компилятора,  то она  выводит
на дисплей  последовательные точки,  указывая на ее развитие в
процессе. Сообщение о  ошибках  выводится  на  дисплей,  когда
встречается условие каждой ошибки.  Когда Help Compiler закан-
чивает компилирование,  он пишет Help файл ресурсов с расшире-
нием .HLP  в  текущий  справочник  и возвращает DOS подсказку.
Help файл ресурсов,  получаемый из построения, имеет то же са-
мое имя , что и Help файл проекта.
     Ошибки компилятора и сообщения о статусе  могут  перенап-
равляться в файл,  используя стандартный DOS синтаксис переад-
ресовки. Это вполне пригодно для растянутого  построения,  где
Вы не в состоянии контролировать весь процесс.  Переадресован-
ный файл  сохраняется,  как  текстовый  файл6  который   можно
просматривать с помощью любого ASCII редактора.

           Разработка программы для доступа к Help

     Группа разработчиков программы должна разрабатывать прог-
рамму так,  чтобы пользователь мог иметь доступ к Windows Help
программе, так и к Вашему Help файлу. Help программа - это от-
дельная Windows программа и Ваша программа  может  запрашивать
Windows для прогона Help программы и определять тему,  которую
Help должна показывать пользователю. Для пользователя Help по-
является как  часть Вашей программы,  однако она действует по-
добно любой другой Windows программе.

                  Вызов WinHelp из программы

     Программа делает  Help  систему  доступной   пользователю
посредством вызова WinHelp функции.
     WinHelp функция имеет следующий синтаксис:
        BOOL WinHelp (hWnd,lpHelpFile,wCommand,dwData)
     Напоминаем: С и Pascal примеры находятся на диске.
     Параметр hWnd    идентифицирует    окно,    запрашивающее
Help. Windows Help программа  использует  этот  идентификатор,
чтобы следить за тем, какие программы запрашивают Help.
     Параметр lpHelpFile задает имя (с необязательным путем  к
справочнику) файла Help, содержащего требуемую тему.
     Параметр mCommand задает тип поиска, который Windows Help
программа использует  для определения положения заданной темы,
или задает,  что программе больше не нужна система Help. Этому
параметру можно присвоить одно из следующих значений:
  Значение            Что делает
 ───────────────────────────────────────────────────────────
  HELP_CONTEXT     Выводит на дисплей  Help для  определенной
                   темы, идентифицируемой номером контекста.
  HELP_HELPPONHELP Выводит на дисплей Using Help тему индекса
  HELP_INDEX       Выводит  на  дисплей главную Help тему ин-
                   декса.
  HELP_KEY         Выводит на дисплей Help для темы, заданной
                   ключевым словом.
  HELP_MULTIKEY    Выводит на дисплей Help для темы, заданной
                   ключевым словом  в  альтернативной  таблице
                   ключевых слов.
  HELP_QUIT        Информирует Help программу о том, что Help
                   больше не  нужна.  Если другие программы не
                   запрашивают Help, то Windows закрывает Help
                   программу.
  HELP_SETINDEX    Выводит  на  дисплей  назначенную Help тему
                   индекса.
 ───────────────────────────────────────────────────────────
     Параметр dwData задает тему, для которой программа запра-
шивает Help. Формат dwData зависит от значения mCommand, пере-
даваемого, когда  Ваша  программа вызывает WinHelp.  Следующий
список описывает формат wdData для каждого значения mCommand.
  Значение mCommand        dwData формат
 ───────────────────────────────────────────────────────────
  HELP_CONTEXT     Длинное целое  без знака,  содержащее номер
                   контекста  для темы.  Вместо  использования
                   HELP_INDEX, HELP_CONTEXT можно использовать
                   можно использовать значение -1.
  HELP_HELPPONHELP Игнорируется.
  HELP_INDEX       Игнорируется.
  HELP_KEY         Длинный указатель на  строку,  которая со-
                   держит ключевое слово для требуемой темы.
  HELP_MULTIKEY    Длинный  указатель  на MULTIKEYHELP струк-
                   туру, как  определено  в   WINDOWS.H.  Эта
                   структура определяет символ сноски таблицы
                   и ключевое слово.
  HELP_QUIT        Игнорируется.
  HELP_SETINDEX    Длинное целое без знака, содержащее  номер
                   контекста для темы.
 ───────────────────────────────────────────────────────────
     Так как можно задать как номер контекста,  так и ключевое
слово, то WinHelp поддерживает и  контекстно-чувствительный  и
тематический поиск Help файла.
     Примечание. Чтобы убедиться,  что правильный индекс оста-
ется установленным,   программа   должна   вызвать  WinHelp  с
mCommand ,  равным HELP_SETINDEX  (с  dwData,  задающим  соот-
ветствующий идентификатор контекста),  вслед за каждым вызовом
WinHelp с командой HELP_CONTEXT.  HELP_INDEX никогда не должен
использоваться  с HELP_SETINDEX.

          Получение контекстно-чувствительной помощи

     Контекстно-чувствительная Help   должна  быть  доступной,
когда пользователь желает узнать  о  назначении  определенного
окна или управления.  Например,  пользователь может вытолкнуть
File меню,  выбрать Open  команду  (посредством  использования
клавиши Direction),  а  затем нажать F1 для получения Help для
команды.
     Реализация определенных  типов  контекстно-чувствительной
помощи требует  более  совершенной  техники  программирования.
Helpex пример программы иллюстрирует использование двух техно-
логий. Эти технологии описываются в следующих разделах.

                      Shift+F1 поддержка

     Для реализации Shift+F1 режима, Helpex отвечает на клави-
шу акселератора  Shift+F1,  посредством  вызова Set-Cursor для
изменения формы курсора на стрелочный  указатель,  дополняемый
маркером вопроса.
    case WM_KEYDOWN:
      if WParam == VK_F1 {

        /*Если используется Shift-F1, то включается режим помо-
         щи и устанавливается курсор помощи*/

        if GetKeyState(VK_Shift)) {
          bHelp = True;
          SetCursor(hHelpCursor);
          return (DefWindowProc(hWnd, message, WParam, LParam));
        }

        /* Если используется F1 без клавиши  Shift,  то  тогда
         вызывается тема главного индекса помощи */
        else {
          WinHelp(hWnd, szHelpFileName, Help_Index, 0L);
        }
      }

      else if (wParam == vk_Escape && bHelp) {

        /* Клавиша Escape во время режима помощи: отключает
           режим помощи */
          bHelp = False;
          SetCursor(hCursor)GetClassWord(hWnd,GCW_HCursor));
      }

      break;

     Ниже показано как Вы должны это делать в Turbo Pascal:

    WM_KEYDOWN:
      if WParam = vk_F1 then
        { Если используется Shift-F1, то включается режим помо-
         щи и устанавливается курсор помощи }
        if GetKeyState(VK_Shift) < 0 then
        begin
          Help := True;
          SetCursor(HelpCursor);
          MainWndProc := DefWindowProc(Wnd, Message, WParam, LParam);
        end
         { Если используется F1 без клавиши  Shift,  то  тогда
         вызывается тема главного индекса помощи }
        else
          WinHelp(Wnd, HelpFileName, Help_Index, 0)
        { Клавиша Escape во время режима помощи: отключает
          режим помощи }
      else if (WParam = vk_Escape) and Help then
        begin
          Help := False;
          SetCursor(hCursor(GetClassWord(Wnd, GCW_HCursor)));
        end;

     Пока пользователь  находиться  в  режиме Help (то есть до
тех пор,  пока он нажимает клавишу на мышке или нажимает  кла-
вишу Escape),   Helpex   отвечает  на  WM_SETCURSOR  сообщения
посредством переопределения курсора на комбинацию стрелочки  и
маркера вопроса.
    case WM_SETCURSOR:
      /* В режиме помощи необходимо изменить курсор в ответ на
         каждое WM_SETCURSOR сообщение.  В противном случае,по
         умолчанию, Windows  будет  изменять  курсор на курсор
         класса окна. */

      if (bHelp) {
        SetCursor(hHelpCursor);
        break;
      }
      return (DefWindowProc(hWnd, message, wParam, lParam));
      break;

    case WM_INITMENU:
      if (bHelp) {
        SetCursor(hHelpCursor);
      }
      return(TRUE);

     Ниже представлено как это Вы должны делать в Turbo Pascal:

    WM_SETCURSOR:
      {  В режиме помощи необходимо изменить курсор в ответ на
         каждое WM_SETCURSOR сообщение.  В противном случае,по
         умолчанию, Windows  будет  изменять  курсор на курсор
         класса окна. }

      if Help then
        SetCursor(HelpCursor)
      else
        MainWndProc := DefWindowProc(Wnd, Message, WParam,
                       LParam);
        exit;
      end;

     Когда пользователь находится в Shift+F1 режиме Help и на-
жимает клавишу  мышки,  Helpex будет получать WM_NCLBUTTONDOWN
сообщение, если нажатие произошло не  в  области  пользователь
окна программы.  Благодаря  исследованию значения wParam этого
сообщения, программа может определить какой идентификатор кон-
текста послать в WinHelp.
    case WM_NCLBUTTONDOWN:
      /*Если мы находимся в режиме помощи (Shift+F1), то тогда
        выводится на  дисплей контекстно-чувствительная помощь
        для непользовательской среды. */

      if (bHelp) {
          dwHelpContextId =
               (wParam == HtCaption)?(DWORD)HelpId_Title_Bar:
               (wParam == HTSIZE)? (DWORD)HelpId_Size_Box:
               (wParam == HTREDUCE)?
    (DWORD)HELPID_MINIMIZE_ICON
               (wParam == HTZOOM)?(DWORD)HELPID_MAXIMIZE_ICON:
               (wParam == HTSYSMENU)?(DWORD)HELPID_SYSTEM_MENU:
               (wParam == HTBOTTOM)?
     (DWORD)HELPID_SIZING_BORDER:
               (wParam == HTBOTTOMLEFT)?
     (DWORD)HELPID_SIZING_BORDER:
               (wParam ==
     HTBOTTOMRIGHT)?HELPID_SIZING_BORDER:
               (mParam == HTTOP)?(DWORD)HELPID_SIZING_BORDER:
               (mParam == HTLEFT)?(DWORD)HELPID_SIZING_BORDER:
               (mParam == HTRIGHT)?(DWORD)HELPID_SIZING_BORDER:
               (mParam ==
     HTTOPLEFT)?(DWORD)HELPID_SIZING_BORDER:
               (mParam == HTTOPRIGHT)?
     (DWORD)HELPID_SIZING_BORDER:
               (DWORD)0L

          if (!((BOOL)dwHelpContextId))
             return (DefWindowProc(hWnd, message, wParam,
                     lParam));
          bHelp = False;
     WinHelp(hWnd, szHelpFileName, Help_Context,
             dwHelpContextId);
          break;
          }
          return (DefWindowProc(hWnd, message, wParam,
                  lParam));

    Ниже представлено как это Вы должны делать в Turbo Pascal:

    WM_NCLBUTTONDOWN:
      /*Если мы находимся в режиме помощи (Shift+F1), то тогда
        выводится на  дисплей контекстно-чувствительная помощь
        для непользовательской среды. */

      if Help then
      begin
        case WParam of
          HtCaption: HelpContextId := HelpIdTitleBar;
          HtReduce: HelpContextId := HelpIdMinimizeIcon;
          HtZoom: HelpContextId := HelpIdMaximizeIcon;
          HtSysMenu: HelpContextId := HelpIdSystemMenu;
          HtBottom: HelpContextId := HelpIdSizingBorder;
          HtBottomLeft: HelpContextId := HelpIdSizingBorder;
          HtBottomRight: HelpContextId := HelpIdSizingBorder;
          HtTop: HelpContextId := HelpIdSizingBorder;
          HtLeft: HelpContextId := HelpIdSizingBorder;
          HtRight: HelpContextId := HelpIdSizingBorder;
          HtTopLeft: HelpContextId := HelpIdSizingBorder;
          HtTopRight: HelpContextId := HelpIdSizingBorder;
        else
          HelpContextId := 0;
        end;
        if HelpContextId = 0 then
          MainWndProc := DefWindowProc(Wnd, Message, WParam,
                                       LParam)
        else
        begin
          Help := False;
          WinHelp(Wnd, HelpFileName, Help_Context,
                  HelpContextId);
        end
      end
      else
        MainWndProc := DefWindowProc(Wnd, Message, WParam,
                                     LParam);
        exit;
      end;

                         F1 поддержка

     Контекстно-чувствительная F1  поддержка  для меню относи-
тельно проста для реализации в Вашей программе. Если меню  от-
крыто и  пользователь  нажимает F1 в то время когда высвечива-
ется один из элементов  меню,  Windows  посылает  WM_ENTERIDLE
сообщение в  программу  для того,  чтобы указать 6 что система
возвращается обратно в состояние незанятости после определения
того, что  F1  не было  правильным нажатием клавиши для выбора
элемента меню. Вы можете получить преимущество от того состоя-
ния незанятости,  взглянув  на  состояние  клавиатуры во время
WM_ENTERIDLE сообщения.
     Ели нажата клавиша F1,  то тогда вы сможете смоделировать
нажатие пользователем клавиши ENTER ,  посредством регистрации
WM_KEYDOWN сообщения, используя VK_RETURN. Вы действительно не
желаете, чтобы Ваша программа выполняла команды меню.  То  что
Вы должны  сделать,  так это установить флаг (bHelp=TRUE) так,
чтобы когда вы получили WM_COMMAND сообщение для элемента  ме-
ню, Вы  не  выполняли команду.  Вместо этого тема для элемента
меню выводится на дисплей посредством Windows Help.
     Следующие кодовые  примеры  иллюстрируют  F1 чувствитель-
ность для элементов меню:
    case WM_ENTERIDLE:
      if ((WParam == msgf_Menu) && (GetKeyState(VK_F1) &
         0x8000)) {
        bHelp = True;
        PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0L);
      }
      break;

    case WM_COMMAND:
      /* F1 только что нажата в меню или мы находимся в режиме
        помощи (Shift+F1)?  */

      if (bHelp) {
          dwHelpContextId =
            (wParam == Idm_New)?(DWORD)HelpId_File_New:
            (wParam == Idm_Open)?(DWORD)HelpId_File-Open:
            (wParam == Idm_Save)?(DWORD)HelpId_File_Save:
            (wParam == Idm_SaveAs)?
                       (DWORD)HelpId_File_Save_As:
            (wParam == Idm_Print)?(DWORD)HelpId_File_Print:
            (wParam == Idm_Exit)?(DWORD)HelpId_File_Exit:
            (wParam == Idm_Undo)?(DWORD)HelpId_Edit_Undo:
            (wParam == Idm_Cut)?(DWORD)HelpId_Edit_Cut:
            (wParam == Idm_Clear)?(DWORD)HelpId_Edit_Clear:
            (wParam == Idm_Copy)?(DWORD)HelpId_Edit_Copy:
            (wParam == Idm_Paste)?(DWORD)HelpId_Edit_Paste:
            (DWORD)0L;

          if (!dwHelpContextId)
          {MessageBox( hWnd, "Help not available for Help Menu
      Item",                 "Help Example", Mb_Ok
      return (DefWindowProc(hWnd, message, wParam, lParam));
                }

                bHelp = False;

          WinHelp(hWnd, szHelpFileName, Help_Context,
                  HelpContextId);
                   break;
                }

    Ниже представлено как это Вы должны делать в Turbo Pascal:

    WM_ENTERIDLE:
      if ((WParam = msgf_Menu) and ((GetKeyState(VK_F1) and
           $8000) <> 0)) then
      begin
        Help := True;
        PostMessage(Wnd, WM_KEYDOWN, VK_RETURN, 0);
      end;

    WM_COMMAND:

      { F1 только что нажата в меню или мы находимся в режиме
        помощи (Shift+F1)?  }

      if Help then
      begin
        case WParam of
          IdmNew: HelpContextId := HelpIdFileNew;
          IdmOpen: HelpContextId := HelpIdFileOpen;
          IdmSave: HelpContextId := HelpIdFileSave;
          IdmSaveAs: HelpContextId := HelpIdFileSaveAs;
          IdmPrint: HelpContextId := HelpIdFilePrint;
          IdmExit: HelpContextId := HelpIdFileExit;
          IdmUndo: HelpContextId := HelpIdEditUndo;
          IdmCut: HelpContextId := HelpIdEditCut;
          IdmClear: HelpContextId := HelpIdEditClear;
          IdmCopy: HelpContextId := HelpIdEditCopy;
          IdmPaste: HelpContextId := HelpIdEditPaste;
        else
          HelpContextId := 0;
        end;
        if HelpContextId = 0 then
        begin
          MessageBox(Wnd, 'Help not available for Help Menu
          Item',            'Help Example', Mb_Ok);
          MainWndProc := DefWindowProc(Wnd, Message, WParam,
                                       LParam);
          exit;
        end;
          Help := False;
          WinHelp(Wnd, HelpFileName, Help_Context,
                  HelpContextId);
        end
     Обнаружение F1 в диалоговых окнах несколько более затруд-
нено, чем  в  меню.  Вы  должны  установить  фильтр сообщения,
используя WH_MSGFILTER  опцию  функции  SetWindowsHook.   Ваша
функция фильтра  сообщения  реагирует на WH_KEYDOWN и WH_KEYUP
сообщения в VK_F1 ,  когда они посылаются в  диалоговое  окно,
как указывается MSGF_DIALOGBOX кодом. Посредством исследования
структуры сообщения, передаваемого в фильтр, Вы можете опреде-
лить контекст  F1 помощи - это находится в диалоговом окне,  и
определенную опцию или элемент.  Вы не должны вызывать WinHelp
при обработке фильтруемого сообщения,  а скорее регистрировать
сообщение, определенное программой, для Вашей программы, чтобы
вызвать WinHelp при первой доступной возможности.

          Получение Help по элементу, перечисленному
                         в меню Help

     Иногда пользователи могут пожелать получить информацию об
основной концепции в программе,  а не об определенном управле-
нии или окне.  В этих случаях программа должна обеспечить Help
определенной темой,  которая идентифицируется ключевым словом,
а не идентификатором контекста.
     Например, если  Help  файл для Вашей программы,  содержит
тему, описывающую как используется клавиатура,  Вы можете  по-
местить элемент  "Keyboard"  ("Клавиатура")  в Ваше меню Help.
Тогда, когда пользователь выбирает этот элемент, Ваша програм-
ма должна вызвать WinHelp и запросить эту тему:
     case IDM_HELP_KEY_BOARD:
        WinHelp (hWnd, lpHelpFile, HELP_KEY, (LPSTR)
     "Keyboard");
        break;

        Доступ к дополнительной таблице ключевых слов

     Ваша программа  может иметь команды или термины,  которые
соответствуют терминам в сходной,  но отличающейся  программе.
По данному  ключевому  слову программа может вызвать WinHelp и
найти темы,  определенные в  альтернативной  таблице  ключевых
слов. Эта Multikey функциональность доступна благодаря WinHelp
добавочному блоку  с  параметром  mCommand,  установленном  на
HELP_MULTIKEY.
     Вы определяете символ сноски для  альтернативной  таблицы
ключевых слов  и  ключевое  слово  или  фразу  через структуру
MULTIKEYHELP, которая передается в качестве  параметра  dwData
при вызове WinHelp. Эта структура определяется в WINDOW.H сле-
дующим образом:
     typedef struct tag MULTIKEYHELP {
         WORD mdSize;
         BYTE mkKeyList;
         BYTE szKeyPhrase[1];
     } MULTIKEYHELP;

     В следующей таблице перечисляются форматы полей структуры
MULTIKEYHELP:
  Параметр             Формат
 ───────────────────────────────────────────────────────────
  mkSize      Размер   структуры,  включающий  ключевое  слово
              (или фразу)  и  соответствующую  букву  ключевой
              таблицы.
  mkKeyList   Одиночный  символ,  которые  определяет   символ
              сноски для  разыскиваемой альтернативной таблицы
              ключевых слов.
  szKeyPhrase Ключевое  слово или фраза,  завершающаяся пустым
              указателем, которые должны разыскиваться  в аль-
              тернативной таблице ключевых слов.
 ───────────────────────────────────────────────────────────
     В следующем  примере иллюстрируется поиск ключевого слова
для слова "frame" ("рамка") в альтернативной таблице  ключевых
слов, обозначенном символом сноски "L":
     MULTIKEYHELP mk;
     char szKeyword[] = "frame";
     mk.mkSize=sizeof(MULTIKEYHELP)+(WORD)lstrlen(szKeyword);
     mk.mkKeylist="L";
     mk.szKeyphrase=szKeyword;
     WinHelp(hWnd,lpHelpfile,HELP_MULTIKEY,(LPSTR)&mk);

                         Отмена Help

     Windows Help  программа является общим ресурсом,  который
доступен для всех Windows программ.  В дополнение к этому, так
как это автономная программа,  пользователь может выполнять ее
подобно любой другой программе.  В результате этого Ваша прог-
рамма имеет  ограниченный  контроль над Help программой.  Хотя
Ваша программа не  может  непосредственно  закрыть  Help  окно
программы, Ваша  программа  может проинформировать  Help прог-
рамму о том,  что Help больше не требуется. До закрытия своего
главного окна  Ваша программа должна вызвать WinHelp с исполь-
зованием mCommand параметра для установки HELP_QUIT, как пока-
зано в следующем примере, чтобы проинформировать Help програм-
му о том, что Ваша программа не будет нуждаться в ней опять.
     case WM_DESTROY:
        WinHelp (hWnd, lpHelpFile, HELP_QUIT, NULL);
     Программа, которая вызывает WinHelp в некотором пункте во
время ее выполнения должна вызвать  WinHelp  c  использованием
mCommand параметра  для  установки  HELP_QUIT  перед тем,  как
программа выходит  из  WinMain  (типично  во  время  отработки
WM_DESTROY сообщения).
     Если программа открывает более чем  один  Help  файл,  то
тогда она  должна  вызвать  WinHelp для прекращения помощи для
каждого файла.
     Если программа или DLL открыли Help файл, однако более не
желают, чтобы связанный  пример  Help  средства  (WINHELP.EXE)
оставался активным,  то тогда программа или DLL должны вызвать
WinHelp с помощью mCommand параметра для установки  HELP_QUIT,
чтобы уничтожить пример Help средства.
     Ни при каких обстоятельствах программа или DLL не  должны
заканчиваться без  вызова  WinHelp для любого из открытых Help
файлов. Help файл открывается,  если любой другой WinHelp  вы-
зов, сделанный ранее с использованием Help имени файла.
     Windows Help программа не выходит до тех  пор,  пока  все
окна, которые  вызваны WinHelp не вызывают ее с использованием
mCommand для установки HELP_QUIT.  Если программа не в состоя-
нии делать так,  то тогда Help программа будет продолжать про-
гон после всех программ,  которые проводят запрос о завершении
Help.
                      Резюме

     В этой главе описывалось как создать Help  файл  проекта,
построить Help  файл ресурса и создать программу для доступа к
Help. Более подробную информацию смотрите ниже:
  Тема                Ссылка
 ───────────────────────────────────────────────────────────
  Планирование Help   Средства: Глава 2 " Планирование  Help
     системы          системы"
  Написание Help      Средства: Глава 3 "Создание Help тема-
     тем              тических файлов"
 ───────────────────────────────────────────────────────────












                           ГЛАВА 5

           ПРИМЕРЫ  HELP  И  СООБЩЕНИЯ  КОМПИЛЯТОРА
                         ОБ  ОШИБКАХ

     В первой  части  этой главы содержатся несколько примеров
Help исходных файлов и их соответствующие темы,  в  том  виде,
как они выводятся на дисплей в Help.  Каждый пример показывает
тему (или часть темы) так, как она представляется разработчику
текста Help в системе подготовки текста, допускающей RTF и как
она представляется пользователю в Help окне. Вы можете исполь-
зовать эти  примеры  в  качестве руководств при создании Ваших
собственных тематических файлов.  Примеры должны помочь Вам  в
предсказании того, как определенный тематический файл, создан-
ный в системе  подготовки текста, будет представляться пользо-
вателю.
     Во второй части этой главы содержится список сообщений об
ошибках Help Compiler .  Каждое сообщение показано в том виде,
в котором оно появляется,  когда компилятор встречается с  ха-
рактерной  ошибкой.  Каждое  сообщение  сопровождает  короткое
объяснение с целью помочь Вам в решении проблемы в Вашей  Help
системе. Перечислению сообщений об ошибках предшествует корот-
кое описание поведения Help Compiler при сообщении об  ошибке.
Понимание того, как компилятор сообщает и реагирует на ошибки,
поможет Вам отладить Ваши Help файлы.

                  Help тематические примеры

             Рисунок 5.1  Слово для Windows темы
╔═[■]════════════════════════════════════════════════[°][∙]═╗
║            Microsoft Word - HELPEX.RTF                    ║
║───────────────────────────────────────────────────────────║
║File Edit Help View Insert Format Macro Window         Help║
║───────────────────────────────────────────────────────────║
║   Edit Menu                                               ║
║   Меню Edit включает команды, которые дают Вам возможность║
║   перемещать текст в и из буфера вырезанного изображения  ║
║   для удаления предыдущей операции редактирования.        ║
║   Для получения дополнительной информации, выберите имя   ║
║   команды Edit меню.                                      ║
║   ClearHELPID_EDIT_CLEARУдаляет текст без перемещения его ║
║                         в clipboard.                      ║
║   CopyHELPID_EDIT_COPYКопирует текст в clipboard          ║
║   DeleteHELPID_EDIT_CUTУдаляет текст и перемещает его в   ║
║                         clipboard.                        ║
║   PasteHELPID_EDIT_PASTEПеремещает текст из clipboard в   ║
║                          в окно редактирования.           ║
║   UndoHELPID_EDIT_UNDOОтменяет предыдущую операцию.       ║
║───────────────────────────────────────────────────────────║
║   # menu edit                                             ║
║   $ Edit Menu                                             ║
║   + commands:010                                          ║
║   kmenu,edit;edit;commands;clear;copy;cut;paste;undo      ║
╚══════════════════════════════════════════════════════════─┘

            Рисунок 5.2 Help тематический дисплей
  ╔═[■]════════════════════════════════════════════[°][∙]═╗
  ║         Help Example Help - helpex,hlp                ║
  ║───────────────────────────────────────────────────────▒
  ║  File   Edit   Bookmark   Help                        ▒
  ║───────────────────────────────────────────────────────▒
  ║ Index  Back  Browse  Browse  Search                   ▒
  ║───────────────────────────────────────────────────────▒
  ║Edit Menu                                              ■
  ║Меню Edit включает команды,которые дают Вам возможность▒
  ║перемещать текст в и из clipboard для удаления предыду-▒
  ║щей операции редактирования.                           ▒
  ║Для получения дополнительной информации, выберите имя  ▒
  ║команды Edit меню.                                     ▒
  ║Clear  Удаляет текст без перемещения его clipboard.    ▒
  ║Copy   Копирует текст в clipboard                      ▒
  ║Cut    Удаляет текст и перемещает его в clipboard.     ▒
  ║Paste  Перемещает текст из clipboard в окно редактиро- ▒
  ║       вания.                                          ▒
  ║Undo   Отменяет предыдущую операцию.                   ▒
  ╚<■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒>─┘

                  Рисунок 5.3  Mac Word темы
  ╔═══════════════════════════════════════════════════════╗
  ║                      Untitled2                        ║
  ║───────────────────────────────────────────────────────▒
  ║ Help Example Index                                    ▒
  ║ Index содержит список всех Help тем, доступных Help   ▒
  ║ Example. Индексные элементы устанавливаются в алфавит-▒
  ║ ном порядке в пределах каждой основной категории. Вы  ▒
  ║ можете использовать просмотровое окно для просмотра   ▒
  ║ записей, невидимых в текущий момент в Help окне.      ■
  ║ Более подробную информацию о том,как использовать Help▒
  ║ Вы можете получить, нажав F1 или выбрав Using Help из ▒
  ║ меню Help.                                            ▒
  ║ Commands                                              ▒
  ║    Edit Menu menu edit                                ▒
  ║    Edit Menu menu file                                ▒
  ║ Glossary                                              ▒
  ║    Defined Terms glossary                             ▒
  ║ Procedures                                            ▒
  ║    Copying Text  proc copying text                    ▒
  ║    Deleting Text proc deleting text                   ▒
  ║     Exiting       proc exiting                        ▒
  ║     и т.д.                                            ▒
  ╚<■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒>─┘

            Рисунок 5.4 Help тематический дисплей
  ╔═[■]════════════════════════════════════════════[°][∙]═╗
  ║         Help Example Help - helpex.hlp                ║
  ║───────────────────────────────────────────────────────▒
  ║  File   Edit   Bookmark   Help                        ▒
  ║───────────────────────────────────────────────────────▒
  ║ Index  Back  Browse  Browse  Search                   ▒
  ║───────────────────────────────────────────────────────▒
  ║Help Example Index                                     ■
  ║ Index содержит список всех Help тем, доступных Help   ▒
  ║ Example. Индексные элементы устанавливаются в алфавит-▒
  ║ ном порядке в пределах каждой основной категории. Вы  ▒
  ║ можете использовать просмотровое окно для просмотра   ▒
  ║ записей, невидимых в текущий момент в Help окне.      ▒
  ║ Более подробную информацию о том,как использовать Help▒
  ║ Вы можете получить, нажав F1 или выбрав Using Help из ▒
  ║ меню Help.                                            ▒
  ║ Commands                                              ▒
  ║     Edit Menu                                         ▒
  ║     Edit Menu                                         ▒
  ║     и т.д.                                            ▒
  ╚<■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒>─┘

     Ниже приведен Helpex (пример Help) файл проекта:
     [OPTIONS]
     ROOT=c:\help
     INDEX=main_index
     TITLE=Help Example
     COMPRESS=true

     [FILES]
     helpex.rtf     ;jump topics
     terms.rtf      ; look-up terms

     [MAP]
     main_index 0xFFFF
     #define HELPID_EDIT_CLEAR     100
     #define HELPID_EDIT_COPY      101
     #define HELPID_EDIT_CUT       102
     #define HELPID_EDIT_PASTE     103
     #define HELPID_EDIT_UNDO      104
     #define HELPID_FILE_EXIT      200
     #define HELPID_FILE_NEW       201
     #define HELPID_FILE_OPEN      202
     #define HELPID_FILE_PRINT     203
     #define HELPID_FILE_SAVE      204
     #define HELPID_FILE_SAVE_AS   205
     #define HELPID_EDIT_WINDOW    300
     #define HELPID_MAXIMIZE_ICON  301
     #define HELPID_MINIMIZE_ICON  302
     #define HELPID_SPLIT_BAR      303
     #define HELPID_SIZE_BOX       304
     #define HELPID_SYSTEM_MENU    305
     #define HELPID_TITLE_BAR      306
     #define HELPID_SIZING_BORDER  307

              Сообщения об ошибках Help Compiler

     Help Compiler выводит  на  дисплей  сообщения,  когда  он
встречает ошибки при построении Help файла ресурсов: Ошибки во
время отработки файла проекта нумеруются,  начиная с буквы P и
появляются в следующем виде:
     Error P1025:  line...7 of filename.HPJ :  Section heading
     sectionname unrecognized.
     (Ошибка Р1025:  строка...7 в файле имя файла.HPJ: Заголо-
     вок раздела имя раздела не распознаются.)

     Warning P1039:  line...38 of filename.HPJ  :  [BUILDTAGS]
     secton missing.
     (Предупреждение Р1039: строка...39 в файле имя файла.HPJ:
     [BUILDTAGS] недостающий раздел.)
     Ошибки, встречающиеся  при  обработке  RTF  тематического
файла (файлов) нумеруются , начиная с буквы R и представляются
в следующем виде:
     Error R2025: File environment error.
     (Ошибка R2025: Ошибка среды файла.)

     Warning R2501: Using old key-phrase table.
     (Предупреждение R2501:  Использование старой таблицы клю-
     чевых фраз.)
     Когда возможно , компилятор будет выводить на дисплей но-
мер темы и\или имя файла,  которые содержат ошибку.  Хотя темы
не нумеруются, номер темы, данный с сообщением об ошибке, ссы-
лается на  номер  последующей  позиции  темы в Вашем RTF файле
(первый, второй и т.д.).  Эти номера могут быть идентичными  с
номером страницы,  показанным Вашей системой подготовки текста
и зависящим от количества строк,  которое Вы присвоили гипоте-
тической печатной  странице.  Помните,  что  темы  разделяются
жесткими разрывами страниц,  даже если нет такого понятия  как
"страница" в Help системе.
     Сообщения, начинающиеся со слова "Error"  (ошибка)  явля-
ются фатальными ошибками. Фатальные ошибки всегда сообщаются и
в результате построения не может быть получен  допустимый  для
использования Help  файл ресурса.  Сообщения,  начинающиеся со
слова "Warning" (предупреждение)  являются  менее  серьезными.
Построение с  предупреждениями  буде создавать допустимый Help
файл ресурса,  который будет загружаться под  Windows,  однако
файл может содержать операционные ошибки. Вы можете определить
количество предупреждающей информации,  которая  должна  сооб-
щаться компилятором. Более подробную информацию о выборе уров-
ня предупреждений, которые должны выводиться на дисплей, смот-
рите в   разделе  "Определение  сообщений  об  ошибках:  Опция
Warning" главы 3.
     Реакция компилятора  на  ошибку  описывается  для  каждой
ошибки в перечислении,  которое следует дальше. Во время обра-
ботки файла проекта, компилятор игнорирует строки, которые со-
держат ошибки и пытается продолжить построение.  Это означает,
что встреченные ранее в построении ошибки могут привести к го-
раздо большему количеству сообщаемых ошибок,  если  построение
продолжается. Аналогично  будут сообщаться ошибки во время об-
работки RTF тематических файлов и,  если они  не  будут  очень
серьезными, то компилятор будет продолжать построение. Условие
одной ошибки в тематическом файле может привести к  нескольким
сообщениям об  ошибках,  которые  будут  сообщаться компилято-
ром. Например,  неправильно  идентифицированная  тема  вызовет
ошибку сообщаемую каждый раз, когда термины перехода ссылаются
на правильный идентификатор темы. Такая ошибка легко исправля-
ется путем  корректирования  сноски,  содержащей  неправильную
строку контекста.

           Ошибки во время обработки файла проекта

 ───────────────────────────────────────────────────────────
  P1001    Невозможный для чтения файл с именем filename.
           Файл, определенный в файле проекта является нечита-
           емым. Это ошибка файла DOS.
  P1003    Неправильный путь, определенный в ROOT опции.
           Не может быть найден путь,  определенный в ROOT оп-
           цией.  компилятор использует текущий рабочий  ката-
           лог.
  P1005    Путь и имя файла превышают ограничение в 79 симво-
           лов.
           Абсолютное имя файла или комбинированное корневое и
           относительное имя пути, превышают ограничение DOS в
           79 символов. Файл игнорируется.
  P1007    Корневой путь превышает максимальное ограничение из
           66 символов.
           Определенное корневое  имя пути превышает ограниче-
           ние DOS из 66 символов.  Имя пути  игнорируется,  и
           компилятор использует текущий рабочий каталог.
  P1009    Сегмент [FILES] отсутствует.
           Требуется сегмент [FILES]. Компиляция прекращается.
  P1011    Опция optionname определена ранее.
           Опция была  определена  предварительно.  Компилятор
           игнорирует попытку повторного определения.
  P1013    Расширением файла проекта не может быть .HLP.
           Вы не можете задать,  чтобы компилятор  использовал
           файл проекта с расширением .HLP.  Обычно файлы про-
           екта дают .HPJ расширение.
  P1015    Неожиданный конец файла.
           Компилятор подошел неожиданно к концу файла  проек-
           та. В  файле проекта может находиться открытый ком-
           ментарий или включенный файл.
  P1017    Параметр превышает максимальную длину из 128  сим-
           волов.
           Опция, контекстное  имя  или номер,  тег построения
           или другой параметр на определенной строке превыша-
           ют ограничения из 128 символов. Строка игнорируется.
  P1021    Контекстный  номер  уже  использовался в [MAP] сег-
           менте.
           Контекстный номер на  определенной строке  в  файле
           проекта ранее  отображался  для  другой контекстной
           строки. Строка игнорируется.
  P1023    Include операторы вложены слишком глубоко.
           Оператор #include на определенной  строке  превысил
           максимум из пяти уровней вложения.
  P1025    Не распознается заголовок сегмента с именем secti-
           onname.
           Используется не поддерживаемый компилятором  заго-
           ловок сегмента. Строка игнорируется.
  P1027    Недостающие  скобки из заголовка сегмента section-
           name.
           Недостает правильной скобки  (])  из  определенного
           заголовка сегмента.  Вставьте  скобку  и  повторите
           компилирование.
  P1029    Заголовок сегмента отсутствует.
           Неполный заголовок сегмента на определенной строке.
           Эта ошибка  также сообщается,  если первая запись в
           файле проекта не является заголовком сегмента. Ком-
           пилятор продолжает работу со следующей строкой.
  P1030    Сегмент sectionname определен ранее.
           В файле   проекта  обнаружен  дублируемый  сегмент.
           Строки с дублируемым заголовком  проекта  игнориру-
           ются, и  компилятор продолжает работу со следующего
           правильного заголовка сегмента.
  P1031    Превышено максимальное количество тегов построения.
           Максимальное количество тегов  построения,  которое
           может быть определено,  равно 30. Лишние теги игно-
           рируются.
  P1033    Дублируемый тег построения в [BUILDTAGS] сегменте.
           Тег построения в  [BUILDTAGS]  сегменте  повторился
           лишний раз.
  P1035    Длина тега построения превышает максимум.
           Тег построения  на  определенной  строке  превышает
           максимум из 32 символов.  Компилятор игнорирует эту
           запись.
  P1037    Тег  построения  tagname содержит неправильные сим-
           волы.
           Теги построения  могут  содержать  только   буквен-
           но-цифровые символы  или  символ подчеркивания (_).
           Строка игнорируется.
  P1039    [BUILDTAGS] сегмент отсутствует.
           Опция BUILD объявляет условное построение, однако в
           файле проекта  нет  [BUILDTAGS] сегмента.  Все темы
           включаются в построение.
  P1043    Слишком много тегов в Build выражении.
           Build выражение на определенной  строке  использует
           более 20  (максимальное значение) тегов построения.
           Компилятор игнорирует строку.
  P1045    [ALIAS] сегмент находится после [MAP] сегмента.
           При использовании [ALIAS] сегмент должен  предшест-
           вовать [MAP] сегменту в файле проекта.  В противном
           случае [ALIAS] сегмент игнорируется.
  P1047    Контекстной строке contextname уже присвоено псев-
           доимя.
           Вы не должны делать:  a=b,  затем a=c (Вы не должны
           присваивать псевдоимя псевдоимени).
           Определенной контекстной строке ранее было присвое-
           но псевдоимя в [ALIAS] сегменте. Попытка повторного
           присвоения псевдоимени на этой строке игнорируется.
  P1049    Строке псевдоимени aliasname уже присвоено псевдо-
           имя.
           Вы не должны делать:  a=b,  затем b=c (Вы не должны
           присваивать псевдоимя псевдоимени).
           Строка псевдоимени,  в  свою  очередь,   не   может
           присваиваться другому псевдоимени.
  P1051    Контекстная строка contextname не может  использо-
           ваться как строка псевдоимени.
           Вы не должны делать: a=b, затем c=a
           Контекстная строка, которая была присвоена псевдои-
           мени, не может использоваться позже  как  псевдоимя
           для другой контекстной строки.
  P1053    Превышено максимальное количество диапазонов шриф-
           та.
           Максимальное количество диапазонов шрифта,  которое
           может быть определено равно пяти. Остальные игнори-
           руются.
  P1055    Текущий  диапазон  шрифта перекрывает ранее опреде-
           ленный диапазон.
           Диапазон размера  шрифта  перекрывает ранее опреде-
           ленное соответствие.  Отрегулируйте любой  диапазон
           шрифта для  устранения  любого  перекрытия.  Второе
           соответствие игнорируется.
  P1056    Нераспознаваемое имя шрифта в Forcefont опции.
           Встречается имя шрифта, не поддерживаемое компилято-
           ром. Имя шрифта игнорируется , и компилятор исполь-
           зует определенный по умолчанию шрифт Helvetika.
  P1057    Имя шрифта слишком длинное.
           Имена шрифтов не должны превышать  20  символов.  В
           противном случае шрифт игнорируется.
  P1059    Неправильный синтаксис многократных клавиш.
           Не распознается  синтаксис,  используемый с помощью
           MULTIKEY опции.  Правильный  синтаксис  приведен  в
           главе 4 "Построение Help файла".
  P1061    Символ не использовался.
           Определенный идентификатор  таблицы  ключевых  слов
           уже используется. Выберите другой символ.
  P1063    Символы 'K' и 'k' не могут использоваться.
           Эти символы резервируются для обычной таблицы  клю-
           чевых слов Help. Выберите другой символ.
  P1065    Превышено максимальное количество таблиц  ключевых
           слов.
           Превышено ограничение из пяти таблиц ключевых слов.
           Уменьшите их  количество.  Лишние таблицы игнориру-
           ются.
  P1067    Отсутствует знак равенства.
           В опции отсутствует знак равенства на  определенной
           строке. Проверьте синтаксис для опции.
  P1069    Отсутствует строка контекста.
           В определенной строке отсутствует контекстная стро-
           ка до знака равенства.
  P1071    Незаконченная строка в сегменте sectionname.
           Не завершена запись на определенной строке.  Строка
           игнорируется.
  P1073    Нераспознаваемая опция в [OPTIONS] сегменте.
           Используется опция,  которая не поддерживается ком-
           пилятором. Строка игнорируется.
  P1075    Неправильное выражение построения.
           Синтаксис, использованный в выражении построения на
           определенной строке,  содержит одну или более логи-
           ческих или синтаксических ошибок.
  P1077    Уровень предупреждения должен быть 1, 2 или 3.
           Уровень сообщения  WARNING  может  быть  установлен
           равным 1,  2 или 3.  Компилятор будет определять по
           умолчанию полное сообщение (уровень 3).
  P1079    Неправильная опция сжатия.
           Опция COMPRESS может устанавливаться только  равной
           TRUE или FALSE. Компиляция продолжается без сжатия.
  P1081    Неправильная строка заголовка.
           TITLE опция  определяет  пустую  строку или строку,
           которая более чем 32 символа.  Заголовок укорачива-
           ется.
  P1083    Неправильный идентификационный номер контекста.
           Номер контекста  на  определенной строке пустой или
           содержит неправильные символы.
  P1085    Нераспознаваемый текст.
           Нераспознаваемый текст, который следует за правиль-
           ным текстом в определенной строке, игнорируется.
  P1086    Неправильный синтаксис диапазона шрифта.
           Определение диапазона шрифта на определенной строке
           содержит неправильный синтаксис. Компилятор игнори-
           рует эту    строку.    Проверьте    синтаксис   для
           MAPFONTSIZE опции.
  P1089    Нераспознаваемый порядок сортировки.
           Вы определили порядок,  который  не  поддерживается
           компилятором.
 ───────────────────────────────────────────────────────────

        Ошибки во время обработки RTF тематических файлов

 ───────────────────────────────────────────────────────────
  R2001    Невозможно открыть файл растров с именем  filename.
           Определенный растровый  файл  является  нечитаемым.
           Это ошибка DOS файла.
  R2003    Невозможно включить растровый файл c именем  file-
           name.
           Определенный растровый файл не  может  быть  найден
           или является  нечитаемым.  Это ошибка DOS файла или
           условие за пределы памяти.
  R2005    Диск полный.
           Help файла ресурса не может быть записан  на  диск.
           Создайте больше  пространства на дисководе назначе-
           ния.
  R2009    Нельзя  использовать  резервированное  имя DOS уст-
           ройства для файла с именем filename.
           На файл можно ссылаться как COM1,  LPT2, PRN и т.д.
           Переименуйте файл.
  R2013    Выходной файл с именем filename уже существует как
           справочник.
           В Help  корне  проекта  есть подсправочник с тем же
           самым именем,  как желаемое имя Help файла ресурса.
           Переместите или переименуйте подсправочник.
  R2015    Выходной  файл с именем  filename  уже  существует
           как доступный только для чтения.
           Определенное имя файла не может быть  затерто  Help
           файлом ресурса,  потому  что  файл  имеет атрибут -
           доступен только для чтения.  Переименуйте файл про-
           екта или измените атрибут файла.
  R2017 Путь для файла с именем filename превышает ограничение
           из 79 символов.
           Абсолютное имя пути или комбинированное корневое  и
           относительное имя пути для заданного файла превыша-
           ют ограничение DOS из 79 символов.  Файл  игнориру-
           ется.
  R2019    Нельзя открыть файл с именем filename.
           Заданный файл  является нечитаемым.  Это ошибка DOS
           файла.
  R2021    Файл с именем filename не может быть найден.
           Заданный файл не может быть найден или является не-
           читаемым. Это  ошибка  DOS файла или условие выхода
           за пределы памяти.
  R2023    Недостаточно памяти для построения Help файла.
           Чтобы освободить память,  выгрузите любые  ненужные
           программы, драйверы устройств и программы резидент-
           ной памяти.
  R2025    Ошибка среды файла.
           Компилятор имеет недостаточные для продолжения ком-
           пиляции значения параметров для обработки доступных
           файлов. Увеличьте  значения  для  FILES= и BUFFERS=
           в Вашем CONFIG.SYS файле и повторите начальную  за-
           грузку.
  R2027    Не определен тег построения с именем tagname в сег-
           менте [BUILDTAGS] файла проекта.
           Определенный тег построения присваивается теме,  но
           не объявляется в файле  проекта.  Тег  игнорируется
           для темы.
  R2033    Контекстная строка в Map сегменте не  определяется
           ни в какой теме.
           В файле проекта  определены  одна  или  более  кон-
           текстных строк,  для  которых  компилятор  не может
           найти темы.
  R2035    Отсутствует   выражение  построения  из  проектного
           файла.
           Темы имеют теги построения,  однако в файле проекта
           нет Build= выражения.  Компилятор включает все темы
           в построение.
  R2037    Не может быть создан файл с именем filename, вслед-
           ствии предыдущей ошибки (ошибок).
           Help файл ресурса не может быть создан из-за  того,
           что компилятор  не имеет тем,  остающихся для обра-
           ботки. Исправьте ошибки,  предшествующие этой ошиб-
           ке, проведите повторную компиляцию.
  R2039    Нераспознаваемое форматирование  таблицы  в  теме с
           именем topicnumber файла с именем filename.
           Компилятор игнорирует форматирование таблицы, кото-
           рая не поддерживается в Help.  Переформатируйте за-
           писи как линейный текст, если это возможно.
  R2041    Неразрешим переход context_string в теме с  именем
           topicnumber файла с именем filename.
           Определенная тема содержит контекстную строку, ко-
           торая идентифицирует несуществующую тему. Проверьте
           орфографические ошибки  настолько,  чтобы  желаемая
           тема была включена в построение.
  R2043    Текст "горячего листа" не может распространяться по
           параграфам.
           Термин перехода  соединяет  два параграфа.  Удалите
           форматирование из маркера параграфа.
  R2045    Максимальное количество позиций табуляции достигну-
           то в теме  с  именем  topicnumber  файла  с  именем
           filename.
           Ограничение из 32 позиций табуляции превышено в оп-
           ределенной теме.   После  32-го  символа  табуляции
           используются определенные по умолчанию позиции  та-
           буляции.
  R2047    Файл с именем filename не создан.
           Нет тем для компиляции или выражение построения яв-
           ляется ложным для всех тем.  Не создается Help файл
           ресурса.
  R2049    Текст контекстной строки слишком длинный в  теме  с
           именем topicnumber файла с именем filename.
  R2051    Файл с именем filename  является  неправильным  RTF
           тематическим файлом.
           Определенный файл не является RTF файлом. Проверьте
           сохранили ли  Вы  тему  из Вашей системы подготовки
           текстов как RTF файл.
  R2053    Шрифт  с  именем  fontname  в файле с именем file-
           name отсутствует в RTF таблице шрифтов.
           Шрифт не определен в RTF заголовке,  который введен
           в тему. Компилятор использует определенный по умол-
           чанию шрифт системы.
  R2055    Файл с именем  filename  не  является  используемым
           RTF тематическим файлом.
           Заданный файл содержит правильный RTF заголовок, но
           содержание не является RTF или разрушается.
  R2057    Нераспознаваемый  графический  формат в теме с име-
           нем topicnumber файла с именем filename.
           Компилятор поддерживает только Windows растры. Про-
           верьте, чтобы   не   использовались  метафайлы  или
           Macintosh форматы. Графика игнорируется.
  R2059    Идентификатор контекстной строки  уже  определен  в
           теме с именем topicnumber файла с именем filename.
           Есть более,  чем  одна  сноска  идентификатора кон-
           текстной строки для определенной  темы.  Компилятор
           использует определенный в первой #сноске.
  R2061    Строка контекста с именем contextname уже  исполь-
           зовалась в файле с именем filename.
           Определенная контекстная строка ранее присваивалась
           другой теме. Компилятор игнорирует эту вторую стро-
           ку и тема остается без идентификатора.
  R2063    Неправильный  идентификатор  контекстной строки для
           темы с именем topicnumber файла с именем filename.
           Сноска контекстной строки не содержит буквенно-циф-
           ровых символов или является пустой.  Теме идентифи-
           катор не присваивается.
  R2065    Контекстная строка, определенная для индексной те-
           мы, является неразрешимой.
           Не может быть найдена индексная тема,определенная в
           файле проекта.  Компилятор использует первую тему в
           построении в качестве индекса.
  R2067    Текст  сноски  слишком  длинный  в  теме  с  именем
           topicnumber файла с именем filename.
           Текст сноски не может превышать ограничение из 1000
           символов. Сноска игнорируется.
  R2069    Сноска  тега построения находится не в начале  темы
           с именем topicnumber файла с именем filename.
           Заданная тема содержит сноску тега построения,  ко-
           торая не является первым символом в теме.  Теме  не
           присваивается тег построения.
  R2071    Отсутствует  текстовая  сноска в  теме   с   именем
           topicnumber файла с именем filename.
           Заданная тема содержит  сноску,  которая  не  имеет
           символов.
  R2073    Строка  ключевого  слова  является  пустой в теме с
           именем topicnumber файла с именем filename.
           Сноска ключевого слова существует для заданной  те-
           мы, однако она не содержит символов.
  R2075    Строка ключевого слова слишком  длинная  в  теме  с
           именем topicnumber файла с именем filename.
           Текст в сноске ключевого слова в заданной теме пре-
           вышает ограничение из 255 символов.  Лишние символы
           игнорируются.
  R2077    Ключевое слово (слова) определены  без  заголовка в
           теме с именем topicnumber файла filename.
           Ключевое слово  (слова) определено для заданной те-
           мы, однако заголовок теме не присвоен. Search Topic
           Found выводит на дисплей Untitled Topic < для темы.
  R2079    Строка  последовательности  просмотра является пус-
           той в  теме  с  именем  topicnumber  файла с именем
           filename.
           Сноска последовательности  просмотра  для  заданной
           темы не содержит символов последовательности.
  R2081    Строка последовательности просмотра слишком длинная
           в теме с именем topicnumber файла с именем filename.
           Сноска последовательности  просмотра  для  заданной
           темы превышает ограничение из 128 символов.  После-
           довательность игнорируется.
  R2083    Отсутствует номер последовательности в теме с  име-
           нем topicnumber файла с именем filename.
           Для заданной темы номер последовательности просмот-
           ра заканчивается двоеточием (:).  Удалите двоеточие
           или введите "младший" номер последовательности.
  R2085    Номер  последовательности  уже  определен  в теме с
           именем topicnumber файла с именем filename.
           Уже существует  сноска последовательности просмотра
           для заданной темы.  Последняя из них последователь-
           ность игнорируется.
  R2087    Тег построения слишком длинный.
           Тег построения   для  определенной  темы  превышает
           максимум из 32 символов.  Этот тег игнорируется для
           темы.
  R2089    Пустая  строка  заголовка  для темы с именем topic-
           number файла с именем filename.
           Сноска на заголовок для заданной темы  не  содержит
           символов. Заголовок теме не присваивается.
  R2091    Заголовок слишком длинный  в теме с  именем  topic-
           number файла с именем filename.
           Заголовок для заданной темы  превышает  ограничение
           из 128 символов. Лишние символы игнорируются.
  R2093    Заголовок  titlename  в  теме  с именем topicnumber
           файла с именем filename использовался ранее.
  R2095    Заголовок, определенный более одного  раза,  в теме
           с именем topicnumber файла с именем filename.
           Существует более чем одна сноска заголовка в задан-
           ной теме. Компилятор использует первую строку заго-
           ловка.
  R2501    Использование строкой таблицы ключевых слов.
           Максимальное сжатие  может  быть  получено   только
           посредством удаления  .PH перед каждой перекомпиля-
           цией Help тем.
  R2503    Выход за пределы памяти во время сжатия текста.
           Компилятор встретил  ограничение  памяти  во  время
           сжатия. Компиляция  продолжается  с  использованием
           несжатого Help файла ресурсов.  Выгрузите любые не-
           нужные программы,  драйверы  устройств  и программы
           резидента памяти.
  R2505    Ошибка среды файла во время сжатия текста.
           Компилятор имеет недостаточные для сжатия  значения
           параметров, задающих  допустимое количество обраба-
           тываемых файлов. Компиляция продолжается с несжатым
           Help файлов  ресурсов.  Увеличьте  значения  FILES=
           и BUFFERS= в Вашем CONFIG.SYS файле и повторите на-
           чальную загрузку.
  R2507    Ошибка DOS файла во время сжатия текста.
           Компилятор столкнулся  с проблемой доступа к диско-
           вому файлу во время сжатия. Компиляция продолжается
           с несжатым Help файлом ресурса.
  R2509    Ошибка во время сжатия текста.
           Имеет место  одна  из  трех  ошибок сжатия - R2503,
           R2505 или R2507. Компиляция продолжается с несжатым
           Help файлом ресурса.
  R2701    Внутренняя ошибка.
  R2703    Внутренняя ошибка.
  R2705    Внутренняя ошибка.
  R2707    Внутренняя ошибка.
  R2709    Внутренняя ошибка.
 ───────────────────────────────────────────────────────────













