Одним из вопросом, который явно появляется слишком часто, является вопрос о том, как управлять некоторыми из многих раздражающих аспектов в движке Visual FoxPro IntelliSense. IntelliSense был впервые представлен миру разработчиков в Microsoft Visual Basic 5.0 и впоследствии был внедрен в виде неотъемлемого инструмента повышения производительности разработчика во многие языкиъ программирования. Его реализация в Visual FoxPro, которая впервые была представления в версии 7.0, является уникальной в том смысле, что его возможности представлены в виде открытой архитектуры, что позволяет разработчикам настраивать и расширять встроенные возможности. Поскольку обсуждение полных возможностей остается за рамками небольшой статьи в блоге, я надеюсь, что следующая информация о конфигурировании IntelliSense будет полезной многим

_VFP.EditorOptions

Базовая функциональность IntelliSense управляется посредством свойства EditorOptions объекта VFP Application (к которому можно непосредственно обращаться с помощью системной переменной _VFP). Значением по умолчанию для этого свойства является "LQKT", хотя реально во всех версиях движка IntelliSense реализованый пять основных функциональных возможностей, а шестая была добавлена в Visual FoxPro версии 9.0. Они перечислены ниже:

Пронумерованный список

  1. Гиперссылки (“K or k”).

    Определяет, как будут активироваться гиперссылки. Установка в "k"” требует простого щелчка по левой клавише мыши, тогда как установка в "K", требует, чтобы использовалось сочетание CTRL+Click - которое используется по умолчанию во многих приложенихЮ созданных для платформы Windows (например, MS Office Word). Если не указан ни тот, ни другой символы, гиперссылки рассматриваются как нормальный текст в окне релактирования или командном окне.

  2. Перетаскивание слов -Drag and Drop (“W”).

    Когда эта установка определена, текст может быть перемещен в позицию, следующую непосредственно за пробелом. Предохраняет от небрежной вставки в уже существующий текст, когда используется перетаскивание в окне редактирования или командном окне. Это поведение по умолчанию установлено в "disabled", то есть запрещено.

  3. Советы дизайнеру касательно значения (Designer Value Tips) ("T").

    Эта установка управляет тем, что будут ли элементы, отображаемые в списках показывать связанные с ними полоски советов "tool tips". По умолчанию, они показываются, когда вы перемещаетесь по списке членов.

  4. Список членов ("L" или "l").

    Эта установка определяет будут ли и когда будут отображаться списки членов. По умолчанию, списки отображаются автоматически, если установка выставлена в "L". Когда же она выставлена в "l", то списки появятся только тогда, когда будет нажато сочетание клавиш CTRL+J (или в случае, когда в главном меню Visual Foxpro в "Edit" будет выбрано "List Members".

  5. Быстрая информация (Quick Info) ("Q" или "q").

    Эта установка определяет - будут ли и когда будут отображаться различные типы быстрой информации. По умолчанию, такая информация отображается автоматически, то есть установка выставлена в "Q". Если вы выставите установку в "q", то такая информация появится только в том случае, когда будет нажато сочетание CTRL+I или когда из меню "Edit", главного меню Visual FoxPro будет выбран пункт "Quick Info".

  6. Копирование текста с форматированием (Rich Text Copy) ("X")

    Эта установка была введена в VFP версии 9.0 и предназначения для подавления функциональной возможности копирования текста в буфер с использованием формата rich text. По умолчанию она опущена, так что весь текст копируется в буфер в формате rich text. Это означает, что когда вы вставляете скопированный текст в другое приложение (например в E-Mail сообщение или в документ) он сохраняет расцветку синтаксиса и установки, которые вы определили ддя редактора VFP. Если вы включите установку "X" в строку EditorOptions, убедитесь, что текст копируется как обычный плоский текст – это полезно, когда вы создаете документацию или прочие материалы, которые должны правильно печататься в черном и белом цветах.

Важно отметить здесь, что опции в нижнем регистре - для списка членов (List Members) и быстрой информации (Quick Info) будучи установленными по умолчанию для свойств редактора не запретят IntelliSense, а лишь предовратят их автоматическое отображение.

Поэтому, если вас постоянно раздражает появление больших желтых микроокон, которые прячут за собой вашу работу когда вы печатает простые команды запросов или Browse, просто установите вместо "Q" в строке установок редактора этот же символ в нижнем регистре - "q". Это остановит автоматическое всплывание быстрой информации, но если вы вдруг все-таки пожелаете ее увидеть, просто нажмите CTRL+I, в любом месте команды, что немедленно предоставит вам эти желтые, надоедливые окна с быстрой информацией. (Но отметьте, что такое действие, кроме того, запретит список команд/параметров когда вы, к примеру, печатаете SET или USE).

По аналогии с предыдущим абзацем, если вы вдруг решите, что постоянно всплывающие микрооконца со списком свойств, событий и методов объекта, вас надоели, просто переведите заглавную "L" в нижний регистр - "l" в строке опций редактора. Тогда вы сможете продолжать печатать ваши объектные ссылки самостоятельно, но в любой момент, когда они вам вдруг потребуются, просто нажмите CTRL+J.

Запись CustomPEMs в таблице FoxCode.dbf

В дополнение к свойству EditorOptions, используемому для установки опций редактора, в таблице FoxCode имеется специальная запись, которая хранит установки для ряда дополнительных конфигурационных свойств. К ним можно обращаться на закладке Advanced (Дополнительное) диалогового окна IntelliSense Manager (Диспетчер IntelliSense) или непосредственно открыв таблицу FoxCode.DBF и выдав команду:

Скопировать код
LOCATE FOR TYPE = "Z" AND ABBREV = "CustomPEMs"

Число свойств зависит от версии Visual FoxPro, которую вы используете. В VFP 7.0 было 6 (одно из которых никогда не появлялось в документации), и VFP 8 было добавлено еще два. В приведенной ниже таблице перечислены эти свойства и описывается - чем они занимаются:

Свойство Назначение
lEnableFullSetDisplay
Default = .T.
Множество команд SET имеют в составе своего синтаксиса модификатор "TO". Это свойство определяет, будет ли этот "TO" включен как часть команды, авторасширяемой с помощью IntelliSense. Значением по умолчанию установлено True, но мы предпочитаем выключить эту возможность. Причиной этому служит то, что если вы сами напечатали всю команду, IntelliSense упрямо будет добавлять "TO" в результат, что может привести к ошибке, такой, как показано в следующей строке:
SET INDEX TO TO names
lHideScriptErrors
Default = .F.
В соответствии со справкой это свойство "подавляет экранный вывод ошибок скриптов IntelliSense". По умолчанию оно установлено в False. На самом деле, это свойство является другой установкой, которая воздейсвует только на скрипты, которые используют локальный экземлпяр класса FoxCodeScript. Этот класс определяет отображение ошибки пользователя и оно служит для упавления поведением - будет ли такое отображение позволено или нет.
Если же случилась ошибка любого другого типа скрипта, вы получите либо стандартное соответсвующее сообщение об ошибке (если это в принципе возможно) или простой диалог с текстом "FoxCode Script Failure" вне зависимости от установки этого свойства.
lKeyWordCapitalization
Default = .T.
Управляет авторасширением и выделением заглавными буквами подчиненных частей команд. По умолчанию установлено в True. Используется в методе ReplaceKeyWord() программы foxcode.prg.
Замечание:

Это определяет выделение заглавными буквами, когда вы реально печатаете полную команду (например. CLEAR ALL). Для автоматически вставляемых команд выделение заглавными буквами происходит по их индивидуальным правилам!.

lPropertyValueEditors
Default = .T.
В соответствии со справкой это свойство "Разрешает скрипты, которые переключают значение редакторов для определенных свойств". По умолчанию установлено в True. На самом деле, это свойство определяет - будут ли исполнятся скрипты, определенные в таблице foxcode.dbf для записей с Type = "P". Оно не оказывает влияния на любые стандартные значения списков, которые определены для свойств, которые продолжают отображатся вне зависимости от установки этого свойства.
lExpandCOperators
Default = .T.
Позволяет "C-стильное" авторасширение для операторов плюс и минус:
"lcVar ++" и "lcVar --" расширяются как "lcVar = lcVar + 1" и "lcVar = lcVar –1"
Но в отличе от C, VFP IntelliSense, кроме того, позволяет нам использовать "=" с любым арифметическим оператором для автоматического дополнения строки. Так,
"lcVar +=" становится "lcVar = lcVar + " и "lcVar *=" становится "lcVar = lcVar *"
lAllowCustomDefScripts
Default = .T.
Это свойство недокументировано в VFP 7.0. Метод FoxCodeScript.DefaultScript() (который представляет собой метод, вызываемый повсюду, где IntelliSense встречает пробел) использует это свойство для определения будет или нет вызываться метод с именем HandleCustomScripts() ловушки (хука).
Если вы не намереваетесь использовать свои собственные скрипты для изменения поведения по умолчанию, вы должны установить это свойства в False, потому что скрипты, используемые по умолчанию, вызываются каждый раз, когда вы печатаете пробел в окне редактирования.
lEnableMultiWordCmdExpansion
Default = .T.
Используется в версиях VFP 8.0 и выше
Определяет - будут ли автоматически дополняться множественные части команды. По умолчанию установлено в .T. и при установленнов в .F. команды, наподобие INDEX ON должны быть напечатаны полностью.
Отметьте, что установка этого свойства в .F., кроме того, запрещает выделение заглавными буквами последующих ключевых слов, вне зависимости от установки свойства lKeyWordCapitalization
lDebugScripts
Default = .F.
Используется в версиях VFP 8.0 и выше
Определяет - будет ли предоставлена в отладчике (debugger) построчная трассировка скриптов в, которые используют версию "custom" объекта "foxcode". По умолчанию установлена в .F.
Замечание:

Эта установка оказывает влияние только на те скрипты,которые используют свой собственный локальный экземпляр класса FoxCodeScript.

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

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

Смотри также