В предыдущей статье я начал обсуждение функциональных возможностей VFP IntelliSense, разбирая конфигурацию IntelliSense и управление его различными возможностями. Таблица foxcode.dbf лежит в самом сердце функциональности VFP IntelliSense и понимание ее структуры и того, как она используется, является ключом к обретению полной мощности IntelliSense. Итак, с учетом риска дублирования информации, которая уже имеется в справочном файле Visual FoxPro, ниже приведена структура и короткое описание каждой колонки, используемой движком IntelliSense.

Структура таблицы FoxCode

Поле Тип и размерность Описание
Type C(1) Идентификатор, определяющий - как должна обрабатываться запись:
C (Command) Элемент автозавершения. Срабатывает при печати пробела
F (Function) Элементы быстрой информации (Quick Info). Срабатывают при печати "("
O (COM) Библиотека типов (Type Library) для использования при заполнении списка членов для деклараций "DEFINE AS" COM объектов
P (Property) Определяет действие при обращении к свойству
S (Script) Исполняет скрипт, хранящийся в поле Data
T (Type) Содержание для использования в списке членов для деклараций "DEFINE AS" или для объектов, которые не имеют библиотек типов (Type Libraries)
U (User) Нечто, определенное пользователем
V (Version) Зарезервирована для информации об параметрах по умолчанию и версий
Z (Special) Не имеется автоматической интерпретации; определяет настраиваемое поведение
Abbrev C(24) Сокращение, вызывающее срабатывание определенного действия
Expanded C(26) Строка для замещения сокращения тем, что указано в этом поле и там, где это применимо
Cmd C(15) Имя исполняемого скрипта для этого элемента. Заключается в фигурные скобки "{}"
Tip M(4) Содержание этого поля будет отображаться в быстрых советах (Quick Tip)
Data M(4) Хранит любое содержание. (Значения списков, код, текст скрипта и так далее)
Case C(1) Определяет, как будет форматироваться текст, замещающий сокращение:
U = для форматирования используется функция Upper()
L = для форматирования используется функция Lower()
P = для форматирования используется функция Proper()
M или = форматирование не применяется
X = Замещение не применяется
Замечание:

Значение, указанное в записи "Version" определяет значения по умолчанию, используемые для любой записи, которая не имеет своих собственных установок.

Save L(1) Флажок, определяющий - будет ли сохранена запись при будущих обновлениях (Устанавливается в False для родных элементов)
Timestamp T(8) Метка времени (Только для элементов VFP)
Source M(4) Источник, используемый для содержания записи. (Родные элементы используют "Reserved")
UniqueID C(10) Уникальный идентификатор (Только для элементов VFP)
User M(4) Доступна для любой требуемой информации пользователя

Закладка Advanced (Дополнительное) диалогового окна IntelliSense Manager (Диспетчер IntelliSense) включает в себя опции по восстановлению таблицы FoxCode. Это означает, что если таблица будет повреждена, или даже удалена по неосторожности, или изменены некоторые критические данные, вы можете просто восстановить таблицу в ее исходное состояние. Замечательно то, что в процессе восстановления не теряются ваши собственные элементы. Поля TimeStamp, UniqueID и Save используются всякий раз при обновлении или восстановлении таблицы FoxCode для определения того, кто создал запись и может ли она быть переписана. По умолчанию родные элементы Visual FoxPro имеют установленными значения в полях TimeStamp и UniqueID, но в их поле Save занесено значение False, поэтому они могут быть переписаны. Записи пользователя, с другой стороны, не имеют ни уникального ID, ни метки времени, но в поле Save занесено значение True, поэтому при обновлении таблицы или восстановлении ваши записи сохраняются.

Как используются записи таблицы FoxCode

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

  1. Запись Version (Type = "V").

    Она существует в единственном числе и предназначена для внутреннего использования Visual FoxPro. Поле Expanded содержит номер версии для текущей таблицы FoxCode, а поле Case определяет значения по умолчанию для любого элемента, который не имеет своего собственного набора.

  2. Запись Command (Type = "C") .

    Этот тип используется для определения текста автозавершения, который срабатывает при нажатии на клавишу пробела и использует "Default Script", который определен в поле Data записи с типом Type = S и пустым полем Abbrev. Все родные команды используют именно эту методологию. Однако, вы также можете создать свои собственные "commands", которые явно связывают Quick Info (из поля Tip) или списки членов (Members List) (из поля Data) с помощью определения сокращения и включения вызова скрипта обработчика команды ({cmdhandler}) в поле Cmd.

  3. Запись Function (Type = "F").

    Этот тип используется для определения автозавершения текста, которое срабатывает при печати символа левой круглой скобки "(". В записи этого типа, содержание поля Tip используется для отображения "умных" советов Quick Info, которые отслеживают ввод параметров на соответствию текста, который вы печатаете, шаблону - с тем, что определено в записи.

  4. Запись Property (Type = "P") .

    This type is used to assign a pop-up dialog (or value list) to be displayed whenever a value is assigned to a property whose name matches the entry in the Abbrev field. Поле Cmd используется для указания - должен ли для генерации списка использоваться скрипт, определенный где-то в другом месте таблицы или должно использоваться содержимое поля Data текущей записи. В 9.0 версии таблица FoxCode поставляется вместе с несколькими скриптами общего назначения, которые используются с таким типом записи. Например, один из них (с именем {color}) отображает диалого выборка цвета и является связанным с рядом свойств, определяющих цвет (напримре, "BackColor", "BorderColor" and "FillColor"). Другой (с именем {picture}) отображает диалог для открытия файла картинки всякий раз, когда что-либо присваивается свойствам "Icon" или "Picture". Кроме того, в таблице можно найти, если поискать, скрипты {Font} и {MemberClassLib}.

  5. Запись COM Component (Type = "O") .

    Этот тип используется для указания движку IntelliSense библиотеки типов для COM компонента (или для ActiveX). Поле Data используется для хранения информации о GUID (и Version), а поле Tip хранит полное имя элемента управления. Содержание поля Abbrev включается в выпадающий список объектов, связаннных с опцией AS (DEFINE CLASS…AS…, LOCAL…AS… ). Однако, самым простым путем добавления объекта COM в таблицк заключается в использовании IntelliSense Manager (Диспетчера IntelliSense) который поставляется вместе с VFP так как это исключает необходимость копаться в реестре с целью охоты за глобальными идентификаторами GUIDs и идентификаторами классов (Class IDs).

  6. Запись Typing (Type = "T") .

    Этот тип используется для определения элементов в выпадающем списке опции AS. Различие между этим типом и предстшествовавшем в этой статье типом записи "O" заключается в том, что здесь нет библиотек типов, связанных с этой записью. Таким образом, ваш собственный, персональный класс может быть добавлен в выпадающий список, отображаемый всякий раз, когда вы печатаете команду DEFINE CLASS. Содержание поля Data отображается непосредственно в выпадающем списке и это единственное поле, с которым нужно работать для завершения работы с записью этого типа. Однако, мы рекомендует вводить описание в поле Abbrev просто для того, чтобы было проще обслуживать таблицу и, если вы добавите текст в поле tip, то он будет отображен, когда вы будете прохаживаться по списку.

  7. Запись User (Type = "U") .

    Этот тип записи используется для идентификации сокращений настраиваемого пользователем содержания. Он отличается от типа Command тем, что замещает содержание поля Abbrev содержимым поля Expanded. Вместо просто "завершения" текста, он реальнр замещает текст, что более похоже на клавишные макромы, чем на автозавершение. Здесь нет необходимости иметь расширяемый текст, связанный с сокращением, которое вызывает срабатывание.
    Вы можете связать с этим типом записи скрипт, включив пару пустых фигурных скобок ("{}") в поле Cmd. Это указывает движку IntelliSense, что поле Data записи содержит код скрипта, который он должен исполнить.

  8. Запись Script (Type = "S") .

    Этот тип используется для хранения кода именованных скриптов, которые могут быть исполнены движком IntelliSense. Для создания скрипта все что требуется, так это указать его имя в поле Abbrev и код в поле Data. Другие записи могут вызывать исполнение этих скриптов, если в поле Cmd внутри фигурных скобок ("{}") содержится имя скрипта.
    Поскольку записи типа "S" используются для создания скриптов общего назначения - то есть "generic" - то они могут быть использованы более чем одной записью любого типа (за исключением записей типов "T" и "O" ) и могут содержать код в поле Data. Однако, для того чтобы исполнить такие скрипты, в поле Cmd должна быть вставлена пара пустых фигурных скобок -"{}"

  9. Запись Custom Extension (Type = "Z") .

    Этот тип записи не описан в документации и резервирован для записей, которые IntelliSense не может обрабатывать автоматически.
    Таких в таблице две - по умолчанию. Первая из них "CustomPEMs" используется для хранения дополнительной - "advanced" информации свойства конфигурации. Колонка Tip содержит запросы для отображения диспетчера IntelliSense, если в поле Data содержатся установки в виде списка пар "параметр=значение". Вторая, с именем "CustomDefaultScripts" используется для перечисления скриптов, которые могут быть вызваны обработчиков скрипта, используемого по умолчанию (то есть, клавиши пробел).
    Скрипты, именованные в этом поле активируются только тогда, когда свойство конфигурации "lAllowCustomDefScripts" установлено в TRUE.

  10. Запись MemberData Extension (Type = "E") .

    Представленный в версии 9.0 этот тип используется для указания, что связанные данные касаются расширяемости, предоставляемой MemberData. Для более конкретного изучения memberdata обратитесь к файлу справки для VFP 9.0.

В следующей части мы взглянем на то, как создавать настраиваемые действия IntelliSense, и как в Visual FoxPro используются различные типы записей.

Этот перевод выполнен JS с любезного разрешения Энди Крамека.

Оригинал статьи опубликован в субботу, 10-го апреля 2005 в 2:41 пополудня в блоге автора на weblogs.foxite.com - http://weblogs.foxite.com/andykramek/archive/2005/04/10/356.aspx .

Смотри также