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');
ShowRec(-3);

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;
Button1.Text := "Click me!";
endproc;

Dieser direkte Verweis auf das Steuerelement hat gegenüber dem Verweis mit FindControl zwei Vorteile:

1.Die Code-Vervollständigung listet in einem Formular-Modul alle verfügbaren Steuerelemente auf und kennt außerdem den Typ des Steuerelements. Sie erhalten also mehr Unterstützung bei der Programmierung.
2.Wenn Sie ein solches Steuerelement umbenennen oder löschen, wird dies beim nächsten Übersetzen des Moduls bemerkt und nicht erst beim Testen. Dadurch sparen Sie Test-Aufwand.

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:

Eine Formular-Prozedur wie zum Beispiel ShowRec wirkt in einem Formular-bezogenen Makro auf das Formular, auf das sich das Makro bezieht. Ein Applikations-bezogenes Makro wirkt auf das gerade aktive Formular der Applikation.
Nur in Formular-bezogenen Makros können Sie auf die Steuerelemente des Formulars zugreifen.
Ein Makro ist Formular-bezogen, wenn es in einem Formular-Modul steht, dessen Formular in der Eigenschaft Verwendung die Option FormularbezogeneMakros aktiviert hat.

Die Beispiel-Anwendung FormControl zeigt den Einsatz eines Formular-Moduls zur Beeinflussung der Steuerelemente.