Зайцев О.В.,Смоленск,1996 Создание мультимедиа книг, справочников и энциклопедий в формате HLP файла под Windows 3.1 и Windows 95 на базе текстового файла Microsoft Word 6.0-7.0. Создание систем контекстной помощи для программ, написанных на Delphi 32, C for Windows ... Содержание Возможности системы. Порядок создания книги из документа Word.Книга представляет собой стандартный файл подсказок Windows. Он может быть просмотрен без применения специальной программы - оболочки, потенциально не может быть заражен вирусом, что дает ему определенные преимущества при распространении книги. Кроме того, при создании HLP-файла производится его архивация, что дает заметный выигрыш в объеме. Система обладает практически неограниченными возможностями ввиду того, что имеется возможность запускать любые программы DOS и Windows из любой точки текста по команде пользователя (нажатие мышкой на «горячий участок» или кнопку в тексте или автоматически, например, при вхождении в раздел). Имеется возможность выполнения ряда внутренних команд Windows и программы просмотра HLP - файлов, входящей в комплект поставки Windows. Имеется возможность создавать оглавление книги, меню; кнопки, предназначенные для перемещения по разделам. К любому участку текста можно привязать всплывающий комментарий, определенную функцию или всплывающее меню. Имеется возможность вставки сегментированных рисунков - рисунков, разбитых на зоны, с каждой из которых можно связать определенные действия. При нажатии мышкой на такую зону происходит выполнение этих действий - контекстного перехода, выполнения макроса, и т.п.. Главное применение системы HELP - создание контекстной системы помощи для программ, разработанных под Windows, например на языках Delphi 2, Borland C 5.0 и др., что позволяет организовывать контекстную систему помощи, причем переделки готового проекта почти не требуется. Далее по тексту для простоты будем называть HELP -систему книгой (это отчасти действительно так, т.к. система HELP является мультимедиа книгой с богатейшими возможностями в плане оформления). ^ Для создания HELP системы необходимо иметь текст в формате Microsoft Word 6.0 - 7.0. Если текст имеется в другом формате, необходимо конвертировать его в формат Word. После этого производится разбиение текста на разделы, каждый раздел снабжается заголовком, номером, и прочими атрибутами. В текст вносятся макрокоманды, производится создание кнопок, меню. Все эти действия производятся из среды Word. После подготовки текста он записывается в формате RTF (Rich Text Format). Затем производится написание файла-проекта HPJ (Help Project File), который является набором параметров и переменных для компилятора и компиляция утилитой hc31.exe. Далее при необходимости создается файл-содержание CNT. ^ В процессе создания книги возникает необходимость вставлять в текст книги макросы управления. Все макрокоманды вносятся в текст в виде скрытого текста или сносок, горячие участки выделяются подчеркиванием разного сорта, параметры заголовка определяются с помощью сносок и параметров шрифта, разделение тем производится при помощи знака «разрыв», поэтому перед работой необходимо произвести следующие настройки: В меню Сервис/Параметры/Вид в разделе «Непечатаемые символы» включить опцию «Скрытый текст» Убедиться, что в меню «Вставка» имеются пункты «Разрыв ...» и «Сноска ...», если их там нет, то их необходимо добавить при помощи мастера настройки, вызываемый из меню Сервис/Настройка/Меню. Опыт создания HELP-систем говорит о том, что очень часто придется использовать вызов окна настройки шрифта (правая кнопка мыши над необходимым текстом, в появившемся меню пункт «Шрифт»), поэтому имеет смысл назначить горячую клавишу для вызова окна настройки шрифта. Для этого необходимо вызвать мастер конфигурации (меню Сервис/Настройка/Клавиатура), выбрать в окне «Категории» категорию «Формат», после этого в окне «Команды» выделить команду «FormatFont», затем войти мышкой в строку «Новое сочетание клавиш», нажать горячее сочетание (кнопка ALT + буква или CTRL + буква) и если это сочетание Вас устраивает, то нажать мышкой кнопку «Назначить». В настоящее время разработан шаблон Word, содержащий необходимые панели инструментов. Он заметно облегчает работу с документом, т.к. позволяет легко вносить основные макрокоманды, изменять параметры шрифта и подчеркивания. Beta-версия этого шаблона прилагается к книге. Для его инсталляции необходимо: Создать каталог для хранения в нем шаблона. В этом обычно нет необходимости, т.к. шаблоны хранятся в каталоге MsOffice/Шаблоны и если этот каталог есть, то рекомендуется использовать именно его.
После этого при необходимости работы со спецпанелью инструментов необходимо поместить мышку над любой видимой в данный момент панелью и нажать правую кнопку. При этом всплывет список панелей, в котором необходимо выбрать панель «Help файлы». ^ Для компиляции готового проекта применяется специальная утилита hc31.exe, которая запускается из DOS. Командная строка для запуска: hc31.exe имя_файла_проекта[.hpj] Имя утилиты может отличаться от приведенного, например, h31. Утилита обрабатывает предложенный ей проект (далее по тексту HPJ-файл) и если не произошло критических ошибок, то создается результирующий файл помощи Windows (далее по тексту HPL-файл). Для упрощения работы рекомендуется для каждого проекта создавать отдельный каталог, собирать там все файлы, фигурирующие в проекте и на время работы скопировать туда утилиту h31.exe. Это упрощает работу и написание HPJ файл ввиду того, что нет необходимости применять полные имена файлов. К утилите hc31.exe прилагается файл hc31.err, который задает соответствие между названиями ошибок и их номерами. В случае отсутствия этого файла система выдает только номера, при наличии - номера + названия. Этот файл можно редактировать с помощью любого DOS редактора. К книге прилагается русифицированный мной hc31.err. HPJ файл представляет собой текстовый ASCII файл, содержащий исходные данные для hc31.exe. Следует обратить особое внимание на то, что далее подробно описан формат HPJ файла компилятора HC31. В настоящее время появился более современный компилятор HCW - Microsoft Help Workshop, который имеет неплохой интерфейс и позволяет производить полуавтоматическое создание HPJ,CNT и прочих файлов. Он совместим с HC31, но эта совместимость односторонняя - HC31 не распознает HPJ файлы, созданные на HCW. Большинство разделов и команд HPJ файлов одинаково для HCW и HC31, различия в основном в семантике. Ввиду того, что в HCW написание HPJ файла идет в режиме диалога, дополнительного описания к нему не требуется. Рассмотрим подробно структуру HPJ файла и приведем ряд примеров. HPJ файл содержит ряд разделов, каждый из которых имеет определенное имя, указываемое в отдельной строке в квадратных скобках (см. пример 1). Последовательность разделов произвольна, но рекомендуется перечислять их в том порядке, в каком они указаны в примерах. Приведем данные, необходимые для написания основных разделов. В каждом разделе имеется ряд переменных, наличие которых в файле HPJ не всегда обязательно. Значения переменных записываются через знак равенства «=», в одной строке должна быть одна только переменная! По аналогии с языком Ассемблер в тексте HPJ файла могут встречаться комментарии, они записываются после « ; », пример : ; комментарий ^ Содержит ряд переменных: CONTENTS - идентификатор темы, которая будет являться главной и показываться по умолчанию; латинскими буквами, не должен содержать пробелы, необязателен. Обычно это содержание, его располагают первым в документе Word и тогда эту команду можно опустить. TITLE - заголовок , показывается в заголовке окна при просмотре, на кнопке переключателя задач W95 и в окне «О программе»; COMPRESS - тип архивации, возможны варианты : False или 0 или No - не архивировать True или 1 или Yes - архивировать, степень сжатия - высшая Medium - архивировать, степень сжатия - среднее High - архивировать, степень сжатия - высшее COPYRIGHT - строка с правами на копирование, будет показываться при вызове окна «О программе» CITATION - добавление к COPYRIGHT или ее дубликат; это строка, автоматически добавляемая к тексту, копируемому из окна HLP файла в Clipboard и напоминающая копирующему о авторских правах на книгу ICON - имя файла-иконки, который будет назначен как иконка для создаваемого HLP файла LANGUAGE - содержит имя доминирующего в тексте языка (для корректной сортировки по алфавиту, в русской W95 это параметр не особо актуален) OPTCDROM - переменная типа Boolean, указывает компилятору на то, что HLP необходимо оптимизировать для наиболее быстрой работы при его размещении на CDROM диске ERRORLOG - имя файла, в который утилита компиляции будет записывать информацию о возникающих ошибках и предупреждения. Если этот файл не указан, то информация выводится на экран. ROOT - строка, аналогичная PATH в DOS - содержит перечень путей для поиска файлов, перечисленных в проекте. Если предлагается несколько путей, то они перечисляются через запятую. Под путем понимается полный путь (например «С:\DOS») BMROOT - то же, что ROOT, но содержит список путей к картинкам BUILD - указывает, какие темы должны быть включены в результат (список тем), применяется редко. Представляет собой строку, в которой записано логическое выражение вида: BUILD = идентификатор_компиляции * идентификатор_компиляции ... где * - символ операции
идентификатор_компиляции - идентификатор, определяемый в сноске «*» заголовка темы (см.). Все идентификаторы компиляции, используемые в строке BUILD обязательно должны быть перечислены в разделе [BUILDTAGS]. Примеры BUILD = ~ MIDI - компилировать все темы, кроме тем с идентификатором компиляции MIDI BUILD = Multimedia & Delphi32 - все темы, имеющие идентификаторы компиляции Multimedia и Delphi32. FORCEFONT - строка представляет собой имя шрифта, который должен быть использован в случае, если использованный в тексте шрифт не установлен на данном компьютере. WARNING - цифра 1-3, указывает компилятору уровень ошибок, о которых необходимо сообщать пользователю 1 - сообщать только о самых страшных 2 - средний уровень - самые опасные + средние по тяжести 3 - сообщать о всех ^ Содержит макросы, выполняемые при запуске системы просмотра книги. BrowseButtons() - это макрокоманда; если ее включить в этот раздел, то на панели кнопок окна просмотра HLP файлов будут созданы две кнопки прокрутки по разделам - >> и <<. Подробно о этих кнопках см. в разделе о создании заголовков. RegisterRoutine("DLL-name", "function», "format») - зарегистрировать функцию function библиотеки с именем DLL-name, формат вызова format. Зарегистрированная функция имеет статус макроса системы HLP и может использоваться наряду с встроенными. Format кодирует набор параметров, передаваемых макросу :
Пример : RegisterRoutine("MMLIB", "PlayAudio", "SIU") ^ Этот раздел содержит перечень текстовых файлов, входящих в проект. Эти файлы должны быть записаны в формате RTF , их количество в принципе не ограничено. Если в разделе [OPTIONS] нет переменной CONTENTS, то в качестве активной темы используется первая тема первого из файлов, находящихся в списке. Если в тексте RTF файлов нет специальных макросов для кнопок перемотки, то они создаются автоматически - при нажатии на кнопки перемотки будет происходить переход от раздела к разделу. Пример - см. примеры написания HPJ файлов далее по тексту. ^ В этом разделе содержится информация для использования этого HLP файла в качестве файла контекстной помощи в программе, написанной на С под Windows (например, BC4.5), Delphi 32 и т.п. Это апробировано мной в программах на Delphi 32 и показало отличные результаты. Информация представлена в виде строк соответствия вида контекстное_имя_заголовка_пункта его_номер Пример tema_1 1 main_help_item 3 Возможна вторая форма записи (привычная для программистов в C++) : #define контекстное_имя_заголовка_пункта его_номер Если таких строк очень много, то можно не загромождать HPJ файл и вместо списка строк в разделе [MAP] указать : #include "имя_файла" - указать на текстовый файл, в котором и записать эти строки соответствия. Но как показал опыт, удобнее всего первая форма записи (она короче и практичнее) и размещение этих данных в HPJ файле. Подробно и контекстных именах - в разделе о создании заголовка и примере 1. ^ В этом разделе содержится перечень BMP файлов, фигурирующих в макросах вставки картинки в текст bmc, bml, и bmr. Более подробно о этом см. в разделе о создании в тексте кнопок и иконок. Поиск файлов картинок производится в текущем каталоге и каталогах, объявленных в переменной BMROOT раздела [OPTIONS]. В последних версиях HLP компиляторов (например Microsoft Help WorkShop) этот раздел потерял смысл и отсутствует - компилятор сам ищет картинки. ^ Раздел со списком параметров первичного и вторичных окон системы просмотра. Этот раздел содержит набор строк вида: имя_окна = "заголовок", (x, y, ширина, длинна), масштабирование, (clientRGB), (nonscrollRGB), (fTop) где имя_окна - имя окна в системе, латынь без пробелов, main - имя главного окна заголовок - строка, выводимая в заголовке окна. Заголовок главного окна может задаваться в разделе [OPTIONS] x, y - координаты верхнего левого угла окна. Есть особенность - система полагает, что весь экран имеет размер 1024 на 1024 точек, если это не так, то производится пересчет; при этом соответственно 1,1 - верхний левый угол любого экрана; 1024,1024 - нижний правый; 512,512 - центр. Это удобно, т.к. местоположение окна не зависит от текущей разрешающей способности видеосистемы. ширина, длинна - размеры окна масштабирование - параметр масштабирования окна, может принимать значения: 0 - при создании окна использовать значения переменных x , y, ширина, длинна; 1 - максимизировать размер и игнорировать значения x , y, ширина, длинна. (clientRGB) - три цифры через запятую, указывают значения RGB, определяющие цвет фона в окне. Узнать значения RGB для любого цвета можно при помощи редактора Paint. Для этого необходимо вызвать этот редактор, войти в меню Параметры/Изменить палитру, в появившемся окне нажать кнопку «Определить цвет >>», установить требуемый цвет и после этого считать данные RGB с соответствующих переменных окна. (nonscrollRGB) - три цифры через запятую, указывают значения RGB, определяющие цвет фона «не перематываемого» текста, в частности для панели управления. (fTop) - параметр размещения окна: если=1, то поверх всех окон, кроме уже существующих с подобным атрибутом; если=0, то окно имеет рядовой приоритет и может оказаться под другими окнами. Важное примечание !! Любой из параметров можно опустить, оставив при этом просто запятые, тогда берутся параметры по умолчанию. Например, нет необходимости задавать цвета и заголовок окна, координаты угла и размер : main =, (, , , ), 0, (, , ), (, ,) ^ Это раздел с «псевдонимами» контекстных строк. В нем задается список соответствия имен контекстных строк и их псевдонимов вида : контекстное_имя = псевдоним Псевдоним эквивалентен контекстному имени и может использоваться вместо него в макросах и секции [MAP]. Реальное применение для небольших книг ему придумать сложно, в больших вместо контекстных имен удобно в тексте использовать сокращения (например t023 - тема 23), а затем в этом разделе присвоить им длинные смысловые псевдонимы ( t023 main_book_glossary), и в тексте книги могут фигурировать как переходы к t023, так и к main_book_glossary, они будут абсолютно равноценны. Кроме того, имеется возможность изменять контекстные строки без переделки RTF файлов и использовать один псевдоним для разных контекстных строк. Это решает важнейшую проблему с объединением тем: было например 3 темы, каждая со своим контекстных имен, на каждое из которых идут ссылки в макросах переходов по всему тексту. Эти три раздела объединяются в один и он имеет свое контекстное имя. Тогда все ссылки на предыдущие контекстные имена будут потеряны и придется переделывать весь текст (изыскивать в нем контекстные имена объединенных разделов и заменять его на новое для суммарного). Гораздо проще назначить один псевдоним, совпадающий с именем новой темы для имен 3х старых. ^ В этом разделе содержится перечень файлов, которые должны быть внедрены в HLP файл (фирменное руководство рекомендует затем самим создать DLL для того, чтобы их оттуда доставать). Всего таких файлов - <1000. ^ В этом разделе содержится перечень используемых в переменной Build раздела Options идентификаторов компиляции. Пример написания HPJ файла; Пример №1 по написанию HPJ файла ; (С) Зайцев О.В.,1996+ [OPTIONS] CONTENTS = tema_0 TITLE = Electronic Book ^ ERRORLOG = errors.inf [CONFIG] BrowseButtons() CreateButton(«О &книге», «About()») [FILES] text1.rtf text2.rtf [MAP] tema_0 001 tema_1 002 [BITMAPS] ris001.bmp ris002.bmp ris003.bmp [ALIAS] t003=t002 t004=t002 t005=t002 lbl1=picture_label ^ Для создания HLP файла в исходный текст книги вставляют символы управления и макросы. Создание темы и ее основные компоненты, правила созданияРазделом является участок текста, заключенный между двумя точками разрыва страницы. Первый раздел ограничен сверху началом файла и ограничивать его сверху точкой разрыва страницы нельзя. Эти точки вносятся в текст командой меню вставка/разрыв. В появившемся окне в разделе «Начать» необходимо выбрать пункт «Новую страницу» и нажать «ОК», после чего в текст будет вставлен разрыв страницы. Эту и прочие операции удобно вести в режиме Вид/Обычный, т.к. в этом режиме Word показывает разрывы страниц. Необходимым атрибутом темы является ее заголовок, который одновременно с информацией для пользователя (какой раздел он смотрит) несет информацию для системы. Эта информация записывается в сносках к заголовку. Символ сноски несет информацию о тем, какие данные содержатся в сноске. Каждая сноска несет информацию для системы. Приведем таблицу сносок и их назначение (все литеры, обозначающие сноску - латинские) :
Следует заметить, что каждая из сносок может многократно повторяться или отсутствовать. Сноска # является почти обязательной, но в некоторых случаях ее роль может играть сноска +, остальные сноски применяются по необходимости. Повторение одной и той же сноски позволяет, например, привязать к заголовку несколько макросов, а не один. Пример : #$~K Демонстрация текстовых возможностей - цвета, шрифты ... ------------ текст раздела ------ текст раздела --------- В окне «сноски» - содержание сносок # dd1 $ Демонстрация текстовых возможностей - цвета, шрифты ... ~ 002 K Демонстрация текстовых возможностей - цвета, шрифты ... В заключении следует отметить, что в одной теме может быть несколько заголовков. В данном случае они выступают в роли информационных точек и позволят, например, осуществлять переходы не к теме, а к конкретной точке внутри темы (например, к формуле). ^ Горячие участки текста предназначены для выполнения операций контекстного перехода. Переход совершается на любую тему книги, снабженную контекстным именем (см. сноску «#» заголовка темы) или на любую точку текста, которому присвоено контекстное имя. В предлагаемом алгоритме особое внимание следует обратить на подчеркивание, атрибуты текста - это несет информацию для компилятора. Для создания горячего участка необходимо :
Если все проделано верно, то Вы увидите : Мультимедиаdd10 ^ Всплывающий комментарий - небольшая тема (обычно 1 - 15 строк), показываемая системой в отдельном окне при нажатии на горячий участок текста. Комментарий может содержать горячие участки текста и макросы. Алгоритм создания :
Если все проделано верно, то Вы увидите : ^ К моменту вызова пользователем всплывающего окна можно привязать определенные действия - добавить сноску «!» к заголовку темы для всплывающего окна. ^ Эти горячие участки текста применяются для выполнения любой из макрокоманд, список и краткое описание которых приведен далее. Алгоритм:
Если все проделано верно, то Вы увидите : Воспроизвести файл 3D-Studio (FLI файл)!ExecProgram(`fliplay.exe demo.fli', 0) ^ Любая тема может быть выведена во вторичном окне (создание темы и позиция в нем - как для первичного окна, более того, одна и та же тема может выводится как в первичном окне, так и во вторичных). Для вывода темы во вторичном окне применяется команда, созданная по алгоритму:
Следует заметить, что значок «>» - признак направления и расшифровывается как «вывести в». Имя вторичного окна должно быть задано вместе с его параметрами в секции [Windows] HPJ файла. Если все проделано верно, то Вы увидите : Мультимедиаtema10>win2 ^ Наряду с использованием в качестве «горячих участков» для вызова макросов, переходов и т.п. участков текста имеется возможность создавать «кнопки» и «иконки» - рисунки в тексте, нажатие мышкой на которые приводит к определенным действиям. Здесь имеется полная аналогия между текстом и картинкой - она вносится в необходимое место текста средствами вставки рисунков Word или через буфер обмена, так же как текст выделяется блоком и подчеркивается необходимым образом (см. подробно в алгоритмах создания контекстных переходов, вставке макросов ... - вместо «горячий участок текста» будет фигурировать «рисунок»). Проведем пример : ![]() Кроме того, в некоторых случаях необходимо вставлять массу одинаковых картинок , или их внедрение в текст в стадии создания исходного текста по какой-либо причине нежелательно (например, i386 с 2 Мб ОЗУ - работа с текстом сильно замедлится) - тогда удобно применять макрос внедрения картинки. Этот макрос записывается следующим образом : {bm* имя_файла_картинки_с_расширением} {bm*wd имя_файла_картинки_с_расширением} имя_файла_картинки_с_расширением - имя файла, в котором следует искать картинку. Имя этого файла обязательно заносится в список картинок, задействованных в проекте (секция [BITMAPS] HPJ файла) и при необходимости указывается список путей, по которым эту картинку следует искать (переменная BMROOT секции [OPTIONS] HPJ файла) Если картинка используется в тексте несколько раз и вставка ведется командой bm* , то в HLP файле она физически наличествует лишь в одном экземпляре, что уменьшает его размер. При вставке командой bm*wd каждому такому макросу вставки картинки соответствует физически расположенная в этом месте файла картинка, что ускоряет работу системы при размещении файла на CDROM диске. Размер картинки не должен превышать 64 Кб. * - метод вставки, на месте * должно стоять : c - выводить картинку по центру окна l - выводить от левого края r - выводить от правого края Примеры : {bmc demo.bmp} {bmlwd demo.bmp} Макрокоманда вставки картинки полностью эквивалентна картинке, поэтому создание «кнопки» аналогично рассмотренному выше. Пример : {bml demo.bmp}!FileOpen() Обрамление текста - допустимо применять все основные элементы обрамления текста - рамки, линии разделители и т.п. . Кроме того, если в процессе работы с готовым HLP файлов меняется размер окна или конфигурация текста , то эти линии автоматически перестраиваются и подгоняются под новое расположение текста. ^ Сегментированные рисунки создаются из обычных BMP картинок при помощи редактора Shed (он прилагается). Формат такого рисунка не воспринимается Word-ом и поэтому они вставляются только при помощи команд bm*, описанных в разделе 3.6. МакрокомандыПриведем данные по макрокомандам по разделам. Внимание !! Необходимо обратить особое внимание на символ кавычек. По всему тексту это ` ' (символы с кодами 64 и 7 шрифта Times New Roman Cyr соответственно). В тексте это правило соблюдено только в примерах, весь остальной текст содержит кавычки произвольной формы. ^ History() - вызвать окно с списком последних 40 тем, к которым были переходы Annotate() - вызвать окно редактора примечаний, в котором читатель может сделать свои пометки к данной теме. Search() - вызвать окно поиска по слову, названию раздела ... Contents() - перейти к разделу, который в HPJ файле заявлен как содержание Next() - перейти к теме с следующим номером прокрутки (см. макрос + в заголовке темы) Prew() - перейти к теме с предыдущим номером прокрутки Print() - распечатать текущий раздел PrinterSetup() - вызвать окно настройки принтера Exit() - выйти из системы просмотра CopyTopic() - переслать текст всего раздела в буфер обмена CopyDialog() - вызвать окно, в котором выделяется текст для передачи в буфер обмена (под W95 не актуален) HelpOn() - показать помощь по помощи (стандартный HLP файл Windows, в котором описана система просмотра HLP- файлов и описано, как с ней работать) SetHelpOnFile(«имя_файла») - указать системе, какой файл содержит справку по системе просмотра HLP файлов - удобно, если необходимо применить нестандартное описание. FileOpen() - вызвать окно запроса на переход в другой HLP - файл - очень удобно использовать для предоставления пользователю возможность переходить из книги в книгу. ^ ExecProgram("командная строка", тип_запуска) - выполнить внешний исполнимый файл DOS или Windows (*.exe, *.com, *.pif, *.bat). Параметр тип_запуска показывает системе, как необходимо запустить программу : 0 - в окне нормального размера 1 - в минимизированном окне (свернув в кнопку на панели переключателя задач W95) 2 - в окне максимального размера ^ BrowseButtons() - добавить в панель кнопок кнопки перемотки по разделам «<<» и «>>». Обычно этот макрос помешают в разделе [CONFIG] HPJ файла. CreateButton(«текст на кнопке», «макрокоманда») - создает на панели кнопок кнопку , нажатие на которую приводит к выполнению макрокоманды. Используется только в разделе [CONFIG] HPJ файла. Если с текстом на кнопке необходимо связать горячую букву, то перед ней ставят знак &. CreateButton(«button_ID»,«текст на кнопке», «макрокоманда») - создает на панели кнопок кнопку , нажатие на которую приводит к выполнению макрокоманды. «button_ID» - имя кнопки в менеджере кнопок системы, является ее идентификатором для обращения, не должно повторятся. DisableButton("button_ID") - запретить кнопку. Текст кнопки становится рельефным и бледным, на кнопку нельзя нажать мышкой. Имя макроса можно сократить до DB. EnableButton("button_ID") - разрешить кнопку. Текст кнопки становится нормальным, на кнопку можно нажать мышкой. Имя макроса можно сократить до ЕB. ChangeButtonBinding("button_ID", "макрокоманда") - изменить функцию кнопки с именем-идентификатором button_ID. Можно сократить имя этого макроса до C BB. Этот макрос очень удобен для случая, когда одна и та же кнопка должна выполнять различные функции (Например, во всех разделах имеется кнопка «показать рисунок», но рисунок в каждом разделе свой - тогда и используется эта команда) DestroyButton("button_ID") - уничтожает кнопку с именем-идентификатором button_ID. Макросы работы с кнопками удобно связывать с заголовками разделов - при вхождении в раздел создаются, удаляются ... соответствующие кнопки. Пример: ![]() ^ В системе можно определять неограниченное количество закладок и осуществлять переходы по ним. Достоинство закладок - они создаются самим пользователем во время работы с книгой. Для работы с закладками имеется две функции : BookMarkDefine() - вызвать окно создания закладок в тексте BookmarkMore() - вызвать окно для перехода к любой из существующих закладок. Для работы с примечаниями имеется функция : Annotate() - вызвать окно редактора примечаний, в котором читатель может сделать свои пометки к данной теме. ^ Для работы с окнами имеется ряд макрокоманд : CloseWindow("window-name") - закрыть окно с именем window-name. Имя окна задается в разделе [Windows] HPJ файла FocusWindow("window-name") - сделать окно с именем window-name активным HelpOnTop() - указывает системе, что окно должно быть поверх всех окон в Windows PositionWindow(x, y, ширина, длинна, " window-name") - задает параметры окна с именем window-name: координаты верхнего левого угла, размер. Подробно о этих параметрах см. описание раздела [Windows] HPJ файла ^ Имеется возможность создавать переменные типа Boolean - логический тип, принимающий значения true - истина или false - ложь. Такие переменные очень удобно применять для конфигурирования системы - есть или нет Sound Blaster и т.п. Кроме того, как «побочный эффект» имеется возможность использовать маркер как точку в тексте, к которой можно произвести переход. SaveMark("marker-text") - создать маркер с именем marker-text DeleteMark("marker-text") - удалить маркер с именем marker-text GoToMark("marker-text") - перейти на маркер с именем marker-text IsMark("marker-text") - возвращает true, если маркер с именем marker-text существует и false, если нет Not(IsMark("marker-text")) - логическая инверсия IsMark IfThen(IsMark("marker-text"), "macro") - выполняет макрокоманду macro если существует маркер с именем marker-text IfThen(Not(IsMark("marker-text")), "macro") - выполняет макрокоманду macro если не существует маркер с именем marker-text IfThenElse(IsMark("marker-text"), "macro1", "macro2") - выполняет макрокоманду macro1 если существует маркер с именем marker-text или macro2, если маркер с именем marker-text не существует (классический оператор if ... then ... else) Пример использования маркеров : в меню конфигурации ^ !SaveMark("SB-OK") В системе нет платы Sound Blaster!DeleteMark("SB-OK") где-то в тексте ....проиграем звук!IfThen(IsMark("SB-OK"), "ExecProgram(«mplayer.exe demo.wav»)") для примера ... макрос ExecProgram срабатывает только в том случае, если пользователь после запуска нажал на пункт меню В системе есть плата Sound Blaster. ^ Часто при разработке HLP системы может возникнуть необходимость часто выполнять определенные действия - переход к оглавлению, запуск определенных программ, переход из одной системы другую и т.п. . Для этого в системе предусмотрена возможность назначения определенным действиям горячей комбинации клавиш AddAccelerator(key, shift-state, «macro») - выполнить макрос macro, если нажата клавиша с кодом key и спец- клавиши нажаты в соответствии с shift-state. Кодирование shift-state: 0None ^ 3 SHIFT+CTRL 4 ALT 5 ALT+SHIFT 6 ALT+CTRL 7 SHIFT+ALT+CTRL Кодирование клавиши в переменной key приведено в таблице 1 приложения. Можно сократить до AA. RemoveAccelerator(key, shift-state) - удалить горячую комбинацию клавиш, соответствующую key, shift-state. Можно сократить до RA. ^ Эти макросы применяются для свободного перехода из одного HLP- файла в другой к любой теме внутри них. После имени filename во всех макросах может стоять запись направления «>имя_окна», где имя_окна - имя того окна, в которое должна выводится информация. Окно должно быть описано в HPJ файле. Пример: JumpId("demo1.hlp>win1", "tema_about_multimedia") JumpContext("filename", number) - перейти к теме с контекстным номером number, находящейся в HLP файле с именем filename JumpId("filename", "context-string") - перейти к теме с контекстным именем context-string, находящейся в HLP файле с именем filename JumpKeyword("filename", "keyword") - перейти к первому из разделов HLP файла с именем filename, содержащему строку keyword PopupContext("filename", context-number) - показать тему с контекстным номером number, находящейся в HLP файле с именем filename в всплывающем окне PopupId("filename", "context-string") - показать тему с контекстным именем context-string, находящейся в HLP файле с именем filename в всплывающем окне ^ При разработке сложных HLP систем может возникнуть необходимость в создании новых пунктов главного меню подпунктов в существующих меню или созданных. InsertMenu("menu-ID", "menu-name", position) - вставить в главное меню пункт меню с идентификатором menu-ID, текст пункта меню menu-name, он будет размещен в главном меню в позиции position. Удалить пункт меню нельзя. Добавлять, вставлять и удалять подпункты меню можно не только в созданных самим пунктах, но и в стандартных, для чего привожу идентификаторы menu-ID для всех стандартных (известных мне) пунктов меню : menu-ID Пункт меню MNU_FILE Файл MNU_EDIT Правка MNU_BOOKMARK Закладка MNU_HELPON ? (вызов подсказки) AppendItem("menu-id", "item-id", "item-name", "macro") - добавить подпункт меню с идентификатором item-id в меню с идентификатором menu-id. Текст подпункта меню - item-name, с этим подпунктом меню связать макрос macro. InsertItem("menu-id", "item-id", "item-name", "macro", position) - вставить подпункт меню с идентификатором item-id в меню с идентификатором menu-id. Текст подпункта меню - item-name, с этим подпунктом меню связать макрос macro, подпункт будет размещен в меню в месте position. Если position=0, то подпункт будет первым. DisableItem("item-id") - запретить подпункт меню с идентификатором item-id. Этот пункт выводится в меню рельефно и на него нельзя «нажать». EnableItem("item-id") - разрешить подпункт меню с идентификатором item-id. Этот пункт выводится в меню нормальным цветом и на него можно «нажать». CheckItem("item-id") - пометить пункт меню флажком «включено» (обычно «птичка») перед строкой названия пункта. Имя макроса можно сократить до CI. UncheckItem("item-id") - снять флажок «включено» перед строкой названия пункта. Имя макроса можно сократить до UI . DeleteItem("item-id") - удалить подпункт меню с идентификатором item-id. ^ В системе Windows 95 появилось весьма полезное расширение возможностей HLP системы - автосодержание. Это многоуровневое меню, раскрывающееся при непосредственном просмотре HLP файла из проводника или при нажатии кнопки содержание в любой момент просмотра помощи. Особенностью автосодержания является то, что оно может объединять несколько HLP файлов, причем имеется возможность явно указать, из какого файла извлекать данный пункт и в каком окне его показывать. Кроме того, любой пункт автосодержания можно связать с макросом (см. систему макрокоманд выше). Недостатки - автосодержание представляет собой отдельный файл (обычно его имя совпадает с именем HLP файла, а расширение - CNT. Поэтому далее по тексту будем называть его CNT файлом) и оно никак не защищено от внешнего вмешательства (это обычный текстовый файл в кодировке Windows, имеющий несложную структуру. Однако этот недостаток является и достоинством, т.к. такой файл можно добавить к уже готовому HLP файлу без вмешательства в его структуру. ^ Файл CNT состоит из небольшого заголовка и непосредственно перечня пунктов многоуровневого меню-содержания. Перед всеми служебными командами в CNT файле ставится «:». В [ ] размещены необязательные параметры, которые можно опустить. :BASE имя_файла.hlp[>имя_окна] - задает имя базового HLP фала. Все темы, для которых нет явного указания на их месторасположение ищутся в этом файле. Кроме того, можно указать имя окна, в котором будут выводиться темы (см. секцию [WINDOWS] HPJ файла. :Title Название темы (с пробелами) - название темы HLP файла. Оно будет выведено в заголовке окна с меню. :Index имя=имя_файла.hlp - добавить файл имя_файла.hlp в индекс (это позволит, например, вести поиск по нескольким HLP файлам, произойдет объединение пунктов предметного указателя) :Link имя_файла.hlp - подключить файл имя_файла.hlp к списку файлов, в которых производится поиск по ключевым словам (макросы Alink и Klink, только в версии 4.0) ^ Строки описания пунктов меню имеют следующий формат: код_уровня Название пункта меню=контекстное_имя_раздела[@имя_файла.hlp] [>имя_окна] где: код_уровня - номер уровня пункта меню. 1- верхний уровень, 2... - подуровни Название пункта меню - название пункта. Может содержать пробелы, символы любого алфавита кроме знака «=». контекстное_имя_раздела - контекстное имя раздела, который необходимо вызвать при двойном щелчке по этому пункту. [@имя_файла.hlp] - имя файла, в котором необходимо искать раздел. Актуально только в случае многофайловой системы. [>имя_окна] - в каком окне показывать. ^ : если пункт меню содержит подпункты, то запись для него состоит только из кода уровня и названия пункта меню. Последующие строки описания подпунктов будут иметь код уровня на единицу больше например: 1 Это пункт меню с подменю 2 Пункт подменю 1=t001 2 Пункт подменю 2=t002 Кроме того, любой подпункт меню сам может иметь подпункты : 1 Это пункт меню с подменю 2 Пункт подменю 1=t001 2 Пункт подменю, который сам имеет подменю 3 Это подменю 1=t0201 3 Это подменю 2=t0202 2 Пункт подменю 1=t002 В любом месте описания меню может стоять команда: :include имя_файла.CNT - вставить в это место меню все меню из файла имя_файла.CNT. Это очень удобно для подключения своих меню к уже готовым. Например, необходимо подключить книгу с описанием MathCad 6.0 к его HLP системе. Для этого находим CNT файл и последней строкой вписываем :include mcad-b.CNT где mcad-b.CNT - СТЕ файл подключаемой книги по MathCad 6.0. Подобный подход очень широко использован в Windows 95 - там очень многие файлы имеют ссылки друг на друга в меню или включают меню друг друга в свои CNT файлы посредством команды include. ^ :Base vbase.hlp :Title База данных по журналам 1 Главное окно и управляющие элементы в нем=main_w 1 Горячие клавиши=hot_key 1 Менеджер работы с таблицами данных 2 Список доступных баз данных=t0701 2 Свойства текущей базы данных=t0702 2 Создание новой базы данных=t0705 2 Удаление текущей базы данных=t0706 2 Параметры доступа и ввод пароля=t0703 1 Настройки 2 Параметры сохранения=t0601 2 Общие параметры=t0602 1 Поиск 2 Поиск по набору полей=t0401 2 Поиск по текущему полю=t0402 1 Редактор примечаний 1 Сортировка 2 Сортировка по текущему полю 2 Приоритетная сортировка ^ winhelp.exe [[-H] [-G[хх]] [-W имя_окна] [-K ключевое_слово][-I контекстное_имя] [-N хх][-P идентификатор] HLP-file] Ключи : -G[хх] Создать файл конфигурации (*.GID) и выход. -H Выдать справку по winhelp -I контекстное_имя Показать тему с указанным контекстным именем. -K ключевое_слово Показать тему с указанным ключевым словом. -N xx Показать раздел с контекстным номером хх (см. описание секции [MAP] HPJ файла). -P идентификатор Показать тему, указанную в идентификаторе в pop-up окне. Идентификатор - ключ -I или -N, например WinHelp -P -N 15 VBASE.HLP -W имя_окна Показать HLP в указанном окне HLP-file Имя HLP файла. Если имя не указано, то предлагается его выбрать. ^ Программа winhelp.exe имеет текстовый файл настроек winhelp.ini. Он представляет особый интерес для программистов, используется в основном раздел [FILES]. Он особенно полезен при работе с CD-ROM или дискетами, когда HLP файл оказывается на сменном носителе или в системе с множеством каталогов. Структура строк раздела: HLP-file=путь[, сообщение] Где : HLP-file - имя HLP файла путь - путь, по которому его необходимо искать сообщение - текстовая строка, которая выводится в окне сообщения в случае, если по указанному пути файл не найден. При нажатии ОК будет произведена попытка найти файл, и в случае неудачи опять появится это окно. Пример: vbase.hlp=f:\vbase\help, Вставьте пожалуйста CD-ROM диск HOME-BASE в устройство F: ^ Файл Win.ini содержит раздел [Windows Help], в котором описаны внутренние параметры программы просмотра HLP файлов. Он состоит из набора переменных: Backtrack=хх - число пунктов в списке окна хронологи (History List ) Help Author=1 - включить режим отладки HLP файлов (между словами Help и Author стоит пробел !). JumpColor=(r,g,b) - цвет «горячего участка» текста, нажатие на который приводит к переходу. По умолчанию зеленый. IFJumpColor=(r,g,b) - цвет «горячего участка» текста, нажатие на который приводит к переходу внутри файла. По умолчанию как JumpColor. PopupColor=(r,g,b) - цвет «горячего участка» текста, нажатие на который приводит к появлению Popup окна . По умолчанию как JumpColor. IFPopupColor=(r,g,b) - цвет «горячего участка» текста, нажатие на который приводит к появлению Popup окна с разделов внутри данного файла. По умолчанию как JumpColor. MacroColor=(r,g,b) - цвет «горячего участка» текста, нажатие на который приводит к выполнению макроса. По умолчанию как JumpColor. Настройка цветов позволяет различать типы «горячих участков» , что немаловажно при отладке и работе с HELP файлами сомнительного происхождения (по цвету легко отличить переход от макроса). ^ Режим отладки включается путем внесения записи Help Author=1 в раздел [Windows Help] файла Win.ini. В режиме отладки в заголовке окна помощи отображаются номера порядковые номера (коды) разделов. Код раздела показывает его физическое местоположение. Действуют следующие комбинации клавиш: CTRL+Shift+стрелка_влево - перейти на тему с порядковым номером не 1 меньше, чем у текущей CTRL+Shift+стрелка_вправо- перейти на тему с порядковым номером не 1 меньше, чем у текущей CTRL+Shift+Home - перейти на тему c кодом 1; CTRL+Shift+End - перейти на тему c максимальным кодом (последнюю тему); CTRL+Shift+J - вызов окна, позволяющего перейти к любой теме по ее порядковому номеру (не путать с номером для прокрутки !), сымитировать запрос программы - переход по номеру из секции MAP HPJ файла. Кроме клавиатурных кодов в меню параметры появляется два новых подпункта: ^ - при выборе этого пункта меню появляется окно, содержащее основные сведения о текущем разделе помощи: порядковый номер (код), название; макросы, выполняемые при входе в раздел; имя окна, в котором отображен этот раздел; полное имя HLP файла, из которого взят этот раздел и версия (судя по всему версия Windows и, соответственно, версия winhelp, необходимая для просмотра ; файл раздела и код раздела. ^ - меню-переключатель. Если оно активно, то при потытке совершить переход или показать Popup окно система будет выдавать меню с сообщением о переходе к такому-то разделу с таким-то номером и просить подтверждения. Если производится попытка выполнить макрос, то в том же окне выводится текст макроса и запрос на его выполнение. Таблица 1. Кодирование события «нажата клавиша» для макросов создания горячих клавиш.
|
![]() | 1. Создание базы данных, таблиц и форм Система Access работает под управлением Windows; таким образом, все преимущества Windows доступны в Access. Это означает, что вы... | ![]() | Интернет-Банкинг ОАО «Далькомбанк» Операционная система: Windows nt4 Workstation, Windows nt4 Server, Windows 2000 Professional, Windows 2000 Server, Windows xp, Windows... |
![]() | Microsoft Windows 98 ... | ![]() | Гоу нпо то профессиональное училище В ос windows xp и Windows Vista включены программы для работы с видео. Это программа Проигрыватель Windows Media для просмотра видеоинформации,... |
![]() | Теоретическая часть вопроса: общие сведения о Microsoft Office; текстовый процессор ms word 0 для Windows 95, основные понятия; табличный процессор ms excel 0 для Windows 95, состав и функции. Практическая часть вопроса Персональная эвм: развернутая структура; структура программного обеспечения; выбор пэвм (если возможно, то по прайс-листу некоторой... | ![]() | Лабораторна робота №2: " Операційна система microsoft windows " Мета роботи: Вивчення структури операційного середовища Windows та основних елементів графічного інтерфейсу |
![]() | Лабораторна робота №2: " Операційна система microsoft windows " Мета роботи: Вивчення структури операційного середовища Windows, основних елементів графічного інтерфейсу | ![]() | Интегрированная система Delphi Delphi Реализация среды разработки проектом Lazarus (Free Pascal, компиляция в режиме совместимости с Delphi) позволяет использовать его... |
![]() | Windows 95 дорога в Чикаго Появление на рынке Windows 0 стало тем самым переломным этапом, в ходе которого весь мир внезапно открыл для себя возможности и достоинства... | ![]() | Общие требования для работы с шаблонами На компьютере необходимо наличие Microsoft Excel версии не менее (Office-97). Для Office-2000 и выше уровень безопасности необходимо... |