Иерархия проекта состоит из коллекции Projects, объектов Project коллекции и объекта ProjectHook, связанного с каждым объектом проекта. Объект  Project содержит коллекцию Files, состоящую из файлов проекта и коллекцию Servers, состоящую из серверов автоматизации, созданных из проекта.

Приведенная ниже диаграмма иллюстрирует иерархию проекта внутри объектной модели Visual FoxPro.

Иерархия проектов

FoxPro Project Object Hierarchy

Объект Project создается при создании проекта, открытии или перестройки, а также когда из проекта собираются файл приложения (.app), файл dynamic-link library (.dll) или исполнимый файл (.exe). Когда открывается проект, связанный с классом ProjectHook, то по умолчанию создается объект ProjectHook.

Когда в проекте происходит событие, объект Project посылает его объекту ProjectHook. Код пользователя в событии объекта ProjectHook исполняется и возвращает управление назад объекту Project. Значение, возвращаемое объекту Project из объекта ProjectHook определяет - будет ли объект Project завершать операцию.

NoteСовет

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

Перечисленные ниже разделы содержат более подробную информацию об иерархии проекта:

Коллекция Projects в иерархии проекта

Коллекция Projects предоставляет прямой доступ к объектам Project, позволяя вам управлять проектом, файлами и серверами, которые она содержит. При создании проекта, его открытии, сборки файла приложения (.app), файла dynamic-link library (.dll) или исполнимого файла (.exe), создаваемых из проекта, объект проекта добавляется в коллекцию проектов.

Вы можете получить информацию о проекте в коллекции Projects с помощью его свойств и методов. Например, приведенные ниже строки кода показывают два способа отображения имен проектов в коллекции Projects. Первый пример использует свойство Count и метод Item коллекции Projects. Второй пример использует команду FOR EACH.

 CopyCode imageСкопировать код
nProjectCount = Application.Projects.Count
FOR nCount = 1 TO nProjectCount
   ? Application.Projects.Item(nCount).Name
NEXT
FOR EACH oProj IN Application.Projects
   ? oProj.Name
ENDFOR

Для получения более подробной информации смотрите Коллекция Projects.

Объект Project в иерархии проекта

Объект Project создается при создании проекта, его открытии, сборки файла приложения (.app), файла dynamic-link library (.dll) или исполнимого файла (.exe, создаваемых из проекта. Объект Project содержит коллекцию Files, состоящую из файлов проекта и коллекции Servers, состоящую из серверов автоматизации, созданных из проекта.

Объект Project дает вам возможность управлять проектом программно и обращаться к нему через объект Application. Объект Application имеет свойство ActiveProject, которое предоставляет ссылку на открытый проект в текущем, активном Project Manager (Диспетчере проекта).

Вы можете управлять объектом Project через его свойства и методы. Для получения более подробной информации смотрите Объект Project и Объект Application.

Коллекция Files

Коллекция Files предоставляет прямой доступ к объекту File, что дает вам возможность управлять объектами File в проекте, пока проект открыт. Вы можете управлять объектом File, используя его свойства и методы. Для получения более подробной информации смотрите Объект File.

Вы можете добавлять файлы в проект программно. Например, приведенные ниже строки кода используют свойство ActiveProject объекта Application для добавления программы Main.prg в текущий активный проект:

 CopyCode imageСкопировать код
Application.ActiveProject.Files.Add('Main.prg')

Приведенные ниже строки кода добавляют Main.prg в первый проект коллекции Projects:

 CopyCode imageСкопировать код
Application.Projects[1].Files.Add('Main.prg')

Вы можете получить информацию о файле в коллекции Files, используя его свойства и методы. Например, приведенные ниже строки кода показывают два способа отображения имен всех файлов в коллекции Files. Первый пример использует свойство Count и метод Item коллекции Files. Второй пример использует команду FOR EACH.

 CopyCode imageСкопировать код
nFileCount = Application.ActiveProject.Files.Count
FOR nCount = 1 TO nFileCount
   ? Application.ActiveProject.Files.Item(nCount).Name
NEXT
FOR EACH oProj IN Application.ActiveProject.Files
   ? oProj.Name
ENDFOR

Для получения более подробной информации смотрите Коллекция Files.

Коллекция Servers

Коллекция Servers предоставляет прямой доступ к объекту Server, что дает вам возможность управлять объектами Server, которые содержит проект. Вы можете управлять коллекцией Servers через ее свойства и методы. Для получения более подробной информации смотрите Коллекция Servers.

Когда вы собираете файл dynamic-link library (.dll) или исполнимый файл (.exe), содержащий Automation server из проекта, объект Server добавляется в коллекцию Servers. Для получения более подробной информации о создании серверов автоматизации смотрите описание задачи Как: создавать сервера автоматизации в разделе Совместное использование информации и введение OLE.

NoteЗамечание

Объект Server не создается до тех пор, пока проект, содержащий класс OLEPUBLIC, определенный командой DEFINE CLASS не будет собран. Для получения более подробной информации смотрите описание команды DEFINE CLASS.

Объект Server дает вам возможность получить информацию о серверах автоматизации, содержащихся в проекте, например, информацию библиотеки типов. Эта информация, кроме того, доступна на закладке Servers (Сервера) диалогового окна Project Information (Информация о проекте). Для получения более подробной информации смотрите Закладка Servers (Сервера) диалогового окна Options (Параметры).

Вы можете управлять объектом Server в коллекции Servers с помощью его свойств. Для получения более подробной информации смотрите Объект Server.

Объект ProjectHook в иерархии проекта

Когда открывается проект, связанный с классом ProjectHook, то по умолчанию создается объект ProjectHook.

NoteСовет

Длс предотвращения создания объекта ProjectHook для проекта, включите ключевое слово NOPROJECTHOOK в команды CREATE PROJECT и MODIFY PROJECT. Для получения более подробной информации смотрите описания команд CREATE PROJECT и MODIFY PROJECT.

Объект ProjectHook как раз и позволяет вам программно обращаться к событиями в проекте. Например, вы можете исполнять программный при добавлении файла в проект. Объект ProjectHook отличается от объекта Project, который содержит все свойства и методы, доступные в диалоговом окне Project Information (Информация о проекте). Для получения более подробной информации смотрите описание Диалоговое окно Project Information (Информация о проекте).

Используемый по умолчанию класс ProjectHook определяется для новых проектов на закладке Projects (Проекты) диалогового окна Options (Параметры). Вы можете переписать используемый по умолчанию класс ProjectHook указанием другого класса для конкретного проекта в диалоговом окне Project Information (Информация о проекте). Однако, если на закладке Projects не определен класс ProjectHook, для использования по умолчанию, то новые проекты не связываются с объектом ProjectHook. Для получения более подробной информации смотрите Закладка Projects (Проекты) диалогового окна Options (Параметры).

В run time, вы можете использовать свойство ProjectHook для указания класса project hook для проекта. Если вы измените класс ProjectHook для проектаЮ то новый класс ProjectHook не будет иметь воздействия до момента, пока вы не закроете и вновь не откроете проект.

Вы можете управлять объектом ProjectHook через его свойства, методы и события. Для получения более подробной информации смотрите Объект ProjectHook.

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