Makros und Programme einsetzen

Datenfenster steuern

Top  Previous  Next

Die meisten Aktionen, die der Anwender interaktiv mit einem Datenfenster ausführen kann, sind auch über TurboPL-Makros möglich. Dazu gehören:

Datenfenster öffnen und schließen mit ActivateForm, OpenForm und CloseWnd
Sortierung einstellen mit SetSortOrder
Im Datenfenster navigieren mit ShowRec
Datensätze suchen und markieren mit BySelection

und viele mehr. Eine vollständige Übersicht gibt es in der TurboPL Referenz unter Benutzerschnittstelle.

Wenn Sie eine Funktion für ein Datenfenster ausführen muss natürlich klar sein, an welches Datenfenster sich diese Funktion richtet. Sie haben dazu zwei Möglichkeiten. Entweder Sie verwenden das gerade aktive Datenfenster oder ein ganz spezielles.

Das gerade aktive Datenfenster wird immer dann benutzt, wenn Sie eine Oberflächenfunktion in einem Applikationsmodul aufrufen ohne explizit ein Datenfensterobjekt anzugeben.

In allen anderen Fällen wird ein spezielles Formular benutzt:

Das Makro, das für ein Ereignis aufgerufen wird, wendet sich an das Formular, in dem das Ereignis aufgetreten ist.
In einem Formularmodul wird das Datenfenster benutzt, das die Prozedur aufgerufen hat, also das Formular zu dem das Modul gehört.
Wenn dem Aufruf ein Datenfensterobjekt vorausgeht, wird dieses verwendet. Ein Datenfensterobjekt erhalten Sie entweder durch den Aufruf von FindDataWnd oder durch den Verweis auf eine eingebettete Tabelle in einem Formularmodul.

Für den dritten Fall hier ein kurzes Beispiel, in dem wir annehmen, dass die folgende Zeile im Formularmodul eines Formulars für die Tabelle KFZ steht, welches eine eingebettete Tabelle für die Tabelle KUNDEN enthält. Die eingebettete Tabelle heißt KundenTabelle.

KundenTabelle.ShowRec(8)

zeigt dann den Datensatz Nummer 8 in der eingebetteten Kundentabelle an.

Würde im selben Formularmodul eine Prozedur die Zeile

ShowRec(8)

enthalten. Würde in diesem Formular selbst der Datensatz acht angezeigt werden. Dabei spielt es keine Rolle, ob das Formular gerade das aktive ist, oder nicht. Auch wenn es zum Zeitpunkt des Aufrufs völlig verdeckt von anderen Formularen wäre, würde der Aufruf im Formularmodul an genau dieses Formular gehen.

Anders, wenn der selbe Aufruf in einem Applikationsmodul steht. In diesem Fall wird immer das gerade aktive Datenfenster benutzt, egal von wo aus der Aufruf kommt. Der Grund dafür ist, dass ShowRec(8) im Applikationsmodul eigentlich ein Aufruf für die Applikation ist, welche dann das aktive Datenfenster sucht und dort den Datensatz anzeigt. ShowRec(8) im Formularmodul ist dagegen ein direkter Aufruf ans Formular und landet deshalb immer bei genau diesem.