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:
Property | Type | Default | Description |
---|---|---|---|
Button | Boolean | True | Determines whether a button is displayed or returns its display status. Without a button the ButtonBox behaves like a TextBox. |
Picture | Picture | …. | The image on the button is returned or set. |
Text | String | Null | Sets the text to be displayed in the ButtonBox or returns this text. |
Editor | MaskBox | ~ | Returns the internal MaskBox of the ButtonBox. All masks of MaskBox.Mask (gb. form) can be used! |
ReadOnly | Boolean | False | Specifies whether the user can change the text in the ButtonBox or not. |
Table 16.8.1: Overview of ButtonBox properties
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:
Figure 16.8.1.1: ButtonBox
After a click on the internal button in the ButtonBox opens a dialog:
Figure 16.8.1.2: Directory selection dialog
After selection, all components are displayed in the selected project directory.
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() …
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:
Figure 16.8.2.1: ButtonBox with mask (date)
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:
Figure 16.8.2.3: Date selection dialog
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()