Makros und Programme einsetzen Applikations-Module und Formular-Module |
Top Previous Next |
Module, die direkt in einem Ordner hinzugefügt werden, heißen Applikations-Module, weil sie sich auf die Applikation als Ganzes beziehen. Die Oberflächenfunktionen, die hier aufgerufen werden, gehen immer an das gerade aktive Datenfenster. Formular-Module können sich dagegen streng auf ein Formular beziehen. Sie werden in der Projektansicht nicht unter dem Ordner für eine Tabelle angezeigt sondern direkt unter dem Formular zu dem sie gehören. Prozeduren aus einem Formular-Modul können nicht aufgerufen werden, wenn das Formular nicht geöffnet ist. Wenn beim Formular die Eigenschaft FormularbezogeneMakros aktiviert ist, gehen Oberflächenfunktionen, die im zugehörigen Formular-Modul verwendet werden immer an das Formular, welches die Prozedur aufgerufen hat. Ein Beispiel: In einer Anwendung gibt es für die Tabelle T zwei Formulare F1 und F2. Das folgende Makro liegt auf einem Knopf im Formular F1: ActivateForm('T.F2'); Wenn der Anwender auf den Schalter klickt, hängt das Ergebnis dieses Makros davon ab, ob die Prozedur in einem Applikations-Modul oder im Formular-Modul des Formulars F1 zu finden ist. In einem Applikations-Modul wird zuerst die Methode ActivateForm der Applikation und dann die Methode ShowRec der Applikation aufgerufen. Das ShowRec bezieht sich dadurch auf das aktive Formular, also auf F2, das damit den zweiten Datensatz der Tabelle anzeigt. Das Formular-Modul verhält sich genauso, solange die Option FormularbezogeneMakros in der Eigenschaft Verwendung nicht gesetzt ist. Falls sie jedoch gesetzt ist, wird zuerst die Methode ActivateForm der Applikation (ActivateForm gibt es nicht als Formular-Methode) und dann die Methode ShowRec des Formulars aufgerufen. Dadurch wirkt das ShowRec auf das aufrufende Formular und nicht auf das aktive Formular und der Datensatz bleibt in F2 auf eins und wechselt dafür in F1. Die Prozeduren in einem Formular-Modul "wissen" in diesem Fall, dass das Formular da ist und können sich deshalb direkt darauf beziehen. Zum Beispiel sind die Namen der Steuerelemente in Formular-Modulen als direkte Namen erlaubt. Wenn das Formular ein Steuerelement namens Button1 enthält, dann kann eine Prozedur in dem zugehörigen Formular-Modul direkt darauf zugreifen: procedure Proc1InFormModule; Dieser direkte Verweis auf das Steuerelement hat gegenüber dem Verweis mit FindControl zwei Vorteile:
TurboDB Studio legt für jedes Formular automatisch ein Formular-Modul an. Wenn Sie eine Prozedur zu einem Formular-Ereignis generieren, wird diese Prozedur standardmäßig im zugehörigen Formular-Modul angelegt. Falls die Prozedur zu einem Ereignis nicht im Formular-Modul gefunden wird, wird sie allerdings auch noch im ersten Applikations-Modul der Tabelle gesucht, wie das in den Versionen bis VDP 3 der Fall war. Prozeduren in Formular-Modulen können von anderen Prozeduren des selben Formular-Moduls aufgerufen werden, nicht jedoch aus anderen Modulen. Das liegt daran, dass die Prozeduren aus einem Formular-Modul zur Ausführung ein Formular des passenden Typs benötigen. Das ist bei Aufrufen aus anderen Modulen nicht möglich. Das müssen Sie sich merken:
Die Beispiel-Anwendung FormControl zeigt den Einsatz eines Formular-Moduls zur Beeinflussung der Steuerelemente. |