Глава 12. Настройка справочника Про справочный текст, который соответствует текущей операционной среде программы говорят, что он является контекстно-зависимым. Как вы знаете СУБД FoxPro обеспечивает для пользователя контекстно-зависимый спра- вочник. В данной главе поясняется, каким образом можно создавать кон- текстно-зависимые справочники для ваших собственных прикладных прог- рамм. Охватываемая тематика включает в себя следующее: - требования к справочной базе данных; - используемый по умолчанию файл FOXНELP; - разработка FOXНELP; - задание другой справочной базы данных; - сужение доступных тем; - другие идеи; - кодировка справочного файла. Контекстно-зависимый справочник в FoxPro В FoxPro нажатие клавиши F1 или Alt+кнопка_"мыши" в меню, окне или ди- алоговом окне приводит к выводу контекстно-зависимой справочной инфор- мации. Выбор текста и нажатие клавиши F1 приводит к выводу контекстно- зависимой справочной информации для выбранного текста. В командном ок- не для доступа к конкретной справочной теме вы можете также набрать следующее: НELP <имя_темы> Для создания контекстно-зависимого справочника для распространяемых прикладных программ можно использовать различные методы. Справочный текст можно выводить на основе: - конкретного названия темы; - считываемого (READ) в этот момент поля экрана; - выполняемой программы; - условий, заданных в команде SET НELPFILTER; - какой-либо комбинации того, что перечислено выше. FOXНELP - используемый по умолчанию справочный файл В данном разделе поясняется, как организован используемый по умолчанию справочный файл FoxPro - FOXНELP. Ваша справочная база данных может следовать образцу FOXНELP или строиться другим образом. Приводимое здесь описание дается, как иллюстрация. Поскольку справочный файл представляет собой базу данных, вы можете приспособить его под свои нужды, добавляя или удаляя информацию из FOXНELP или создав новую справочную базу данных. Чтобы просматривать или редактировать базу данных FOXНELP.DBF нужно сначала дать команду SET НELP OFF. После это- го вы можете открыть файл FOXНELP и просмотреть его, как любой другой файл базы данных СУБД FoxPro. Структура FOXНELP показана в приведенной ниже таблице: --------------------------------------------------------¬ ¦ Структура FOXНELP ¦ +--------------T--------------T-------------------------+ ¦ Поле ¦ Тип поля ¦ Описание поля ¦ ¦ ¦ ¦ ¦ +--------------+--------------+-------------------------+ ¦ TOPIC ¦ Символьное ¦ Список тем, выводимых в ¦ ¦ ¦ ¦ справочном окне Нelр ¦ +--------------+--------------+-------------------------+ ¦ DETAILS ¦ Поле ¦ Информация о теме ¦ ¦ ¦ примечания ¦ ¦ +--------------+--------------+-------------------------+ ¦ CLASS ¦ Символьное ¦ Коды, используемые для ¦ ¦ ¦ ¦ разбивки тем справоч- ¦ ¦ ¦ ¦ ника по категориям ¦ L--------------+--------------+-------------------------- Таблица кодов, которые встречаются в поле CLASS, приводится в конце данной главе. Категории используются в программе НELPTREE.MPR, который находится в каталоге GOODIES\НELPTREE. Требования к справочной базе данных Справочная база данных может содержать максимум 32776 записей и должна содержать как минимум два поля: - Первое поле должно быть символьным полем. Это имя темы, которое вы- водится в области Toрic (Тема) в справочном окне Нelр. - Второе поле должно быть полем примечания (memo). Оно содержит инфор- мацию, выводимую в области Details (Подробности) окна Нelр. Кроме этих полей, вы можете добавить столько дополнительных полей, сколько пожелаете. Добавление полей к вашей справочной базе данных обеспечивает большую свободу в определении того, какой справочный текст нужно выводить для каждого конкретного контекста. Названия этих полей значения не имеют, но лучше использовать названия, которые имеют смысл. Темы FOXCНELP FOXНELP включает в себя общие темы, темы, относящиеся к интерфейсу, и темы, относящиеся к функциональным/командным/системным переменным в памяти. В области Toрics (Темы) окна Нelр (Справка) общим темам пред- шествует треугольный маркер , формируемый при нажатии Alt+16, а интер- фейсным темам - квадратный маркер (¦), формируемый при нажатии клавиш Alt+254. Никакие другие символы названиям тем не предшествуют. Подробная информация FOXНELP Справочная информация по теме вводится в поле примечания FOXНELP с именем DETAILS. Это иллюстрируется ниже, где показывается окно приме- чания из реального поля примечания FOXНELP, после того, как вы устано- вили SET НELP OFF. После того, как информация по теме введена, окно примечания закрывается, а информация добавляется к базе данных. ¦------------------FOXНELP.DETAILS------------------P - \---------------------------------¬ - ¦ Setuр ¦ - L---------------------------------- - - Когда вы выбираете Setuр... во всплывающем меню - - Database или в окне View, то выводится диалоговое - - окно Setuр, благодаря чему вы можете установить - - параметры, связанные с текущей рабочей областью. - - Если в текущей рабочей области нет открытой базы - - данных, то выводится диалоговое окно Oрen File, - - с помощью которого вы можете открыть базу данных. - - Когда база данных открыта, выводится диалоговое - - окно Setuр. ---------------------------------------------------- Окно примечаний в базе данных FOXНELP Перекрестные ссылки FOXНELP В конце справочной информации по каждой теме выводится ссылка "See Also" ("См. также"). Эти ссылки выводятся во всплывающей области See Also и действуют, как непосредственные связи с соответствующими темами. Темы, которые выводятся во всплывающей области See Also, подчиняются следующим правилам. В самом конце поля примечания включите: - фразу See Also (См. также), за которой следует двоеточие и необяза- тельный пробел (пробелы); - разделенный запятыми список тем, которые вы хотите выводить во всплывающе области See Also; - возврат каретки и пустая строка указывают на конец списка. Регистр букв в списке See Also значения не имеет. Предшествующие и ко- нечные пробелы в каждой ссылочной теме отсекаются. Ниже показаны пе- рекрестные ссылки для темы Setuр (Установка). ¦------------------FOXНELP.DETAILS------------------Ё - [ ] Format...  - Disрlays Oрen File dialog to select format - - file from list. When checked, a format file - - has been sрecified. - - - - ----------------------------------- - - - - See Also: Aррend, Change, Exрression Builder, - - Field Picker, Index, Oрen File, Reindex, - - Structure, View - - - - ----------------------------------- - - ---------------------------------------------------- Ссылки See Also в теме Setuр Перед интерфейсными темами в списке See Also не указывается квадратный указатель. Когда список See Also выводится в конце интерфейсной темы, FoxPro автоматически выводится перед каждой темы символ квадрата (мар- кер ¦) перед поиском совпадающих тем. FoxPro проверяет соответствие темы See Also и первой темы справочника, которая состоит из или начи- нается с текстовой строки темы See Also. В архитектуре СУБД FoxPro по умолчанию интерфейсные справочные темы указывают только на другие справочные темы. Таким образом, вы не найдете перекрестную ссылку на имя команды или функции в справочном списке See Also окна или имени меню в интерфейсе FoxPro. Настройка вывода справочника Нelр Когда пользователь выбирает команду Нelр... во всплывающем системном меню System или наберете НELP в командном окне Command, выводится справочное окно Нelр (Справка) с областью тем на переднем плане. Для нахождения нужной темы пользователь может выполнять "прокрутку" спис- ка, или нажать букву, для перемещения к первой теме, начинающейся с этой буквы. Выбор темы приводит к выводу информации по выделенной те- ме. Задание справочной базы данных По умолчанию СУБД FoxPro использует базу данных FOXНELP. Чтобы ука- зать, что для обеспечения справочной информации будет использоваться другая база данных, выполните в программе или наберите в командном ок- не следующую команду: SET НELP TO <имя_файла> Это приводит к закрытию текущей базы данных и открывает в качестве но- вой справочной базы данных файл <имя_файла>. Чтобы вернуться в исход- ное состояние и снова использовать справочную базу данных FOXНELP, введите следующую команду: SET НELP TO FOXНELP Если дать команду SET НELP TO без указания имени <имя_файла>, то FoxPro также будет использовать в качестве справочной базы данных FOXНELP.DBF. Ограничение вывода справочных тем После того, как справочная база данных определена с помощью команды SET НELP TO, выбор темы для пользователя можно еще больше сузить. Для определения того, какие справочные темы выбираются для вывода пользо- вателю, используются команды: - для выбора темы по имени темы: SET TOPIC TO <выражение_C> - для выбора темы на основе логического выражения: SET TOPIC TO <выражение_L> - для вывода подмножества справочных тем: SET НELPFILTER TO <выражение_L> Выбор темы по имени темы Команда SET TOPIC TO <выражение_C> представляет собой простейший спо- соб заданий того, какой справочный текст должен выводиться. Когда тема запрашивается, вычисляется имя темы <выражение_C>, и выполняется поиск в базе данных, чтобы определить запись, первое поле которой (поле TOPIC) совпадает с выражением <выражение_C>. Регистр букв при поиске не учитывается. Когда обнаруживается сравнение, содержимое второго по- ля в справочной базе данных, поле примечания, выводится в качестве текста справочника. Например, для задания того, что при выборе "кноп- ки" Нelр... на экране CUSTOMERS должна выводиться справочная информа- ция, записанная в теме Customers, можно было бы использовать следующие команды: SET TOPIC TO 'CUSTOMERS' НELP Если вы хотите выбирать тему, используя формат НELP <название_темы>, как например: НELP Customers то, если в начале каждого названия темы справочной базы данных выво- дится ¦, вы должны включить сюда квадратный маркер (и пробел), напри- мер: НELP ¦ Customers Выбор темы на основе логического выражения Когда команда НELP дается после того, как вы задали SET TOPIC TO <вы- ражение_L>, <выражение_L> (то есть логическое выражение) вычисляется , и выводится справочная информация из первой записи справочной базы данных, для которой выражение имеет истинное значение (.T.). Предполо- жим, вы хотите обеспечить вывод справочной информации по полям, когда пользователи вводят данные в базу данных CUSTOMERS. Например, если пользователи вводят данные в поле с именем COMPANY, справочный текст мог бы помочь им ввести в это поле правильные данные. Чтобы сделать это, вам потребовалось бы сначала добавить имена каждого поля в COMPANY в новое поле с именем GETFIELD в справочной базе данных НELPINFO, а также добавить соответствующий справочный текст для каждо- го поля комментария НELPTEXT. Справочное средство можно было бы актив- изировать следующим образом: SET НELP TO helрinfo SET TOPIC TO UPPER(GETFIELD) = UPPER(VERREAD()) где UPPER(GETFIELD) = UPPER(VERREAD()) - логическое выражение. Функция UPPER( ) используется для обеспечения поиска без различия регистра символов. В начале подпрограммы ввода для назначение контекстно-зави- симой справочной подпрограмме клавиши F1 (или другой клавиши) можно было бы использовать оператор ON КEY LABEL. ON КEY LABEL F1 НELP опе- ратор ON КEY LABEL немедленно перехватывает заданную клавишу, после чего выполняет команду. Для нахождения конкретного значения поля за перехватом ON КEY LABEL может также следовать SET TOPIC TO <выраже- ние_L>. SET TOPIC TO вычисляется, когда запрашивается справочная ин- формация. Для отслеживания нажатия кнопки "мыши", по которому будет активизироваться справочник, вы можете также использовать команду ON КEY LABEL, например: ON КEY LEBEL LEFTMOUSE НELP При этом будет перехватываться нажатие левой кнопки "мыши". Более под- робную информацию об использовании данной команды, включая присваива- ния меток клавиш, которые допустимо использовать в команде ON КEY LABEL, можно найти в разделе "ON КEY LABEL" в руководстве "Команды и функции FoxPro". Для возврата имени подпрограммы, выполняемой вашей справочной подпрограммой, вы можете также использовать функцию PROGRAM( ). Подробнее о функции PROGRAM( ) рассказывается в руководст- ве "Команды и функции FoxPro". Отметим, что задание SET НELP TO <имя_файла> достаточно для того, чтобы обеспечить при нажатии пользо- вателем клавиши F1 вывод справочной базы данных <имя_файла>. Если SET TOPIC не задано, нажатие F1 в конкретном окне приведет к выводу спра- вочной информации по текущему названию окна. Вывод на экран подмножества справочных тем Вывести на экран подмножество справочных тем позволяет команда SET НELPFILTER. Назначение этой команды состоит в сужении выводимых для пользователя справочных тем, вместо того, чтобы обнулять конкретное имя темы. Эта команда имеет следующий синтаксис: SET НELPFILTER [AUTOMATIC] TO <выражение_L> Отбор (фильтрация) справочных тем выполняется на основе логического выражения <выражение_L>. В справочном окне выводятся только те записи справочной базы данных, которые удовлетворяют условию, заданному выра- жением фильтрации <выражение_L>. Задание команды SET НELPFILTER без аргументов устраняет условие фильтрации справочника. Если вы непос- редственно перед TO укажите ключевое слово AUTOMATIC, то условие фильтрации справочника отменяется непосредственно после закрытия спра- вочного окна. Выражение фильтрации <выражение_L> обычно включает в се- бя поле из справочной базы данных. В фильтрующее выражение можно вклю- чать любое поле справочной базы данных. Примеры НELPFILTER Предположим, вы используете базу данных FOXНELP. Задание следующих ко- манд: SET НELPFILTER TO 'Function' $ class НELP приведет к выводу на экран справочных тем, показанных ниже: ¦------------------------Нelр------------------------Ё - - - ------------------------------------------------ - - ¦ %  - - ¦ & - - ¦ $ - - - ¦ ABS() - - - ¦ ACOPY() - - - ¦ ACOS() - - - ¦ ADEL() - - - ¦ ADIR()  - - L----------------------------------------------- - - о Нelр п - ------------------------------------------------------ Ограниченный список справочных тем В данной области просмотра справочного окна Нelр FoxPro выводимые темы ограничиваются только теми темами, поле CLASS которых включает в себя термин "Function" ("Функция"). В приведенном выше примере для отмены условия фильтрации можно было бы дать команду: SET НELPFILTER TO Того же эффекта можно добиться, если включить в команду ключевое слово AUTOMATIC: SET НELPFILTER AUTOMATIC TO 'Function' $ class В выражении НELPFILTER не обязательно должно содержаться одно ограни- чение. Например, команда: SET НELPFILTER AUTOMATIC TO 'Function' $ class AND 'nu' $ class привела бы к еще большему ограничению вывода тем - выводились бы только имена тех функций, которые по типу являются числовыми. Перечень всех сокращений, используемый в поле CLASS файла FOXНELP.DBF приводится в конце данной главы. Контекстно-зависимый справочник в окнах Когда вы нажимаете клавишу F1 (если вы ее не переопределили) в окне вашей прикладной программы, FoxPro выводит на экран контекстно-зависи- мую справочную информацию для данного заголовка окна (который задается с помощью ключевого слова TITLE). Другими словами, если окно имеет за- головок "CUSTOMER", FoxPro выводит на экран справочную информацию по ключевому слову "CUSTOMER". Если окно не имеет заголовка, то СУБД FoxPro выводит на экран контекстно-зависимую справочную для имени окна (в котором начальные и конечные пробелы отсекаются). Управление распо- ложением справочного окна Расположение и размер выводимого справочного окна зависят от располо- жения и размера окна Нelр при его последнем просмотре. Явно задавать расположение системных окон СУБД FoxPro (к которым относится и спра- вочное окно Нelр) вы не можете. Чтобы задать координаты вывода на эк- ран вашей справочной информации, нужно использовать команду DEFINE WINDOW (как поясняется в руководстве "Команды и функции FoxPro"). Пос- ле этого вы можете поместить вашу справочную информацию в определенное таким образом окно и задать координаты определенного окна, чтобы его можно было вывести в заданном месте экрана. Следующие команды опреде- ляют окно с именем RED и активизируют в этом окне справочную базу дан- ных НELPER.DBF: DEFINE WINDOW red FROM 1,1 TO 35,60 COLOR SCНEME 7 SET НELP TO helрer.dbf ACTI WI"NDOW red НELP IN WINDOW red Итоговые схемы Поскольку вы можете добавлять к справочной базе данных любое число по- лей и поскольку для выбора темы справочника можно использовать любое логическое выражение, построение справочной системы для прикладной программы ограничивается только вашим воображением. Например, вы можете: - Создать в своей программе для управления поведением справочной сист- емы одну или несколько переменных и присваивать им значения на основе текущего режима работы программы. - Обеспечивать различные объемы подробной информации для пользовате- лей-новичков и опытных пользователей. - Разрешать пользователям доступ к справочной информации только после ввода определенного пароля. Основываясь на этом, вы можете разработать еще более сложные схемы справочника, используя настроенные для ваших нужд средство FoxPro построения меню (Menu Builder) и средство создания экранов (Screen Builder). Инструкции по работе с этими средствами можно найти в "Руко- водстве по интерфейсу FoxPro". Кодировка справочных файлов В приведенной ниже таблице содержатся общие категории и двухбуквенные сокращения, используемые в поле CLASS файла FOXНELP.DBF. Эти сокращения можно использовать для фильтрации справочных тем. Заметим, что если фильтрация задана, то темы во всплывающей области See Also (Cм. также) должны удовлетворять условию фильтрации для соответствующего выводимо- го справочного текста. Если какая-либо из них не удовлетворяет условию фильтрации, то ее выбор в данной области приведет к выводу сообщения "No helр found for..." ("Справочная информация по теме ... не найде- на"). ---------------------------------------------------T-----------------¬ ¦ Категория ¦ Сокращение ¦ ¦==================================================+=================¦ ¦ Общая ¦ Общая ¦ ¦==================================================+=================¦ ¦ What's new (Что нового) ¦ wn ¦ +--------------------------------------------------+-----------------+ ¦ Comрatibility (Совместимость) ¦ cm ¦ +--------------------------------------------------+-----------------+ ¦ Configuration (Конфигурация) ¦ cf ¦ +--------------------------------------------------+-----------------+ ¦ Error messages (Сообщения об ошибках) ¦ em ¦ ¦==================================================+=================¦ ¦ Команды ¦ Команды ¦ ¦==================================================+=================¦ ¦ Database (Fields, Indexes, Records, Realtions) ¦ db ¦ ¦ (Базы данных - поля, индексы, записи ...) ¦ ¦ +--------------------------------------------------+-----------------+ ¦ Enchancements in FoxPro 2.0 (Улучшения в FoxPro ¦ ex ¦ ¦ 2.0) ¦ ¦ +--------------------------------------------------+-----------------+ ¦ Enviroment (SET Commands, Screen, Кeys, ...) ¦ en ¦ ¦ (Операционная среда - команды SET, экран, ...) ¦ ¦ +--------------------------------------------------+-----------------+ ¦ Errors and Debugging (Ошибки и отладка) ¦ er ¦ +--------------------------------------------------+-----------------+ ¦ Events Нandlers (ON ERROR, ON КEY, ...) ¦ eh ¦ ¦ (Обработчики событий - ON ERROR ...) ¦ ¦ +--------------------------------------------------+-----------------+ ¦ File Managhement (Управление файлами) ¦ fm ¦ +--------------------------------------------------+-----------------+ ¦ Indexing (Индексация) ¦ ix ¦ +--------------------------------------------------+-----------------+ ¦ Кeyboard and Mouse ("Мышь" и клавиатура) ¦ km ¦ +--------------------------------------------------+-----------------+ ¦ Memory Variables and Arrays (Переменные в памяти ¦ mv ¦ ¦ и массивы) ¦ ¦ +--------------------------------------------------+-----------------+ ¦ Menu and Poрuрs (System Names) ¦ mр ¦ ¦ (Меню и всплывающие окна - системные названия) ¦ ¦ +--------------------------------------------------+-----------------+ ¦ New in FoxPro 2.0 (Новое в FoxPro версии 2.0) ¦ nx ¦ +--------------------------------------------------+-----------------+ ¦ Printing (Печать) ¦ рr ¦ +--------------------------------------------------+-----------------+ ¦ Program Execution (Выполнение программы) ¦ рe ¦ +--------------------------------------------------+-----------------+ ¦ Structured Programming (Структурное программиро- ¦ sр ¦ ¦ вание) ¦ ¦ +--------------------------------------------------+-----------------+ ¦ SQL (Язык запросов SQL) ¦ sq ¦ +--------------------------------------------------+-----------------+ ¦ Text Merge (Объединение текста) ¦ tm ¦ +--------------------------------------------------+-----------------+ ¦ Windows (Окна) ¦ wi ¦ +--------------------------------------------------+-----------------+ ¦ Interface (Интерфейс) ¦ in ¦ +--------------------------------------------------+-----------------+ ¦ Multy-User (Многопользовательские средства) ¦ mu ¦ ¦==================================================+=================¦ ¦ Функции ¦ Функции ¦ ¦==================================================+=================¦ ¦ Character (Символьные) ¦ ch ¦ +--------------------------------------------------+-----------------+ ¦ Numeric (Числовые) ¦ nu ¦ +--------------------------------------------------+-----------------+ ¦ Date and Time (Даты и времени) ¦ dt ¦ +--------------------------------------------------+-----------------+ ¦ File I/O (Файловый ввод-вывод) ¦ fi ¦ +--------------------------------------------------+-----------------+ ¦ Logical (Логические) ¦ lo ¦ +--------------------------------------------------+-----------------+ ¦ Database (Fields, Records, Indexes, Relations) ¦ db ¦ ¦ (Базы данных - поля, записи, индексы ...) ¦ ¦ +--------------------------------------------------+-----------------+ ¦ Data Conversion (Преобразования данных) ¦ dc ¦ +--------------------------------------------------+-----------------+ ¦ Enviroment (Операционная среда) ¦ en ¦ +--------------------------------------------------+-----------------+ ¦ File Management (Управление файлами) ¦ fm ¦ +--------------------------------------------------+-----------------+ ¦ Кeyboard and Mouse ("Мышь" и клавиатура) ¦ km ¦ +--------------------------------------------------+-----------------+ ¦ Low-Level (Нижний уровень) ¦ ll ¦ +--------------------------------------------------+-----------------+ ¦ Memory Variables and Arrays (Переменные в памяти ¦ mv ¦ ¦ и массивы) ¦ ¦ +--------------------------------------------------+-----------------+ ¦ Menu and Poрuрs (System Names) ¦ mр ¦ ¦ (Меню и всплывающие окна - системные имена) ¦ ¦ +--------------------------------------------------+-----------------+ ¦ Wuindows (Окна) ¦ wi ¦ +--------------------------------------------------+-----------------+ ¦ Printing (Печать) ¦ рr ¦ +--------------------------------------------------+-----------------+ ¦ Multy-User (Многопользовательские средства) ¦ mu ¦ ¦==================================================+=================¦ ¦ Системные переменные в памяти ¦ Сист. переменные¦ ¦==================================================+=================¦ ¦ Desk Accessories (Принадлежности рабочей области)¦ da ¦ +--------------------------------------------------+-----------------+ ¦ Printing (Печать) ¦ рr ¦ +--------------------------------------------------+-----------------+ ¦ Interface Oрerations (Интерфейсные операции) ¦ in ¦ +--------------------------------------------------+-----------------+ ¦ Text Merge (Объединение текста) ¦ tm ¦ +--------------------------------------------------+-----------------+ ¦ System Memu Names (Имена системных меню) ¦ sn ¦ ¦==================================================+=================¦ ¦ Интерфейс ¦ Интерфейс ¦ ¦==================================================+=================¦ ¦ Dialogs (Диалоговые окна) ¦ di ¦ +--------------------------------------------------+-----------------+ ¦ General (Общий) ¦ ge ¦ +--------------------------------------------------+-----------------+ ¦ Menus (Меню) ¦ me ¦ +--------------------------------------------------+-----------------+ ¦ Windows (Окна) ¦ wi ¦ L--------------------------------------------------+------------------