26 Aug 2006 

Geerbte Formulare in 4D

Warum interessiert sich scheinbar niemand – kein Thema in der iNug oder der Supportliste – für geerbte Formulare in 4D? Gute Frage – nächste Frage!

Monatsübersichten eines Kalenders tauchen immmer wieder auf. Hier an zwei Beispielen aus dem täglichen Bedarf, iPhoto und iCal. Ein Kalender-Modul, bestehend aus dem Formular und den dazugehörenden Methoden, kann ich in meinen Datenbanken auch gebrauchen. Hier ein Beispiel aus der Tagesmappe:

Kopieren & Einsetzen ist nicht das Benötigte, die 4D-Objektbibliothek deshalb nicht das geeignete Mittel. Graphiker kennen das auch. Dort möchte man echte Symbole. Wird das Symbol in der Bibliothek geändert, ändert es sich an den Verwendungsstellen auch. Alles andere ist Kopieren & Einsetzen, also ein No-No.

4D bietet eine Eigenschaft, die in dieser Richtung geht – Formulare aus anderen Formularen zu referenzieren – an. Diese Eigenschaft heißt in 4D-Sprache Geerbte Formulare.

Wir kennen von 4D bereits etwas Ähnliches, die Unterformulare oder Included Layouts. Die können beliebig auf einer Formular-Seite plaziert werden, sozusagen ein rechteckiger Bereich, der an ein anderes Formular vermietet wird. Seit der 2004 auch mit richtigen Formular-Events. Sehr schönes Objekt, solange das Unterformular eine Liste ist.

Ich höre die Frage. Ja, so hätte ich jetzt auch gedacht! Hätte gedacht: geerbte Formulare wären rechteckige Bereiche, die von einem Formular einem anderen Formular vererbt würden. Wäre schön gewesen, fehlt tatsächlich – sehr. Isses aber nicht!

Nein, geerbte Formulare sind ganz was anderes. Der Name führt in die Irre. Ich sehe die geerbten Formulare als eine weitere Master-Formularseite. So wie die Seite 0 für alle Seiten eines Formulares verwendet wird, ist das geerbte Formular sozusagen eine Seite 00 oder Seite -1.

Der oben dargestellte Kalender wird in seinem eigenen Formular nebenstehend dargestellt. Die Lage, 320 Pixel von oben linksbündig, ist für alle Verwendungen vorgegeben.

Das geerbte Formular ist also kein vererbtes Formularobjekt im eigentlich Sinn. Erben und Objekt verführt in die falsche OO-Richtung.

Geerbte Formulare sind wie zusätzliche Masterseiten eines Formulares. Lasse ich mich nicht von dem Namen in die Irre führen, finde ich nach und nach diese Vorteile,

  • sie können in mehr als einem Formular verwendet werden,
  • wird das Original geändert, sind die Auswirkungen in allen Formularen wirksam und
  • manche Aktionen können im erbenden Formular per Methode umgelenkt werden.

Kann man die Geerbten Formulare zu etwas gebrauchen?

Sie sind – wortwörtlich – nur am Rande zu gebrauchen. Für Buttonsammlungen (OK, Abbrechen, Blättern |< < > >|, Drucken, …) wie hier in den grün markierten Bereichen dargestellt. Das sind gängige Button-Positionen. Wichtig sind die einzustellenden Bewegungsrichtungen.

Oder für kleine Ecken, die mehrfach an gleicher Position Verwendung finden können. Deren Lage ist auf diese Formulare-Bereiche und Bewegungsrichtung eingeschränkt.

Ein Einsatzzweck, den ich gefunden habe, ist die Monats-Übersicht eines Kalenders. Im Formular immer schön unten links in der Ecke, da wo sie auch in anderen Programmen zu finden ist.

Doch Achtung! Die Formular-Methode des Geerbten Formulars wird nicht aufgerufen, die Methoden der Formular-Objekte schon. Das ist gar nicht mal von Nachteil, siehe Umlenken des Standardverhaltens unter Vorteilen!
Erst ein Verweis auf das Thema Alles in einer Methode… Dann reicht dieser Aufruf CLND_Hndle ("FormMethod") in der Methode TagesMappe_Hndle, die das Hauptformular triggert und der Kalender funktioniert, standardmäßig.

Ich verwende seit 4D V6-Zeiten die Kalenderroutinen von Steve Hussey:
Created : 7/26/99 for ACI US by Steve Hussey, Alto Stratus LLC shush@harborside.com.
Um die CLND_-Methoden habe ich mir Wrapper geschrieben nach dem Motto: if it works, don't fix it. Eine der Wrapper-Methoden ist die CLND_Hndle und die sieht so aus:

Fazit

Die geerbten Formulare sind nicht das Gelbe vom Ei. Durch Ihre Einschränkungen werden sie nur selten nutzbar. Kann man mit den Beschränkungen leben und verwendet nur globale Methoden, können die geerbten Formulare mit wenig Aufwand an ihrer Position in anderen Formularen eingeklinkt werden. Für eine Monats-Übersicht reicht es.