General Window Class-Funktionen über ein Window Handle aufrufen

Gupta bietet die Möglichkeit, General Window Classes zu definieren, die als Basisklasse für echte Window Classes wie z.B. Dialoge, FormWindows, Steuerelemente, etc. dienen können.

Des weiteren gibt es die Möglichkeit, Funktionen eines Fensters oder Steuerelements über dessen Window Handle aufzurufen. Dazu muss man den Handle mit einem sogenannten Window Handle Qualifier ausstatten:

Call hWnd.Frm1.SomeFunction()
  • hWnd ist das Window Handle eines Form-Windows.
  • Frm1 ist entweder der Templatename eines Fensters oder eine Fensterklasse.
  • Die Funktion SomeFunction() ist eine Funktion, die in Frm1 definiert ist.

Soweit, so gut. Das ist alles in den Gupta Books bzw. in der Hilfe dokumentiert.

Hat man jedoch die Funktion SomeFunction() in einer General Window Class definiert, von der Frm1 ableitet, müsste man den Aufruf so schreiben:

Call hWnd.GenWndCls.SomeFunction()

Doch leider bringt Gupta dann unnötigerweise den Compilefehler „Class GenWndCls, is a general window class. Hence it may serve only as a base class, and may not be qualified with a window handle“. Das ist sehr ärgerlich, da es oft sinnvoll ist, eine General Window Class als Basis z.B. für eine Form und einen Dialog zu verwenden. Glücklicherweise gibt es dafür einen einfachen Workaround:

Call hWnd.GenWndCls..SomeFunction()

Ja – ein einfacher Punkt mehr und schon akzeptiert Gupta den Ausdruck. Warum ist das so? Der ..-Operator vor einem Funktionsaufruf ist eine sogenannte late-bound reference die bewirkt, dass Gupta die genannte Funktion in allen abgeleiteten Klassen sucht und die „tiefste“ Implementierung aufruft. Wäre SomeFunction() auch in Frm1 definiert, würde diese Implementierung aufgerufen. Gibt es keine weitere Implementierung ruft Gupta klaglos die zunächst verschmäte Funktion auf.

Happy coding.

Advertisements

Über thomasuttendorfer
Ich bin Entwicklungsleiter bei der Softwarefirma [ frevel & fey ] in München. Wir entwickeln Business-Software für Verlage und verwenden dafür den Gupta Team-Developer sowie Visual Studio.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: