Программные Модули Расширения, (обычно это: .prg или .scx) обеспечивают для вас простой путь доступа к базовым функциональным возможностям подсистемы Анализа исходного программного Кода "Coverage Profiler", далее по тексту - Профилировщика. Базовый класс Движка профилировщика: Cov_Standard с помощью стандартного Интерфейса (Оболочки) Coverage.app, обеспечивают только базовую, малую Часть функциональных возможностей Профилировщика. Представленный механизм Анализа формирует Отчет - Протокол в самом простейшем виде, только в одном из возможных вариантов, которые вы можете использовать для своих целей.

На основе механизма Субклассирования от Cov_Engine вы можете создать совершенно другой Интерфейс. Например, созданный вами Подкласс может отобразить Диалоговый бокс, определить параметры Запроса к Таблице-Протоколу Статистики, созданному стандартными механизмами Анализа. Указанный Запрос может содержать специфические параметры Фильтрации записей Протокола и параметры уточняющие колонки формируемого Отчета (использование только необходимых характеристик Статистики).

Вы можете создать новый пользовательский Интерфейс что называется: "на пустом месте", однако базовые функциональные возможности класса cov_engine достаточно надежно и просто реализованы в стандартном интерфейсе Профилировщика. На основе базового класса стандартного интерфейса Cov_Standard, использующего Движек класса Cov_Engine вы можете разработать дополнительное Расширение -  пользовательский Модуль или Форму, которые выполнят необходимые вам специфические функции. Стандартный класс Cov_standard обеспечивает регистрацию Модулей Расширения с помощью специальной командной кнопки, которая размещается в стандартном Окне Профилировщика (Coverage Profiler). Когда вы запускаете модуль Расширения на основе стандартного Интерфейса, то получаете все те же самые функциональные возможности базового Движка, как и стандартный модуль класса Cov_Standard, доступ к таблице Протокола, к свойствам и Методам самого Движка Анализа. Модули Расширения способны значительно обогатить стандартный Пользовательский Интерфейс, добавить требуемые функциональные возможности к стандартным возможностям обработки Протокола Статистики.

Создание Дополнительных Компонент

Вы можете разработать дополнительные, расширяющие компоненты к стандартному интерфейсу рассматриваемой подсистемы Анализа или использовать субклассирование от cov_standard, для создания собственного Интерфейса.

Расширение Стандартного Приложения Профилировщика

В следующем Списке представлены некоторые функции, которые могут быть выполнены модулями Расширения:

  • Добавление визуальных компонент к основной Форме подсистемы Анализа, Профилировщика.

  • Добавление специального Диалога набор форм профилировщика (в целях протестировать возможность расширения стандартного пользовательского Интерфейса, правильности его обработки и расположения).

  • Отображения отсутствующих в Стандарте функциональных возможностей Движка Coverage.

  • Создание подсистемы Запросов к стандартной Таблице - Протоколу Статистики Анализа, фильтры, порядок размещения данных и прочее, отображения Результатов Запросов.

    NoteОбратите Внимание

    Вы можете использовать методы Настройки - "Adjust..."  (AdjustCoverageFilenameCursor(), AdjustSourceCursor(), а также AdjustTargetCursor()), которые позволяют обрабатывать Исходные и Результирующие Таблицы данных базового Движка и используются в ваших модулях Расширений (Add-Ins).

  • Добавить имена файлов в Курсор IgnoredFiles, содержащий имена необработанных программных файлов, что сокращает время обработки Протокола Анализа.

  • Использование специализированных Перехватов в начальном Событии Init для выполнения модулей расширения.

  • Использование Регистрационных Списков модулей расширений (Register Add-Ins).

    Модальный диалоговый бокс, построенный от класса cov_AddInDialog, обеспечивает доступ к регистрационной Таблице модулей Расширений. Когда вы определяете  значение стандартное свойство Движка lRegisterAdd-In = ON, то полное имя модуля Расширения регистрируется в списке модулей, сохраненном в Реестре (Windows Registry) и данный модуль может быть вторично выполнен. В стандартном Окне Движка данная функция обеспечивается в:  Диалоговом боксе Coverage Profiler Options.

    Подсистема Coverage Engine обеспечивает регистрацию всех успешно выполненных модулей Расширений в свойстве-массиве aAddIns.

  • Построение возможности использования итоговой информации из Протокола Анализа, представления данной информации в собственном виде, отформатированную.

При разработке ваших Модулей Расширений рекомендуется учитывать следующие Замечания:

  • Вы можете использовать только одни из поддерживаемых типов файлов в ваших Расширениях: .qpr, .qpx, .mpr, .mpx, .app, .exe, .scx, fxp, .prg, а также файлы Процедур (которые открыты в момент разработки модулей ваших Расширений).

  • Стандартная форма Coverage Engine содержит невидимую ("invisible") инструментальную линейку. Если ваш Модуль является невизуальным, то вы можете использовать функциональ указанного ToolBar. Если ваш Модуль содержит визуальные Контролы, то вы можете использовать уже имеющийся член-компоненту .Cov_tools, что позволяет вам получить доступ к функциям Движка. Этот прием обеспечивает полную синхронизацию выполняемых функций вашим Модулем Расширения.

  • Все методы базового класса используют Исходные и Результирующие Таблицы, доступ к которым осуществляется через соответствующие Алиасы. Вы можете изменить или использовать имена указанных Алиасов, они хранятся в свойствах: cSourceAlias и cTargetAlias. Это позволяет вам работать с несколькими Протоколами Анализа исходных программных Кодов.

  • Основные Ограничения:

    • Модуль Расширения должен принимать один параметр (Профилировщик передает собственную ссылку в запускаемый Модуль).

    • Компонентой Расширения может быть один из перечисленных типов поддерживаемых программных файлов.

    • Используемые в Модуле процедурные файлы должны быть доступны (или загружены) в момент выполнения Профилировщика (смотрите дополнительно: SET PROCEDURE, команда). Профилировщик не использует вариант синтаксиса: IN FileName; и не использует вызов процедур или функций через стандартную команду: RETURN (например: Return MyFunction()). Профилировщик не использует секции NAME / LINK в стандартной команде вызова Формы: DO FORM; вам нужно самостоятельно отслеживать передаваемую ссылку на объект-ядро, ваша форма становится членом общего набора форм (FormSet) Движка Профилировщика.

    • Если планируете выполнение модуля Расширения при запуске Профилировщика, то вам необходимо использовать прямую ссылку на Движек, так как в этот момент публичная переменная _oCoverage еще не определена (еще не доступна). В другом случае, когда приложение уже запущено, вы можете использовать указанную переменную в качестве ссылки на объект-ядро, или на собственную переменную из Модуля Расширения,  как вам удобно.

    • Если вы создаете Расширение в виде Формы, для которой установлено свойство ShowWindow = 1 (In-Top-Level-Form), а Профилировщик запускается в собственном фрейме (независимо от главного окна VFP), то ваша форма запустится внутри главного окна Профилировщика.

    • Если вы используете вызов метода .RunAddIn из Командного Окна, сначала убедитесь в том, что фрейм Профилировщика запущен в самостоятельном контексте, как форма типа MDI, и только после этого активируйте вашу Форму.

Субклассирование от родительского класса Cov_Standard

Вы можете воспользоваться субклассированием от стандартного "движка" Coverage. Далее представлены основные компоненты структуры проекта COVERAGE.

Программный Файл Краткое Описание

Coverage.prg

Это есть Оболочка ("wrapper") для объекта Профилировщика, которая представляет рассматриваемый Объект.

Coverage.vcx Coverage.vct

Библиотека всех Классов, используемых в Проекте.

Cov_short.mnx Cov_short.mnt

Модуль-Таблица Контекстного Меню.

Cov_pjx.frx Cov_pjx.frt

Стандартный Отчет о Структуре уровня Проекта.

Coverage.h

Заголовочный файл Профилировщика, который состоит (ссылается) на следующие подразделы:

*— Символьные константы Профилировщика, используемые при Протоколировании и Анализе Исходного Программного Кода:

  CopyCode imageКопировать Код
 #INCLUDE COV_CHAR.H

*— Символьные константы Локализации (используются в протоколах и при Анализе):

  CopyCode imageКопировать Код
 #INCLUDE COV_LOCS.H

*— Общие константы ключевых Диалогов Профилировщика:

  CopyCode imageКопировать Код
 #INCLUDE COV_DLGS.H

*— Технические константы Профилировщика (Coverage):

  CopyCode imageКопировать Код
 #INCLUDE COV_SPEC.H

*— Константы, характеризующие Объект в Реестре Windows:

  CopyCode imageКопировать Код
 #INCLUDE COV_REGS.H

*— Константы "тонкой" настройки Профилировщика:

  CopyCode imageКопировать Код
 #INCLUDE COV_TUNE.H

Рассматриваемый Проект COVERAGE содержит также дополнительные файлы, такие, как: .ico .bmp, .msk .

Используйте файл COV_TUNE.H (содержащий дополнительные комментарии и разъяснения) для детального ознакомления с различными  тонкостями разработки данного Проекта (для исключения возможных Ошибок и неточностей).

Поскольку создаваемые Расширения управляются базовым Классом Профилировщика, то и любой порождаемый подкласс может использовать данные модули Расширения подсистемы Анализа исходного Кода.

Подкласс от базового класса Профилировщика (по-умолчанию, это приложение Coverage.app) никогда не запускает сразу модуль созданного расширения с помощью существующего Метода RunAddIn( ). Так создана Технология, однако, перед выполнением модуля Расширения сначала активируется модальное окно выбора конкретного Модуля (Add-In) и только после этого выполняется метод профилировщика RunAddIn( ). Модальный Диалоговый бокс получает необходимую ссылку на активный объект Профилировщика и устанавливает значение Свойства, содержащего Имя текущего, последнего выполненного модуля Расширения: cAddIn.

Если вы разрабатываете собственный подкласс Профилировщика, вам требуется обеспечить использование вашим Объектом стандартного  модального диалогового бокса (cov_AddInDialog), который обрабатывает все модули Расширения рассматриваемого Профилировщика; указанный Диалоговый бокс не использует никакие функции стандартного класса исходного Объекта.

Вы можете активировать другой (нестандартный) диалоговый бокс, напрямую определить значение свойства: cAddIn, как имя файла Модуля Расширения, или отменить (очистить) значение свойства cAddIn, или передать имя требуемого файла модуля Расширения в качестве параметра для выполнения Метода RunAddIn( ).

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

Дополнительную информацию об основных Свойствах, Событиях и Методах Профилировщика смотрите в разделе: Coverage Engine Object.

См. также