Servicing Option Buttons, Options Buttons, List Boxes, etc.
The example program in Servicing Complex dialoges via Dialog Functions demonstrates how to service buttons in a custom dialog using a dialog function (DialogFunc). The Visual Basic general syntax documentation describes how various other dialog controls such as list boxes, etc., can be handled. Here is a fairly elaborate example program to illustrate how to service the various elements commonly used in dialoges.
' This program demonstrates how one can service various ' controls in a complex dialog. ' The following arrays will be used to handle the text ' in the list box and combo box. Dim ListArray(4) As String Dim ComboArray(5) As String ' In this program, the Main routine calls a subroutine ' that displays the dialog; note that you can "string together" ' many such subroutines to construct complex programs. Sub Main
If DisplayDialog = False Then
GoTo Finish
End If Exit Sub
Finish: End Sub ' This function brings up the dialog, and services the various ' controls in the dialog using the DialogFunc (dialog function) ' method. See also the general Statistica Visual Basic syntax ' help for additional details. Function DisplayDialog As Boolean
DisplayDialog=True
Begin Dialog UserDialog 390,336,"Demonstrating Dialog Controls", _ .MyDialogFunction ' %GRID:10,7,1,1
OKButton 300,14,70,21,.OkButton CancelButton 300,42,70,21,.CancelButton PushButton 30,14,160,21,"&Reset to defaults",.MyButton Text 30,49,90,14,"&Combo box:",.TextForMyComboBox ComboBox 130,49,160,70,ComboArray(),.MyComboBox Text 30,126,100,28,"&Text box (multiple lines):", _ .TextForTextBox TextBox 130,126,160,35,.MyTextBox,1 Text 30,175,90,14,"Value:",.TextForMyTextBox2 TextBox 130,168,160,21,.MyTextBox2 Text 30,196,60,14,"List box:",.TextForMyListBox DropListBox 130,196,160,91,ListArray(),.MyListBox CheckBox 30,231,130,14,"My Checkbox",.MyCheckBox GroupBox 30,252,180,63,"&Group Box",.MyGroupBox1 OptionGroup .MyOptionButtons OptionButton 40,273,150,14,"My Option Button &1" OptionButton 40,294,150,14,"My Option Button &2"
End Dialog
Dim dlg As UserDialog
' The following routine will initialize various controls in the ' dialog (fill the combo box, list box, check buttons, etc.)
InitializeUserDialogFields (dlg) TryAgain:
' The following line will display the dialog.
DisplayDialog=Dialog(dlg)
' If the user exited the dialog via OK, then DisplayDialog will ' be set to True; in that case, retrieve the chosen settings for ' the controls, and check for their correctness; if an error ' occurred, display the dialog again.
If DisplayDialog=True Then
If RetrieveUserDialogFields (dlg)=0 Then
MsgBox "Error in the dialog specs; try again.", vbCritical GoTo TryAgain
End If
End If
End Function ' This is the (private) dialog function that services the UserDialog. ' The name of this function must match the name given to the Dialog ' (see the .MyDialogFunction above). ' Three parameters are passed to the dialog function. Refer to the ' general syntax help for additional details about each parameter. Private Function MyDialogFunction(DlgItem$, Action%, SuppValue&) As Boolean
Select Case Action%
Case 1 ' dialog initialization Case 2 ' Value changing or button pressed
' Set the default return code for MyDialogFunction to True; this will ' mean that the dialog will not close; only on OK and Cancel set this ' value to False, i.e., close the dialog.
MyDialogFunction = True
Select Case DlgItem
Case "MyButton"
' Reset all controls to their initial defaults
DlgValue "MyListBox", 0 DlgText "MyComboBox", ComboArray(1) DlgText "MyTextBox", _ "Initial text for multiple line edit field"
DlgText "MyTextBox2",".5" DlgValue "MyCheckBox", True DlgValue "MyOptionButtons", 1 MyDialogFunction=True
Case "MyListBox"
MsgBox "New combo box selection:" _ + ListArray(SuppValue)
Case "OkButton"
MyDialogFunction=False
Case "CancelButton"
MsgBox "The CANCEL button was pressed" MyDialogFunction=False
End Select
End Select
End Function ' This subroutine initializes the list box, combo box, text ' fields, etc. ' Note that the entries in list boxes and combo boxes are ' zero-referenced, i.e., the first item in the list is ' referenced as element 0. Sub InitializeUserDialogFields (dlg)
ListArray(0)="List entry 0" ListArray(1)="List entry 1" ListArray(2)="List entry 2" ListArray(3)="List entry 3" ListArray(4)="List entry 4" dlg.MyListBox=0
ComboArray(0)="Combobox entry 0" ComboArray(1)="Combobox entry 1" ComboArray(2)="Combobox entry 2" ComboArray(3)="Combobox entry 3" ComboArray(4)="Combobox entry 4" ComboArray(5)="Combobox entry 5" dlg.MyComboBox=ComboArray(1) dlg.MyTextBox="Initial text for multiple line edit field" dlg.MyTextBox2=".5" dlg.MyCheckBox=True
' Note that the option buttons in a group of option buttons are ' zero-referenced, i.e., the first button in the group is referenced ' as element 0; thus here we set the second option button
dlg.MyOptionButtons=1
End Sub Function RetrieveUserDialogFields (dlg) As Boolean
On Error GoTo InvalidInput Dim xval As Double RetrieveUserDialogFields=True MsgBox "My combo box is set to: " + dlg.MyComboBox MsgBox "My multi-line text box is set to: " + dlg.MyTextBox xval=CDbl(dlg.MyTextBox2) MsgBox "My value was set to: " + Str(xval) MsgBox "My (0-referenced) element chosen in My Listbox is: " _ + Str(dlg.MyListBox)
MsgBox "My check box is set to: " + Str(dlg.MyCheckBox) MsgBox "My options buttons are set to (0-referenced): " _ + Str(dlg.MyOptionButtons)
Exit Function
InvalidInput:
RetrieveUserDialogFields=False
End Function
This example program is fairly complex and illustrates how to interact with the different standard Windows dialog controls. Remember that the general SVB help contains detailed documentation for the statements, declarations, and data types used in this program.
Zero-referencing in ListBox, DropListBox, and OptionGroup controls. Remember that the elements in ListBox, DropListBox, and OptionGroup controls are zero-referenced, i.e., the first element is referenced as number 0 (zero), the second as number 1, etc.