Architektur des Project-Objekts
Ein Project-Objekt in Visual FoxPro bietet eine IDispatch-Schnittstelle, so dass Automatisierungsclients, ActiveX-Steuerelemente und andere COM-Objekte das Project-Objekt mittels OLE-Standardschnittstellen ansprechen können. Aufgrund der vom Project-Objekt zur Verfügung gestellten IDispatch-Schnittstelle sind die bei der Manipulation von Projekten möglicherweise auftretenden Fehler OLE-Fehler.
Spracherweiterungen
Die beiden Befehle CREATE PROJECT und MODIFY PROJECT wurden um zwei Klauseln erweitert. Die erste Klausel (NOPROJECTHOOK) verhindert die Instanziierung eines ProjectHook-Objekts für ein Projekt. Die zweite Klausel (NOSHOW) öffnet ein Projekt, ohne es im Projekt-Manager anzuzeigen, und erlaubt Ihnen so die "unsichtbare" programmgesteuerte Änderung des Projekts. Zu einem späteren Zeitpunkt können Sie mit Hilfe der Visible-Eigenschaft den Projekt-Manager anzeigen. Weitere Informationen zu diesen beiden Klauseln finden Sie unter CREATE PROJECT und MODIFY PROJECT.
Projektereignisse
Die folgenden Abschnitte beschreiben Ereignisse und die Reihenfolge, in der diese beim Erzeugen, Modifizieren, Schließen, Erstellen usw. von Projekten eintreten.
Erzeugen eines Projekts
Wenn Sie CREATE PROJECT ausführen, aus dem Menü Datei ein neues Projekt erzeugen oder auf die Symbolleistenschaltfläche Neu klicken und die Erzeugung eines neuen Projekts spezifizieren, treten die folgenden Ereignisse ein:
Das Projektobjekt wird erzeugt.
Das ProjectHook-Objekt wird instanziiert.
Das Init-Ereignis für das ProjectHook-Objekt tritt ein. Wenn das Init-Ereignis den Standardwert Wahr (.T.) zurückgibt, wird das Project-Objekt erzeugt und das Projekt im Projekt-Manager angezeigt.
Wenn das Init-Ereignis den Wert Falsch (.F.) zurückgibt, wird das Projekt nicht erzeugt, das Project-Objekt und das ProjectHook-Objekt werden freigegeben und der Projekt-Manager wird nicht angezeigt.
Modifizieren eines existierenden Projekts
Wenn Sie MODIFY PROJECT ausführen, aus dem Menü Datei ein Projekt modifizieren oder auf die Symbolleistenschaltfläche Öffnen klicken und ein existierendes oder neues Projekt spezifizieren, treten die folgenden Ereignisse ein:
Das Projektobjekt wird erzeugt. Es erhält seine Werte aus der PJX-Datei des Projekts.
Das ProjectHook-Objekt wird instanziiert.
Das Init-Ereignis für das ProjectHook-Objekt tritt ein. Wenn das Init-Ereignis den Standardwert Wahr (.T.) zurückgibt, wird das Projekt im Projekt-Manager zur Modifikation geöffnet.
Wenn das Init-Ereignis den Wert Falsch (.F.) zurückgibt, wird das Projekt nicht zur Modifikation geöffnet, das Project-Objekt und das ProjectHook-Objekt werden freigegeben und der Projekt-Manager wird nicht angezeigt.
Schließen eines Projekts
Beim Schließen eines Projekts treten die folgenden Ereignisse ein:
- Das ProjectHook-Ereignis Destroy tritt ein, und das ProjectHook-Objekt wird freigegeben.
- Das Project-Objekt wird freigegeben.
Aufruf von BUILD APP, BUILD DLL oder BUILD EXE
Beim Aufruf von BUILD APP, BUILD DLL oder BUILD EXE treten die folgenden Ereignisse ein:
Das Projektobjekt wird erzeugt. Es erhält seine Werte aus der PJX-Datei des Projekts.
Das ProjectHook-Objekt wird instanziiert.
Das Init-Ereignis für das ProjectHook-Objekt tritt ein. Wenn das Init-Ereignis den Standardwert Wahr (.T.) zurückgibt, tritt das ProjectHook-Ereignis BeforeBuild ein. Enthält das BeforeBuild-Ereignis NODEFAULT, wird die APP-, DLL- bzw. EXE-Datei nicht erstellt. Andernfalls schreitet der Erstellungsprozess fort.
Wenn zum Projekt während des Erstellungsprozesses Dateien hinzugefügt werden, tritt vor dem Hinzufügen jeder einzelnen Datei das ProjectHook-Ereignis QueryAddFile ein. Ist das NODEFAULT-Schlüsselwort in das QueryAddFile-Ereignis eingeschlossen, wird die Datei nicht zum Projekt hinzugefügt. Andernfalls wird die Datei zum Projekt hinzugefügt. Wurde die APP-, DLL- bzw. EXE-Datei erfolgreich erstellt, tritt zunächst das AfterBuild-Ereignis und dann das Destroy-Ereignis des ProjectHook-Objekts ein.
Wenn das Init-Ereignis den Wert Falsch (.F.) zurückgibt, wird die APP-, DLL- bzw. EXE-Datei nicht erstellt und das Projektobjekt und das ProjectHook-Objekt werden freigegeben.
Aufruf von BUILD PROJECT
Beim Aufruf von BUILD PROJECT mit der Klausel FROM treten die folgenden Ereignisse ein. Wenn die Klausel FROM weggelassen wird, treten die Ereignisse in der oben beim Aufruf von BUILD APP, BUILD DLL oder BUILD EXE beschriebenen Reihenfolge ein.
Das Projektobjekt wird erzeugt. Es erhält seine Werte aus der PJX-Datei des Projekts.
Das ProjectHook-Objekt wird instanziiert.
Das Init-Ereignis für das ProjectHook-Objekt tritt ein. Wenn das Init-Ereignis den Standardwert Wahr (.T.) zurückgibt, werden die in der FROM-Klausel spezifizierten Dateien zum Projekt einzeln hinzugefügt. Vor dem Hinzufügen jeder einzelnen Datei tritt das ProjectHook-Ereignis QueryAddFile ein. Enthält das QueryAddFile-Ereignis NODEFAULT, wird die Datei nicht zum Projekt hinzugefügt. Andernfalls wird die Datei zum Projekt hinzugefügt.
Anschließend tritt das ProjectHook-Ereignis BeforeBuild ein. Wenn das BeforeBuild-Ereignis NODEFAULT enthält, wird das Projekt nicht erstellt. Andernfalls wird das Projekt erstellt.
Nach Abschluss der Projekterstellung tritt zunächst das AfterBuild-Ereignis und dann das Destroy-Ereignis des ProjectHook-Objekts ein.
Wenn das ProjectHook-Ereignis Init den Wert Falsch (.F.) zurückgibt, wird das Projekt nicht erstellt. Das Projektobjekt und das ProjectHook-Objekt werden freigegeben, und es wird keine neue PJX-Datei erzeugt.
Verwenden von Drag & Drop Operationen
Wenn Sie eine oder mehrere Dateien über den Gliederungsbereich (Struktur) des Projekt-Managers ziehen, treten die folgenden Ereignisse ein:
- Wenn der Mauszeiger über den Gliederungsbereich des Projekt-Managers positioniert wird, tritt das ProjectHook-Ereignis OLEDragOver ein. Dabei hat der Parameter nState den Wert 0 (DRAG_ENTER in Foxpro.h). Das OLEDragOver-Ereignis tritt dann wiederholt mit nState = 2 (DRAG_OVER in Foxpro.h) auf. Verlässt der Mauszeiger den Gliederungsbereich des Projekt-Managers, tritt das OLEDragOver-Ereignis mit nState =1 (DRAG_LEAVE in Foxpro.h) auf.
- Wenn Sie die Maustaste loslassen, während der Mauszeiger über dem Gliederungsbereich des Projekt-Managers positioniert ist, tritt das ProjectHook-Ereignis OLEDragDrop auf. Standardmäßig fügt Visual FoxPro im Projekt-Manager alle abgelegten Dateien zum Projekt hinzu. Vor dem Hinzufügen jeder einzelnen Datei tritt das ProjectHook-Ereignis QueryAddFile ein.
Hinzufügen einer Datei mittels der Schaltfläche "Hinzufügen"
Wenn Sie durch Klicken auf die Projekt-Manager-Schaltfläche Hinzufügen eine Datei zu einem Projekt hinzufügen, treten die folgenden Ereignisse ein:
- Das Dialogfeld Öffnen wird angezeigt.
- Wenn Sie eine Datei auswählen und auf OK klicken, wird für die ausgewählte Datei ein File-Objekt erzeugt.
- Das ProjectHook-Ereignis QueryAddFile tritt ein, und ihm wird der Name des File-Objekts übergeben. Enthält das QueryAddFile-Ereignis NODEFAULT, wird die Datei nicht zum Projekt hinzugefügt. Andernfalls wird die Datei zum Projekt hinzugefügt.
Hinzufügen einer Datei mittels der Schaltfläche "Neu"
Wenn Sie durch Klicken auf die Projekt-Manager-Schaltfläche Neu eine neue Datei zu einem Projekt hinzufügen, treten die folgenden Ereignisse ein:
- Der entsprechende Designer oder Editor für die Datei wird angezeigt.
- Wenn die neue Datei gespeichert wird, wird das Dialogfeld Speichern unter angezeigt. Beim Klicken von Speichern wird für die neue Datei ein File-Objekt erzeugt.
- Das ProjectHook-Ereignis QueryAddFile tritt ein, und ihm wird der Name des File-Objekts übergeben. Enthält das QueryAddFile-Ereignis NODEFAULT, wird die Datei nicht zum Projekt hinzugefügt. Andernfalls wird die Datei zum Projekt hinzugefügt.
Modifizieren einer Datei mittels der Schaltfläche "Modifizieren"
Wenn Sie durch Klicken der Projekt-Manager-Schaltfläche Modifizieren eine Datei eines Projekts modifizieren, treten die folgenden Ereignisse ein:
- Das ProjectHook-Ereignis QueryModifyFile tritt ein, bevor der entsprechende Designer oder Editor für die Datei angezeigt wird.
- Das File-Objekt der Datei wird dem QueryModifyFile-Ereignis als Parameter übergeben. Enthält das QueryModifyFile-Ereignis NODEFAULT, so wird der entsprechende Designer oder Editor für die Datei nicht angezeigt und die Datei nicht modifiziert. Andernfalls wird die Datei zwecks Modifizierung im entsprechenden Designer oder Editor geöffnet.
Entfernen einer Datei mittels der Schaltfläche "Entfernen"
Wenn Sie durch Klicken auf die Projekt-Manager-Schaltfläche Entfernen eine Datei eines Projekts entfernen, treten die folgenden Ereignisse ein:
- Das ProjectHook-Ereignis QueryRemoveFile tritt ein.
- Das File-Objekt der zu entfernenden Datei wird dem QueryRemoveFile-Ereignis als Parameter übergeben. Enthält das QueryRemoveFile-Ereignis NODEFAULT, wird die Datei nicht aus dem Projekt entfernt. Andernfalls wird die Datei aus dem Projekt entfernt.
Ausführen einer Datei mittels der Schaltfläche "Ausführen"
Wenn Sie durch Klicken auf die Projekt-Manager-Schaltfläche Ausführen eine Datei eines Projekts ausführen, treten die folgenden Ereignisse ein:
- Das ProjectHook-Ereignis QueryRunFile tritt ein.
- Das File-Objekt der auszuführenden Datei wird dem QueryRunFile-Ereignis als Parameter übergeben. Enthält das QueryRunFile-Ereignis NODEFAULT, so wird die Datei nicht ausgeführt. Andernfalls wird die Datei ausgeführt.
Neuerstellen eines Projekts oder Erstellung einer Datei mittels der Schaltfläche "Erstellen"
Wenn Sie durch Klicken auf die Projekt-Manager-Schaltfläche Erstellen ein Projekt neu erstellen oder aus einem Projekt eine APP-, DLL- oder EXE-Datei erstellen, treten die folgenden Ereignisse ein:
- Das Dialogfeld Erstellungsoptionen wird angezeigt.
- Hier haben Sie die Auswahl zwischen Projekt neu erstellen, Anwendung, Ausführbare Win32/COM-Server,Single Thread-COM-Server und Multi Thread-COM-Server und können zusätzliche Erstellungsoptionen spezifizieren. Wenn Sie auf Abbrechen klicken, findet keine Erstellung statt.
- Wenn Sie auf OK klicken, tritt das ProjectHook-Ereignis BeforeBuild ein und der Erstellungsprozess startet.
- Nach vollendeter Erstellung tritt das ProjectHook-Ereignis AfterBuild ein.
Siehe auch
Die Objekthierarchie des Projekts | Ausführen des Beispiels für Projekt-Manager-Hooks | Anwendungsentwicklung und Entwicklerproduktivität