Die Komponente ButtonBox (gb.qt4) ist eine Verbund-Komponente. Sie enthält eine TextBox und einen kleinen Button an der (rechten) Seite. Wenn Sie die Eigenschaft ButtonBox.Editor.Mask setzen, können Sie die Maske der internen MaskBox administrieren, um den vollen Funktionsumfang zu nutzen. Einsatzfelder für eine ButtonBox kennen Sie bereits aus anderen Zusammenhängen wie der Projektauswahl im Startfenster zur Gambas-IDE (→ Kapitel 16.6 Text-Boxen).
Ausgewählte Eigenschaften werden in der folgenden Tabelle aufgeführt und beschrieben:
Eigenschaft | Typ | Default | Beschreibung |
---|---|---|---|
.Button | Boolean | True | Legt fest, ob ein Button angezeigt wird oder gibt dessen Anzeigestatus zurück. Ohne Button verhält sich die ButtonBox wie eine TextBox. |
.Picture | Picture | … | Das Bild auf dem Button wird zurückgegeben oder gesetzt. |
.Text | String | Null | Setzt den anzuzeigenden Text in der ButtonBox oder gibt diesen Text zurück. |
.Editor | MaskBox | - | Gibt die interne MaskBox der ButtonBox zurück. Es können alle Masken von MaskBox.Mask (gb.form) genutzt werden! |
.ReadOnly | Boolean | False | Gibt an, ob der User den Text in der ButtonBox ändern kann oder nicht. |
Tabelle 16.8.1: Übersicht Eigenschaften der ButtonBox
Um sichere Pfadeingaben zu gewährleisten ist die Verwendung einer ButtonBox ideal. Einerseits können mit ButtonBox.ReadOnly = True im Dialog nur valide Pfadangaben ausgewählt werden und andererseits steht der ausgewählte Pfad in der .Text-Eigenschaft als Zeichenkette zur weiteren Verwendung im Programm zur Verfügung. Eine Maske wird im ersten Beispiel nicht eingesetzt. Als Bild auf dem Button wird ein Icon aus dem Bestand von Gambas verwendet:
Abbildung 16.8.1.1: ButtonBox
Nach einem Klick auf den internen Button in der ButtonBox öffnet sich ein Dialog:
Abbildung 16.8.1.2: Verzeichnis-Auswahl-Dialog
Nach der Auswahl werden alle Komponenten im ausgewählten Projekt-Verzeichnis angezeigt.
Abbildung 16.8.1.3: Anzeige des Verzeichnispfades in der ButtonBox
Abschließend können Sie noch ein Archiv von allen Komponenten-Dateien des ausgewählten Gambas3-Projektes anlegen. Das vollständige Projekt finden Sie im Downloadbereich. Hier wird nur ein Quelltext-Ausschnitt angezeigt:
' Gambas class file Public Sub Form_Open() FMain.Center FMain.Resizable = True ButtonBoxProject.Picture = Picture["icon:/16/open"] ButtonBoxProject.ReadOnly = True btnList.Enabled = False btnMakeArchive.Enabled = False End ' Form_Open() Public Sub ButtonBoxProject_Click() ' Diese Prozedur wird nach einem Klick auf das Icon in der ButtonBox generiert If Dialog.SelectDirectory() Then Return ButtonBoxProject.Text = Dialog.Path btnList.Enabled = True End ' ButtonBoxProject_Click() …
Um zum Beispiel nur Datumsangaben als Eingabe zuzulassen, könnte nach einem Klick auf den Button ein DateChooser-Dialog angezeigt werden, um ein Datum auswählen zu lassen. Sie werden jetzt sagen, dass es dafür die DateBox-Klasse gibt. Aber diese ist nur eine veränderte ButtonBox, wie Sie nach einem Blick in die Gambas-Quelltexte unter comp/src/gb.form/.src/Date/DateBox.class bestätigt finden. Eine sehr kleine Klasse, die eigentlich nur eine ButtonBox enthält, deren Maske auf Datums- und Zeitangaben setzt und einen Dialog mit DateChooser öffnet. Im 2. Beispiel wird dieser Ansatz für eine Auswahl eines Datums umgesetzt. Da der Vorgabe einer Maske nicht automatisch eine Prüfung des eingegebenen Datums folgt, sind Sie gefordert nur valide Daten aus einer sicheren Eingabe zuzulassen:
Abbildung 16.8.2.1: ButtonBox mit Maske (Datum)
Abbildung 16.8.2.2: ButtonBox mit Fehlermeldung bei eingegebenem Datum
Sicherer ist die Auswahl eines (validen) Datums im Datum-Auswahl-Dialog. Er öffnet sich nach einem Klick auf den kleinen Datum-Button:
Abbildung 16.8.2.3: Datum-Auswahl-Dialog
Abbildung 16.8.2.4: Anzeige des ausgewählten Datums
Der Quelltext wird vollständig angegeben:
' Gambas class file Public dDatum As Date Public Sub Form_Open() Me.Center() Me.Resizable = False UpdateMask() End ' Form_Open() Public Sub btnboxDate_Click() FDateChooser.ShowModal btnboxDate.Text = Format(dDatum, gb.ShortDate) btnboxDate_Activate() End ' btnboxDate_Click() '******************************************************************************************** Private Sub UpdateMask() Dim sMaske As String sMaske = Format(Date(1111, 11, 11), gb.ShortDate) btnboxDate.Editor.Mask = Replace(sMaske, "1", "0") End ' UpdateMask() Public Sub btnboxDate_Activate() Label1.Text = "" If Not IsDate(btnboxDate.Text) Then Label1.Text = String.Chr(187) & " Die Eingabe " & btnboxDate.Text & " ist kein Datum!" Else Label1.Text = String.Chr(187) & " Das Datum " & btnboxDate.Text & " ist o.k." Endif ' Not IsDate(bbDate.Text) ? End ' btnboxDate_Activate() Public Sub btnboxDate_Change() Label1.Text = "" End ' btnboxDate_Change()
Bedeutsam ist der Inhalt der Prozedur UpdateMask(). Nur Einsen werden als gb.ShortDate formatiert. Das beachtet die aktuellen Spracheinstellungen, so dass in Deutschland dd.mm.yyyy erscheint. Es können keine Nullen sein, da ein solches Null-Datum keine Ausgabe erzeugen würde! Da nun das Format korrekt ist, werden die Einsen für die korrekte Syntax der MaskBox mit Nullen ersetzt, wobei 0 für eine beliebige Ziffer steht → Kapitel 16.7 MaskBox (MaskBox.Mask) und es werden nur Datumsangaben in der ButtonBox akzeptiert.
Quetext von FDateChooser.class:
' Gambas class file Public Sub Form_Open() With Me .Center() .Resizable = False .Arrangement = Arrange.Vertical .Margin = True .Spacing = True End With DateChooser1.Expand = True DateChooser1.Mode = DateChooser1.DateOnly ' Nur Datum-Auswahl End ' Form_Show() Public Sub DateChooser1_Activate() FMain.dDatum = DateChooser1.Value ' Speicherung des Datums in einer (globalen) Variable Me.Close() End ' DateChooser1_Activate()