User Tools

Site Tools


k16:k16.8:start

16.8 ButtonBox

The component ButtonBox (gb.qt4) is a composite component. It contains a TextBox and a small button on the (right) side. If you set the ButtonBox. editor. mask property, you can administrate the mask of the internal MaskBox to use the full range of functions. You already know fields of application for a ButtonBox from other contexts such as project selection in the start window of the Gambas IDE (→ chapter 16.6 Text Boxes).

Selected properties are listed and described in the following table:

PropertyTypeDefaultDescription
ButtonBooleanTrueDetermines whether a button is displayed or returns its display status. Without a button the ButtonBox behaves like a TextBox.
PicturePicture….The image on the button is returned or set.
TextStringNullSets the text to be displayed in the ButtonBox or returns this text.
EditorMaskBox~Returns the internal MaskBox of the ButtonBox. All masks of MaskBox.Mask (gb. form) can be used!
ReadOnlyBooleanFalseSpecifies whether the user can change the text in the ButtonBox or not.

Table 16.8.1: Overview of ButtonBox properties

16.8.1 Example 1 - ButtonBox

The use of a ButtonBox is ideal for secure path input. On the one hand, ButtonBox. ReadOnly = True in the dialog only valid path specifications can be selected and on the other hand, the selected path in the. text property is available as a character string for further use in the program. A mask is not used in the first example. An icon from the Gambas collection is used as a picture on the button:

ButtonBox

Figure 16.8.1.1: ButtonBox

After a click on the internal button in the ButtonBox opens a dialog:

Dialog

Figure 16.8.1.2: Directory selection dialog

After selection, all components are displayed in the selected project directory.

Auswahl

Figure 16.8.1.3: Display of the directory path in the ButtonBox

Finally, you can create an archive of all component files of the selected Gambas3 project. The complete project can be found in the download area. Only a section of the source code is displayed here:

' 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()

16.8.2 Example 2 - ButtonBox with input mask

For example, in order to allow only dates to be entered, a DateChooser dialog box could be displayed after clicking on the button to select a date. You will now say that there is the DateBox class for this. But this is only a modified ButtonBox, as you will find confirmed after a look at the Gambas source code under comp/src/gb.form/.src/Date/DateBox.class. A very small class that actually contains only one ButtonBox, whose mask is based on dates and times and opens a dialog with DateChooser. In the second example, this approach is implemented for a selection of a date. Since the specification of a mask is not automatically followed by a check of the entered date, you are required to allow only valid data from a secure entry:

B1

Figure 16.8.2.1: ButtonBox with mask (date)

B2

Figure 16.8.2.2: ButtonBox with error message when date entered

More secure is the selection of a (valid) date in the date selection dialog. It opens after a click on the small date button:

B3

Figure 16.8.2.3: Date selection dialog

B4

Figure 16.8.2.4: Display of the selected date

The source text is completely specified:

' 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()

The contents of the procedure UpdateMask () are significant. Only ones are formatted as gb. ShortDate. This observes the current language settings, so that in Germany dd. mm. yyyyy appears. They cannot be zeros, because such a zero date would not generate any output! Now that the format is correct, will the ones for the correct syntax of the MaskBox be replaced with zeros, where 0 stands for any number? chapter 16.7 MaskBox (MaskBox. Mask) and only dates are accepted in the ButtonBox.

Quetext from 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 ' Only date selection
 
End ' Form_Show()
 
Public Sub DateChooser1_Activate()
   FMain.dDatum = DateChooser1.Value ' Saving the date in a (global) variable
   Me.Close()
End ' DateChooser1_Activate()

Download

16.8 ButtonBox

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:

EigenschaftTypDefaultBeschreibung
.Button BooleanTrueLegt fest, ob ein Button angezeigt wird oder gibt dessen Anzeigestatus zurück. Ohne Button verhält sich die ButtonBox wie eine TextBox.
.PicturePictureDas Bild auf dem Button wird zurückgegeben oder gesetzt.
.TextStringNullSetzt den anzuzeigenden Text in der ButtonBox oder gibt diesen Text zurück.
.EditorMaskBox-Gibt die interne MaskBox der ButtonBox zurück. Es können alle Masken von MaskBox.Mask (gb.form) genutzt werden!
.ReadOnlyBooleanFalseGibt an, ob der User den Text in der ButtonBox ändern kann oder nicht.

Tabelle 16.8.1: Übersicht Eigenschaften der ButtonBox

16.8.1 Beispiel 1 – 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:

ButtonBox

Abbildung 16.8.1.1: ButtonBox

Nach einem Klick auf den internen Button in der ButtonBox öffnet sich ein Dialog:

Dialog

Abbildung 16.8.1.2: Verzeichnis-Auswahl-Dialog

Nach der Auswahl werden alle Komponenten im ausgewählten Projekt-Verzeichnis angezeigt.

Auswahl

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()

16.8.2 Beispiel 2 – ButtonBox mit Eingabe-Maske

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:

B1

Abbildung 16.8.2.1: ButtonBox mit Maske (Datum)

B2

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:

B3

Abbildung 16.8.2.3: Datum-Auswahl-Dialog

B4

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()

Download

The website uses a temporary session cookie. This technically necessary cookie is deleted when the browser is closed. You can find information on cookies in our privacy policy.
k16/k16.8/start.txt · Last modified: 02.07.2018 (external edit)

Page Tools