Die Objekthierarchie des Projekts
Die Objekthierarchie eines Projekts besteht aus dem Projekt, einem Projektobjekt und dem zugehörigen ProjectHook-Objekt. Ein Projektobjekt enthält eine Anzahl von Dateien (die zu dem Projekt gehörenden Dateien) und eine Anzahl von Servern (die aus dem Projekt erstellten Automatisierungsserver). Das folgende Diagramm veranschaulicht die Projektobjekthierarchie innerhalb des Objektmodells von Visual FoxPro:
Projects-Auflistung
Die Projects-Auflistung bietet direkten Zugriff auf ein Projektobjekt; sie gestattet Ihnen die Änderung des Projekts und der in diesem enthaltenen Dateien und Server. Jedes Mal, wenn ein Projekt erzeugt oder geöffnet wird oder eine APP-, DLL- oder EXE-Datei aus dem Projekt erstellt wird, wird zur Projects-Auflistung ein Projektobjekt hinzugefügt.
Wie bei anderen OLE-Auflistungen können Sie der Projects-Auflistung Informationen zu einem Projekt entnehmen. So verwendet beispielsweise der folgende Code die Eigenschaften Count und Item der Projects-Auflistung, um die Namen aller Projekte der Projects-Auflistung anzuzeigen; anschließend wird die gleiche Information mit Hilfe des FOR EACH-Befehls angezeigt:
nProjectCount = Application.Projects.Count
FOR nCount = 1 TO nProjectCount
? Application.Projects.Item(nCount).Name
NEXT
FOR EACH oProj IN Application.Projects
? oProj.Name
ENDFOR
Die folgende Codezeile verwendet die ActiveProject-Eigenschaft, um zu dem derzeit aktiven Projekt ein Programm (Main.prg) hinzuzufügen:
Application.ActiveProject.Files.Add('Main.prg')
Die folgende Codezeile fügt Main.prg zu dem ersten der Projects-Auflistung hinzugefügten Projekt hinzu:
Application.Projects[1].Files.Add('Main.prg')
Eine Projects-Auflistung verfügt über die folgende Eigenschaft und Methode:
Eigenschaften | |
---|---|
Count |
Methoden | |
---|---|
Item |
Projektobjekt
Das Projektobjekt wird immer dann instanziiert, wenn ein Projekt aus dem Menü Datei oder durch einen der Befehle CREATE PROJECT, MODIFY PROJECT, BUILD APP, BUILD DLL, BUILD EXE oder BUILD PROJECT geöffnet wird. Das Projektobjekt ermöglicht Ihnen die programmgesteuerte Änderung des Projekts; der Zugriff auf das Programmobjekt erfolgt durch das Visual FoxPro-Anwendungsobjekt. Beachten Sie, dass das Anwendungsobjekt die neue ActiveProject-Eigenschaft unterstützt, welche einen Projektobjektverweis auf das im derzeit aktiven Projekt-Manager geöffnete Projekt bereitstellt.
Ein Projektobjekt verfügt über die folgenden Eigenschaften und Methoden:
Methoden | |
---|---|
Build | CleanUp |
Refresh | SetMain |
Das ProjectHook-Objekt
Bei einem ProjectHook-Objekt handelt es sich um eine Visual FoxPro-Basisklasse, die standardmäßig instanziiert wird, wenn ein diesem ProjektHook-Objekt zugewiesenes Projekt geöffnet wird. (Sie können die NOPROJECTHOOK-Klausel zu CREATE PROJECT und MODIFY PROJECT hinzunehmen, um zu verhindern, dass ein ProjectHook-Objekt für das Projekt instanziiert wird.)
Das ProjectHook-Objekt ermöglicht den programmgesteuerten Zugriff auf Ereignisse, die in einem Projekt eintreten. Beispielsweise können Sie immer dann, wenn eine Datei zu einem Projekt hinzugefügt wird, Code ausführen. Dieses optionale Objekt unterscheidet sich vom Projektobjekt, das sämtliche Eigenschaften und Methoden enthält, die im Dialogfeld Projektinformation verfügbar sind.
Für neue Projekte können Sie auf der Registerkarte Projekte des Dialogfeldes Optionen eine Projektklasse als Standard-ProjectHook-Klasse spezifizieren. Wird auf dieser Registerkarte keine Projektklasse spezifiziert, so wird neuen Projekten keine ProjectHook-Klasse zugewiesen. Im Dialogfeld Projektinformation können Sie für ein individuelles Projekt durch Überschreiben der Projektklasse eine ProjectHook-Klasse spezifizieren. Zur Laufzeit können Sie mit Hilfe der ProjectHook-Eigenschaft eine Projekthook-Klasse für ein Projekt angeben. Wenn Sie die ProjectHook-Klasse eines Projekts ändern, wird die neue ProjectHook-Klasse erst dann gültig und aktiv, wenn das Projekt geschlossen und wieder neu geöffnet wurde.
Ein ProjectHook-Objekt verfügt über die folgenden Eigenschaften, Ereignisse und Methoden:
Eigenschaften | |
BaseClass | Class |
ClassLibrary | Comment |
Name | OLEDropEffects |
OLEDropHasData | OLEDropMode |
Parent | ParentClass |
Tag |
Ereignisse | |
AfterBuild | BeforeBuild |
Destroy | Error |
Init | OLEDragDrop |
OLEDragOver | OLEGiveFeedBack |
QueryAddFile | QueryModifyFile |
QueryRemoveFile | QueryRunFile |
Methoden | |
AddProperty | ReadExpression |
ReadMethod | ResetToDefault |
SaveAsClass | WriteExpression |
Interaktion zwischen Projektobjekt und ProjectHook-Objekt
Wenn Sie den Projekt-Manager aus dem Menü Datei oder durch einen der Befehle CREATE PROJECT oder MODIFY PROJECT öffnen, wird das Projekt-Manager-Fenster angezeigt und ein Projektobjekt samt dem zugehörigen ProjectHook-Objekt instanziiert. Projekterstellungsbefehle (BUILD PROJECT, BUILD APP, BUILD DLL und BUILD EXE) instanziieren ebenfalls Projektobjekt und ProjectHook-Objekt.
Tritt in einem Projekt ein Ereignis auf, so gibt das Projektobjekt das Ereignis an das ProjectHook-Objekt weiter. Der Benutzercode für das Ereignis im ProjectHook-Objekt wird ausgeführt und die Steuerung wieder zurück an das Projektobjekt übertragen. Der dem Projektobjekt vom ProjectHook-Objekt zurückgegebene Wert bestimmt, ob das Projektobjekt die Ausführung beendet. Enthält der Ereigniscode NODEFAULT, so verhindert dies die Ausführung der Standardaktion. Enthält beispielsweise das QueryAddFile-Ereignis NODEFAULT, so verhindert dies das erfolgreiche Hinzufügen einer Datei zu einem Projekt.
Files-Auflistung
Die Dateiauflistung bietet direkten Zugriff auf ein Dateiobjekt; sie gestattet Ihnen die Änderung von Dateiobjekten eines offenen Projekts. Wie bei anderen OLE-Auflistungen können Sie der Dateiauflistung Informationen zu einer Datei in einem Projekt entnehmen. So verwendet beispielsweise der folgende Code die Eigenschaften Count und Item der Files-Auflistung, um die Namen aller Dateien der Files-Auflistung anzuzeigen. Anschließend wird die gleiche Information mit Hilfe des FOR EACH-Befehls angezeigt:
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
Die folgende Codezeile verwendet die ActiveProject-Eigenschaft, um zum derzeit aktiven Projekt ein Programm (Main.prg) hinzuzufügen:
Application.ActiveProject.Files.Add('Main.prg')
Die folgende Codezeile fügt Main.prg zu dem ersten der Projects-Auflistung hinzugefügten Projekt hinzu:
Application.Projects[1].Files.Add('Main.prg')
Die Dateiauflistung verfügt über die folgenden Eigenschaften und Methoden:
Eigenschaften | |
Count |
Methoden | |
Add | |
Item |
File-Objekt
Das File-Objekt erlaubt Ihnen die Manipulation individueller Dateien in einem Projekt.
Ein File-Objekt verfügt über die folgenden Eigenschaften und Methoden:
Eigenschaften | |
CodePage | Description |
Exclude | FileClass |
FileClassLibrary | LastModified |
Name | ReadOnly |
SCCStatus | Type |
Methoden | |
AddToSCC | CheckIn |
CheckOut | GetLatestVersion |
Modify | Remove |
RemoveFromSCC | Run |
UndoCheckOut |
Servers-Auflistung
Die Servers-Auflistung bietet direkten Zugriff auf ein Server-Objekt; sie gestattet Ihnen die Änderung der in einem Projekt enthaltenen Server. Sobald eine DLL-Datei (Dynamic Link Library) oder EXE-Datei (ausführbare Datei), die einen Automatisierungsserver enthält, aus dem Projekt erzeugt wird, wird zu der Servers-Auflistung ein Server-Objekt hinzugefügt. Weitere Informationen zum Erstellen von Automatisierungsservern finden Sie unter Erstellen von Automatisierungsservern in Freigeben von Informationen und Hinzufügen von OLE.
Eine Servers-Auflistung verfügt über die folgende Eigenschaft und Methode:
Eigenschaften | |
Count |
Methoden | |
Item |
Serverobjekt (Server)
Das Server-Objekt ermöglicht Ihnen das Ermitteln von Informationen (einschließlich Typenbibliotheksinformationen) über die in einem Projekt enthaltenen Automatisierungsserver. Diese Informationen sind ebenfalls auf der Registerkarte Server des Dialogfeldes Projektinformationen verfügbar. Beachten Sie, dass ein Server-Objekt erst dann erstellt wird, wenn das die OLEPUBLIC-Klasse (durch den DEFINE CLASS-Befehl spezifiziert) enthaltende Projekt erstellt wird.
Ein Server-Objekt verfügt über die folgenden Eigenschaften:
Eigenschaften | |
CLSID | Description |
HelpContextID | Instancing |
ProgID | ServerClass |
ServerClassLibrary |
Siehe auch
Projekt-Manager-Hooks | Architektur des Projektobjekts | Ausführen des Beispiels für Projekt-Manager-Hooks | Anwendungsentwicklung und Entwicklerproduktivität | Anwendungsobjekt