Mathias Gronau
Mit der Einführung von Visual FoxPros Project Hooks im Jahre 1998 entstand
der Wunsch, über eine Art Masterhook zu verfügen, der in der Lage ist, Aufgaben
an mehr als eine Klasse zu delegieren. Durch das Public Domain-Projekt ProjectHookX
sind Entwickler in der Lage, Project Hooks aus unterschiedlichen Quellen gleichzeitig
zu nutzen. Das Konzept dieser Klasse ist sehr einfach, aber für alle Entwickler
sehr sinnvoll. Die
Idee ist...
Klasse: cPJXHookX
Klassenbibliothek: PJXHookX.VCX
Basisklasse: ProjectHook
Ahooks[1] | Eine Eigenschaft vom Typ Array, das eine Objektreferenz auf jeden Hook enthält. |
cSelectForm | Der Name des Formulars, das von der Methode SelectHooks benutzt wird. Vorgabewert ist frmSelectHooks. |
lAlwaysProceed | Eine Eigenschaft vom Typ logisch, die entscheidet, ob das Fehlschlagen eines Hooks das Fehlschlagen aller Hooks bewirkt. Ein Beispiel: Der Master Project Hook wurde instanziiert, ein gehookter Hook kann nicht instanziiert werden und lAlwaysProceed steht auf .F.. In diesem Fall stoppt der Prozess der Instanziierung, und auch der Master Hook wird nicht instanziiert. Wenn lAlwaysProceed auf .T. steht, werden die anderen Hooks wie auch der Master Hook instanziiert. |
NHookCount |
Die Anzahl der Hooks in der Eigenschaft aHooks. |
Die Methode Init des Master Hook-Objekts sucht nach der Tabelle PHXHooks im Verzeichnis des Projekts. Wird diese Tabelle nicht gefunden, wird die Methode CreateHookTable aufgerufen, von der die Tabelle erstellt wird. Nachdem die Tabelle gefunden oder erstellt wurde, prüft der Master Hook, ob dem Projekt Hooks zugeordnet sind. Ist dies nicht der Fall, wird die Methode SelectHooks aufgerufen, die es dem Anwender ermöglicht, Hooks für das Projekt auszuwählen. Diesen Hooks kann der Anwender durch Verschieben in der Liste Prioritäten zuordnen. Die Project Hook-Information wird in der Tabelle gespeichert.
Zum Schluss werden alle in der Tabelle referenzierten Hooks eingerichtet und es wird im Array aHooks eine Objektreferenz gespeichert.
Diese Methode erstellt die Project Hooks-Tabelle (PJXHooks) im Verzeichnis des Projekts. Die Tabelle hat die folgende Struktur:
cPjxName |
M |
256 |
mHookName | M |
|
mHookLibrary |
![]() ![]() |
Der Projektname wird gespeichert, um mehrere Projekte im gleichen Verzeichnis halten zu können.
Die Methode SelectHooks zeigt ein Formular an, in dem der Anwender die zum aktuellen Projekt gehörenden Hooks auswählen kann. Das angezeigte Formular wird in der Eigenschaft cSelectForm angegeben.
Alle Methoden, die von den Project Hooks kontrolliert werden, beinhalten einen Code wie den folgenden:
Es gibt nur zwei Einschränkungen für jeden einzelnen Project Hook:
1. Die Methode Init muss ein Parameter mit dem Typen des Objekts akzeptieren. Dieser Parameter ist die Objektreferenz auf das Projekt. Wir empfehlen, dass die Objektreferenz in einer Eigenschaft der Project Hook-Klasse gespeichert wird.
Jede Methode, die für eine Interaktion mit dem Projekt aufgerufen wird, z. B. QueryAddFile, QueryRemoveFile, QureyRunFile, muss einen logischen Wert zurückgeben. Damit wird entschieden, ob durch den Master Project Hook ein NODEFAULT für diese Methode ausgeführt wird.