Visual FoxPro объект Project выказывает интерфейс IDispatch, поэтому клиенты Automation, элементы ActiveX и прочие COM-объекты могут обращаться к объекту проекта через стандартные интерфейсы OLE. При управлении проектами, ошибки, которые могут возникнуть представляют собой ошибки OLE, так как объект Project выказывает интерфейс IDispatch.

Союытия объекта Project

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

Создание нового проекта

При исполнении команды CREATE PROJECT, создании нового проекта из меню File (Файл) или при щелчке по кнопке New (Новый) на стандартной полоске инструментов для создания нового проекта, будут происходить перечисленные ниже события:

  1. Создается объект Project.

  2. Создается экземпляр объекта ProjectHook.

  3. Наступает событие Init объекта ProjectHook. Если событие Init вернет true (.T.), что возвращается по умолчанию, проект создается и отображается в диспетчере проекта (Project Manager).

    Если событие Init вернет false (.F.), проект не создается, объекты project и ProjectHook высвобождаются из памяти, а диспетчер проекта не отображается.

Изменения в существующем проекте

При исполнении команды MODIFY PROJECT, изменении проекта выборкой из меню File (Файл) или при щелчке по кнопке Open (Открыть) на стандартной полоске инструментов будут происходить перечисленные ниже события:

  1. Создается объект project. Объект project получает свои значения из файла проекта .pjx.

  2. Создается экземпляр объекта ProjectHook.

  3. Наступает событие Init объекта ProjectHook. Если событие Init вернет true (.T.), что возвращается по умолчанию, проект создается и отображается для производства изменений в диспетчере проекта (Project Manager).

    Если событие Init вернет false (.F.), проект не создается, объекты project и ProjectHook высвобождаются из памяти, а диспетчер проекта не отображается.

Закрытие проекта

При закрытии проекта будут происходить перечисленные ниже события:

  1. Срабатывает событие Destroy объекта ProjectHook и объект ProjectHook высвобождается из памяти.

  2. Объект Project высвобождается из памяти.

Выдача команд BUILD APP, BUILD DLL или BUILD EXE

При выдаче команд BUILD APP, BUILD DLL или BUILD EXE будут происходить перечисленные ниже события:

  1. Создается объект project. Объект project получает свои значения из файла проекта .pjx.

  2. Создается экземпляр объекта ProjectHook.

  3. Наступает событие Init объекта ProjectHook. Если событие Init вернет true (.T.), что возвращается по умолчанию, происходит событие BeforeBuild. Если в событие BeforeBuild включена команда NODEFAULT, то сборка файлов .app, .dll или .exe не производится. В противном случае, начинается процесс сборки файлов.

    Если во время процесса сборки в проект добавляется любой файл, то для объекта ProjectHook происходит событие QueryAddFile до ввода каждого файла. Если в событие QueryAddFile включена команда NODEFAULT, то файл в проект не добавляется. В противном случае, файл добавляется в проект. После успешной сборки файлов .app, .dll или .exe происходит событие AfterBuild объекта ProjectHook и затем событие Destroy этого же объекта.

    Если событие Init вернет (.F.) то сборка файлов .app, .dll или .exe не производится и объекты ProjectHook высвобождаются из памяти.

Выдача команды BUILD PROJECT

При выдаче команды BUILD PROJECT с опцией FROM происходят перечисленные ниже события. Если в команде опция FROM опущена, события наступают в порядке, описанном выше, когда выдаются команды BUILD APP, BUILD DLL или BUILD EXE.

  1. Создается объект project. Объект project получает свои значения из файла проекта .pjx.

  2. Создается экземпляр объекта ProjectHook.

  3. Наступает событие Init объекта ProjectHook. Если событие Init вернет true (.T.), что возвращается по умолчанию, то файлы, указанные в опции FROM добавляются в проект индивидуально. Событие QueryAddFile объекта ProjectHook происходит до ввода каждого файла в проект. Если в событие QueryAddFile включена команда NODEFAULT, файлы в проект не добавляются. В противном случае в проект добавляются файлы.

    Затем наступает событие BeforeBuild объекта ProjectHook. Если в событие BeforeBuild включена команда NODEFAULT, сборка проекта не производится. В противном случае проект будет собран.

  4. После успешной сборки проекта происходит событие AfterBuild объекта ProjectHook и затем событие Destroy этого же объекта.

    Если событие Init вернет (.F.) то сборка проекта не производится и объекты Project и ProjectHook высвобождаются из памяти, а новый .pjx не создается.

Использование операций Drag and Drop

Когда вы перетаскиваете файл или набор файлов над секцией выборки файлов (деревом иерархии проекта) диспетчера проекта (Project Manager), то происходят перечисленные ниже события:

  1. Когда указатель мыши позиционируется над секцией выборки диспетчера проекта происходит событие OLEDragOver объекта ProjectHook с параметром nState установленным в 0 (DRAG_ENTER в Foxpro.h). Затем многократно происходит событие OLEDragOver с параметром nState равным 2 (DRAG_OVER в Foxpro.h). Если указатель мыши покидает область выборки Project Manager, то происходит событие OLEDragOver с параметром nState равным 1 (DRAG_LEAVE в Foxpro.h).

  2. Событие OLEDragDrop объекта ProjectHook происходит, если вы отпускаете кнопку мыши, когда указатель мыши спозиционирован над секцией выборки Project Manager. По умолчанию, Visual FoxPro вводит каждый файл, перетащенный на Project Manager в открытый в нем проект. Событие QueryAddFile объекта ProjectHook происходит каждый раз при добавлении файла в проект.

Добавление файла с помощью командной кнопки Add (Добавить)

Когда вы щелкаете по командной кнопке Add (Добавить) диспетчера проекта с целью добавить в проект файл, то происходит перечисленное ниже:

  1. Открывается диалоговое окно Open (Открыть).

  2. Если вы выбрали файл и щелкнули по OK, для выбранного вами файла создается объект file.

  3. Наступает событие QueryAddFile объекта ProjectHook и событию посылается имя объекта file. Если в событие QueryAddFile включена команда NODEFAULT, файл в проект не добавляется. В противном случае в проект добавляется выбранный вами файл.

Добавление файла с помощью командной кнопки New (Новый)

Когда вы щелкаете по командной кнопке New (Новый) диспетчера проекта с целью добавить в проект файл, то происходит перечисленное ниже:

  1. Отображается соответствующий конструктор или редактор файла.

  2. При сохранении файла отображается диалоговое окно Save As. Щелчок по Save создает объект файла для нового файла.

  3. Наступает событие QueryAddFile объекта ProjectHook и событию посылается имя объекта file. Если в событие QueryAddFile включена команда NODEFAULT, файл в проект не добавляется. В противном случае в проект добавляется выбранный вами файл..

Изменение файла с помощью командной кнопки Modify (Изменить)

Когда вы щелкаете по командной кнопке Modify (Изменить) диспетчера проекта с целью изменить файл в проекте, то происходит перечисленное ниже:

  1. Событие QueryModifyFile объекта ProjectHook происходит до того, как будет отображен соответствующий типу файла конструктор или редактор.

  2. Объект файла, изменяемого файла, посылается событию QueryModifyFile в качестве параметра. Если в событие QueryModifyFile включена команда NODEFAULT, то соответствующий конструктор или редактор не отображаются и файл не изменяется. В противном случае файл открывается на редактирование в соответствующем типу файла конструкторе или редакторе.

Удаление файла с помощью командной кнопки Remove (Удалить)

Когда вы щелкаете по командной кнопке Remove (Удалить) диспетчера проекта с целью удалить файл из проекта, то происходит перечисленное ниже:

  1. Наступает событие QueryRemoveFile объета ProjectHook.

  2. Объект удаляемого файла посылается событию QueryRemoveFile в качестве параметра. Если в событие QueryRemoveFile включена команда NODEFAULT, то файл не удаляется из проекта. В противном случае файл удаляется из проекта.

Исполнени файла с помощью командной кнопки Run (Запустить)

Когда вы щелкаете по командной кнопке Run (Запустить) диспетчера проекта с целью запустить файл из проекта, то происходит перечисленное ниже:

  1. Наступает событие QueryRunFile объекта ProjectHook.

  2. Объект файла, который должен быть исполнен, посылается событию QueryRunFile в качестве параметра. Если в событие QueryRunFile включена команда NODEFAULT, то файл не исполняется. В противном случае файл запускается на исполнение.

Перестройка проекта или сборка файла с помощью командной кнопки Build (Собрать)

Когда вы перестраиваете проект или собираете файлы .app, .dll или .exe из проекта, щелкнув по командной кнопке Build (Собрать) диспетчера проекта, то происходит перечисленное ниже:

  1. Отображается диалоговое окно Build Options (Параметры сборки).

  2. Вы можете выбрать Rebuild Project (Перестроить проект), Build Application (Собрать приложение), Build Executable (Собрать исполнимый файл) или Build COM DLL (Собрать COM DLL) и указать дополнительные параметры сборки. Если вы щелкните по Cancel, то сборка не происходит.

  3. Если вы щелкните по OK, то произойдет событие BeforeBuild объекта ProjectHook и начнется процесс сборки.

  4. После завершения сборки, наступает событие AfterBuild объекта ProjectHook.

Смотрите также