Die Dialogfunktion

<< Click to Display Table of Contents >>

Die Dialogfunktion

Ein benutzerdefinierter Dialog kann bei Bedarf mit einer Dialogfunktion verknüpft werden. Diese Funktion wird immer dann aufgerufen, wenn das Dialogfeld initialisiert wird oder wenn der Benutzer ein beliebiges Kontrollelement betätigt. Mit Hilfe einer Dialogfunktion ist es möglich, Dialoge zu verschachteln und Kontrollelemente zu deaktivieren oder auszublenden.

Um ein Dialogfenster mit einer Dialogfunktion zu verknüpfen, wird der Funktionsname an die Dialogdefinition angehängt, wobei ein Punkt vorangestellt wird. Hier wird beispielsweise dem Dialog MyDlg eine Dialogfunktion namens MyDlgFunc zugewiesen:

Begin Dialog MyDlg 60, 60, 260, 188, "Test", .MyDlgFunc

Die zu überwachenden Steuerelemente

Jedem Steuerelement des Dialogfensters, das von der Dialogfunktion überwacht werden soll, muss ein eindeutiger Bezeichner zugewiesen werden. Dieser muss als letzter Parameter in der Definition des Steuerelements angegeben werden und mit einem Punkt beginnen.

CheckBox 8, 56, 203, 16, "Alles anzeigen", .Chk1

Hier wird dem Kontrollkästchen der Bezeichner "Chk1" zugewiesen.

Syntax der Dialogfunktion

Die Syntax der Dialogfunktion ist wie folgt aufgebaut:

Function FunctionName(ControlID$, Action%, SuppValue%)

 [Anweisungen]

 FunctionName = ReturnValue

End Function

Die Dialogfunktion liefert einen Wert zurück, wenn der Anwender auf OK oder Abbrechen klickt. Setzen Sie diesen ReturnValue in der Dialogfunktion auf 0, wird der Dialog geschlossen, bei einem anderen Wert bleibt der Dialog offen.

Die Parameter der Dialogfunktion:

ControlID$

Wenn Action = 2 ist, enthält dieser Parameter die (bei der Dialogdefinition angegebene) ID des vom Anwender betätigten Kontrollelements.

Action%

1, wenn der Dialog initialisiert wird (die anderen Parameter haben dann keine Bedeutung).
2, wenn der Benutzer ein Kontrollelement betätigt hat. Das Kontrollelement wird durch ControlID$ identifiziert, und SuppValue% enthält weitere Informationen.

SuppValue%:

Informationen, welche Art von Änderung durchgeführt wurde, abhängig vom Typ des Kontrollelements:
Kontrollkästchen: 0, wenn ausgeschaltet, beziehungsweise 1, wenn eingeschaltet.
Optionsfeld: Nummer des gewählten Optionsfelds, wobei das erste Feld der Gruppe die Nummer 0 trägt.
Befehlsschaltfläche: keine Bedeutung
OK: 1
Abbrechen: 2

Im folgenden Beispiel wird die Dialogfunktion eines Dialogs mittels einer Case-Verzweigung ausgewertet. Der Parameter SuppValue wird dabei nicht berücksichtigt.

Sub Main

 

 Begin Dialog UserDialog1 60,60, 260, 188, "Dialogfunktion", .Dialogfn

         Text 8, 10, 73, 13, "Text:"

         TextBox 8, 26, 160, 18, .FText

         CheckBox 8, 56, 203, 16, "Alles anzeigen",. Chk1

         GroupBox 8, 79, 230, 70, "Gruppenfeld:", .Group

         CheckBox 18, 100, 189, 16, "Beschriftung der Schaltfläche ändern", .Chk2

         PushButton 18, 118, 159, 16, "Schaltfläche", .History

         OKButton 177, 8, 58, 21

         CancelButton 177, 32, 58, 21

 End Dialog

 Dim Dlg1 As UserDialog1

 x = Dialog(Dlg1)

End Sub ' (Main)

Function Dialogfn(ControlID$, Action%, SuppValue%)

 Begin Dialog UserDialog2 160,160, 260, 188, "Dialogfunktion", .Dialogfunktion

         Text 8,10,73,13, "Eingabefeld"

         TextBox 8, 26, 160, 18, .FText

         CheckBox 8, 56, 203, 16, "Kontrollkästchen",. ch1

         CheckBox 18, 100, 189, 16, "Kontrollkästchen", .ch2

         PushButton 18, 118, 159, 16, "Schaltfläche", .but1

         OKButton 177, 8, 58, 21

         CancelButton 177, 32, 58, 21

 End Dialog

 Dim Dlg2 As UserDialog2

 Dlg2.FText = "Dies ist die Vorgabe"

 Select Case Action%

         Case 1

                 DlgEnable "Group", 0

                 DlgVisible "Chk2", 0

                 DlgVisible "History", 0

         Case 2

                 If ControlID$ = "Chk1" Then

                         DlgEnable "Group"

                         DlgVisible "Chk2"

                         DlgVisible "History"

                 End If

                 If ControlID$ = "Chk2" Then

                         DlgText "History", "Weiteren Dialog anzeigen"

                 End If

                 If ControlID$ = "History" Then

                         Dialogfn = 1

                         x = Dialog(Dlg2)

                 End If

         Case Else

 End Select

 Dialogfn = 1

End Function