Der Zweck der Komponente ist es zuerst eine Sammlung der Formulare zu einer Datenbank zu generieren und zweitens eine Benutzerschnittstelle für die Anpassung der Formulare zu liefern. Das Produkt des Formular-Editor eine Beschreibung der Formulare als ein XML-Dokument. Dabei wird es im Gegenteil zu vorhanden ähnlichen Systemen nicht einzeln zu jedem Tabellen ein Formular generiert, vielmehr wird eine ganze Sammlung der Formularen in einem Schritt generiert. Dabei werden die Assoziationen im Datenbank in der Formularen direkt unterstützt. Der Benutzer des Formular-Editor (Applikation-Entwickler) muss das Schema der Daten nicht kennen. Seine Aufgabe ist es höchstens die automatisch erzeugte Formulare unter dem gestalterischen Gesichtpunkten anzupassen oder die Eingabefelder des Formulars noch weiter zu spezifizieren.
Ein Formular wird als eine Sammlung von verschiedenen Eingabefelder, ihrer Platzierung, und ihrer Entsprechung zu Objekten in der Datenbank verstanden. Folgende Typen der Eingabefelder wurden realisiert:
Frames. Rahmen für die Platzierung der Elemente |
einfache Textfelder (einzeilig) |
Eingabefelder für Ganzzahlen mit Steuerungspfeilen |
Listenfelder |
Radiobuttons |
Checkbox Felder (Ja/Nein Schalter) |
mehrzeilige Textfelder |
Mehrspaltige Auswahllisten für die Darstellung der Fremdschlüssel (Referenzen) |
Formular Links |
Objekt für die Einbettung von Formularen |
Durch das Doppelklick auf ein Formular in Hauptfenster wird ein GUI Editor für Formulare geöffnet. Damit kann das Aussehen des Formulars und die Verknüpfungen der einzelnen Elemente zum Datenbank spezifiziert werden.
Die Eigenschaften der Elemente werden auf drei TypenDie Eigenschaften, die zu eigentlichen GUI-Objekt gehören wie: Länge, Art.
Verknüpfung mit Tabellen-Spalte. Defaultwert und NotNULL
Angaben zu Platzierung des Elements
Tip: Die aktuellen Pack Optionen kann man in der Statusleiste nach dem Anzeigen des Widgets mit Mauszeiger auslesen.
Die Fläche der FormEditor wird im drei Hauptflächen geteilt.
Widget Sammlung |
Arbeitfläche mit dem gezeigten Formular |
Ablage (untere Bereich) |
Tip: Bei Einfügen der Widget zu Formular wird immer das Typ genommen der in Widgetsammlung ausgewählt wurde, also durch dunkles Hintergrund markiert ist.
Die Reihenfolge der Elemente in einem Frame ist entscheidend. Der Pack-Geomentry-Manager nimmt nacheinander die Elemente und stellt sie in den Rahmen der restliche Platz wird für nächste Elemente verwendet. Folgende Eigenschaften spezifizieren die Platzierung:
side - An welcher Seite der Rahmen soll der Objekt hinzugefügt werden |
anchor - Anker zu welcher Seite |
fill - Soll der Objekt in eine Richtung zu den verbleibenden Platz ausgefühlt werden |
expand - Soll bei Änderung der Fenstergröße der Objekt angepasst werden |
-side left
-side top
-side bottom -anchor e
-side right
Das Grid-Manager platziert die Widget in einem Gitter (Tabelle). Die Zellen-Größen werden entsprechen der Bedürfnissen der einzelnen Widget ermittelt. Ein Widget kann auch mehrere benachbarte Zellen besetzen (-columnspan -rowspan). Im Gegenteil zu anderen GUI-Editoren werden die Spalten und Zeilen dynamisch gebildet. Man muss also die Zeilen- und Spaltenzahl nicht angeben oder keine neuen Zeilen oder Spalten einfügen.
Die Abbildung 2-5 Zeigt ein beispielhaftes Grid-Frame. Die Zellen A2,B2,B3,C1,C3 sind bereits besetzt. Beim Drag&Drop Operation wird es zuerst ermittelt ob eine Zelle frei ist. Ist das der Fall wird sie einfach besetzt. Wird auf eine besetzte Zelle gezeigt (z.B. B2), wird angenommen, dass eine neue Spalte oder Zeile hinzugefügt werden soll um eine neue Zelle zu schaffen. Wird (siehe Zelle B2) der Bereich d (oben) angezeigt wird eine Zeile über der Zelle B3 hinzugefügt. Das neue Widget wird über das Widget im Zelle B2 platziert.Die speziellen Optionen wie Spaltenbreite und Zeilenhöhe der Zelle können erst in einem Dialog spezifiziert werden.
Es wurden zwei geometry Manager pack und grid für die Platzierung der Widget benutzt. Beide sind sehr mächtig und erlauben sehr gute Festellung von Windows Platzierung auch beim wechselnden Windowsgroßen. Ähnliche oder gleiche Geometrymanager werden auch bei Java, Gtk und Qt benutzt. Grid ist am schnellsten zu verstehen und entspricht etwa der Tabelle.
Mehr dazu Lesen Sie in Tk-Dokumantation man pack, man grid Hier ein Ausschnitte aus pack Man-Dokumentation.
For each master the packer maintains an ordered list of slaves called the packing list. The -in, -after, and -before configuration options are used to specify the master for each slave and the slave's position in the packing list. If none of these options is given for a slave then the slave is added to the end of the packing list for its parent. The packer arranges the slaves for a master by scanning the packing list in order. At the time it processes each slave, a rectangular area within the master is still unallocated. This area is called the cavity; for the first slave it is the entire area of the master. For each slave the packer carries out the following steps:
The packer allocates a rectangular parcel for the slave along the side of the cavity given by the slave's -side option. If the side is top or bottom then the width of the parcel is the width of the cavity and its height is the requested height of the slave plus the -ipady and -pady options. For the left or right side the height of the parcel is the height of the cavity and the width is the requested width of the slave plus the -ipadx and -padx options. The parcel may be enlarged further because of the -expand option (see ``EXPANSION'' below)
The packer chooses the dimensions of the slave. The width will normally be the slave's requested width plus twice its -ipadx option and the height will normally be the slave's requested height plus twice its -ipady option. However, if the -fill option is x or both then the width of the slave is expanded to fill the width of the parcel, minus twice the -padx option. If the -fill option is y or both then the height of the slave is expanded to fill the width of the parcel, minus twice the -pady option.
The packer positions the slave over its parcel. If the slave is smaller than the parcel then the -anchor option determines where in the parcel the slave will be placed. If -padx or -pady is non-zero, then the given amount of external padding will always be left between the slave and the edges of the parcel.