Программы пользователя (внешние модули или по-английски - plugins) - это программы с открытым кодом, удовлетворяющие определенным правилам написания и расположенные в специальной директории SMETA50\PLUGINS. Программы пользователя организованы в виде двухуровневой иерархии. Папка PLUGINS может содержать произвольное число программных файлов, в то время как каждый программный файл может содержать произвольное число модулей - собственно программ пользователя.

Программы пользователя пишутся на языке Visual Foxpro версии не выше 6.0.

Создание новой програмы пользователя.

Перед созданием нового модуля Вы должны решить, будет ли он располагаться в одном из существующих программных файлов или для него потребуется новый программный файл. При этом Вы можете самостоятельно с помощью внешних средств (любимого редактора) создать нужную программную конструкцию. Но гораздо проще воспользоваться командой "Новый" в окне управления программами пользователя. Эта команда вызывает диалоговое окно, показанное на Рис. 1.

Рис. 1. Создание новой программы пользователя

 

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

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

В поле "Наименование" впишите наименование модуля, как его должен увидеть пользователь в меню выбора модулей.

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

Структура программ пользователя.

Каждый программный файл состоит из трех частей:

  1. Исполняемый код
  2. Определения классов
  3. Общие процедуры и функции

Структуру области исполняемого кода иллюстрирует следующий шаблон:
LPARAMETERS p1
p1=UPPER(ALLTRIM(p1))
* Текст описания программного файла
* ФИЛЬТР=ArchForm

DO CASE
CASE p1=="ID-1"   && Наименование первого модуля
   * ФИЛЬТР=ResSMTForm
   <Текст программы первого модуля>
CASE p1=="ID-2"   && Наименование второго модуля
   * ФИЛЬТР=GeneralMenu
   <Текст программы второго модуля>
ENDCASE

Первые две строки служат для приема и нормализации идентификатора модуля, содержащегося в данном программном файле. Далее идет комментарий, который при регистрации воспринимается как описание файла. Это описание появляется в выпадающем меню в окне управления программами пользователя. Следующий комментарий, начинающийся с ключевого слова "ФИЛЬТР", позволяет определить, в каком режиме основной программы будут доступны модули данного файла. В фильтре после знака = следует прописать наименование соответствующей базовой формы. Если фильтр не указан, описание данного файла будет присутствовать в выпадающем меню во всех режимах основной программы.

Далее следует структура DO CASE. Каждый CASE-блок содержит один модуль. В каждой CASE-строке проверяется идентификатор модуля. За этой проверкой после символа && идет обязательный комментарий, который при регистрации интерпретируется как наименование модуля. В теле CASE блока первый необязательный комментарий после символа *, начинающийся с ключевого слова "ФИЛЬТР", интерпретируется как фильтр применимости модуля. После знака = следует указать наименование базовой формы, в которой будет доступен данный модуль. Если фильтр опущен, то модуль будет доступен во всех вызовах во всех местах основной программы. Очевидно, что если указан общий фильтр на весь программный файл, то не имеет смысла использовать фильтры для отдельных модулей и наоборот.