Eine MsgBox in der Dialogfunktion kann eine Endlosschleife erzeugenDie Msgbox darf nicht beim Ereignis
Action% = 4 (Focus wechselt Objekt) aufgerufen werden.
Jedesmal nach Beenden der MsBox geht der Focus an den Dialog zurück und ruft die MsgBox erneut auf.
Mit etas Glück endet nach ca. 50x [Enter] tippen das Macro mit einer unsinnigen Fehlermeldung. Ich musste aber auch schon alles killen und rebooten wegen nicht freigegebenem Arbeitsspeicher. Vorsicht, der Dialog ist dabei nicht mehr Applikationsmodal! (Vorteil, man kann noch schnell speichern

)
Skript zur Analyse der Dialog Ereignisse, Funktionsparameter, Elementvariablen, und des RückgabewertsSo, und weil ich aus der Beschreibung zu Dialogen, den Elementen und der Dialogfunktion überhaupt nicht schlau wurde aus den möglichen Rückgabewerten, hab ich mal ein Skript geschrieben.
Es printet im Ausgabefenster...
- den Rückgabewert des Dialogs (ButtonNum)
- alle Werte der Elementvariablen (ausser Textfeld, Gruppenrahmen) nach Dialogende.
- alle Übergabeparameter der Dialogfunktion während des Betriebs, bei uns noch wohl eher unbekannten Ereignissen (Actions).
Vor allem Letzteres ist interessant. Zieht mal den Dialog über'n Bildschirm! Oder: [Abbruch] heißt "Picture", [OK] "OptionButton"

, und alle Radiobuttons geben -1, 0 oder
Buttonnumber zurück, je nachdem ob OK, Cancel oder eine andere Schaltfläche geklickt wurde (Optiongroup gibt Status wieder, nicht die Radiobuttons).
Die daraus ersehbaren Ergebnisse werden sicher noch irgendwann in die Hilfe kommen denke ich. Bis dahin müsste jeder mit dem Skript seine möglichen Rückgabewerte ohne Probiererei genau ermitteln können, und erkennen bei welcher Äkschen-Id was geschehen war usw..
Und ich bitte um ein Picture Element!Ein echtes, nicht [Abbrechen]

,denn vieles lässt sich mit Text allein sehr schwer vermitteln. Mehr folgt in menschlichem Abstand
Das Skript:
(UTF-8 codiert speichern wg. Umlauten!)Code:
Sub DialogInfo ()
' Macro zum Betrachten des Rückgabewerts von Dialogen,
' der Elementvariablen, und der während des Betriebs an die
' Dialogfunktion übergeben Parameter wenn sie durch ein
' Ereignis (Action%) aufgerufen wird.
' Das Macro läuft sinnvoll nur im BasicMaker (Ausgabefenster!).
' Die Kommentarzeilen zwischen "*******" sind zu löschen!
' Bei Aktivierung demonstrieren sie eine Endlosschleife.
' Die Print Anweisung ist hier sowieso perfekt geeignet.
Dim cnt%
Dim myList$(10)
For Cnt = 1 To 10
myList(Cnt) = "ListRow " & CStr(Cnt)
Next Cnt
Begin Dialog TestDialog 137,79, 240, 132, "Test Dialog", .CtrlDlgTest
Text 8,8,192,12, "Rückgabewert, Elementvariablen, und Parameter der Dialogfunktion testen"
GroupBox 8,24,64,44, "GroupBox_1"
OptionGroup .GROUP_1
OptionButton 16,32,52,16, "RadioButton_1", .Radio_1
OptionButton 16,48,52,16, "RadioButton_2", .Radio_2
CheckBox 16,76,48,12, "CheckBox_1", .Check_1
CheckBox 16,92,48,12, "CheckBox_2", .Check_2
TextBox 88,28,56,12, "EditBox_1", .Edit_1
ListBox 88,52,56,44, myList(), .List_1
DropListBox 160,28,72,68, myList(), .Drop_1
ComboBox 160,52,72,44, myList(), .Combo_1
PushButton 16,112,48,12, "PushButton_1", .Button_1
PushButton 72,112,48,12, "PushButton_2", .Button_2
OKButton 128,112,48,12
CancelButton 184,112,48,12
End Dialog
Dim dlgtest As TestDialog
Dim dlgid As Integer
dlgid = Dialog(dlgtest)
Print "############ ENDE DIALOG - RÜCKGABEWERT:", dlgid
Print ""
Print "Werte der Dialogvariablen:"
Print "--------------------------"
Print " OptionGroup:", dlgtest.GROUP_1
Print " RadioButton_1:", dlgtest.Radio_1
Print " RadioButton_2:", dlgtest.Radio_2
Print " CheckBox_1:", dlgtest.Check_1
Print " CheckBox_2:", dlgtest.Check_2
Print " EditBox:", dlgtest.Edit_1
Print " Listbox:", dlgtest.List_1
Print " DropListBox:", dlgtest.Drop_1
Print " ComboBox:", dlgtest.Combo_1
End Sub
Function CtrlDlgTest(ControlID$, Action%, SuppValue%)
If Action = 1 then
Print ""
Print "############ BEGIN DIALOG ############"
' ****** DIES WIRD für 1 SuppValue KORREKT AUSGEFÜHRT *******
' MsgBox "DIALOG BEGIN"
' ****** WEIL ACTION = 4 AUSGESCHLOSSEN WURDE ***************
ElseIf Action = 4 Then ' >> Event: Focus wechselt das Objekt
Print ""
End If
Print "ControlID: " & ControlID, " Action: " & Cstr(Action), " SuppValue: " & Cstr(SuppValue)
' ****** HIER KOMMT ES ZUR ENDLOSSCHLEIFE ****************************
' WEIL DER DIALOG DANACH IMMER WIEDER NEU DEN FOCUS ERHÄLT (Action=4)"
' MsgBox "ControlID: " & ControlID & Chr(10) & _
' "Action: " & Cstr(Action) & Chr(10) & _
' "SuppValue: " & Cstr(SuppValue)
' ********************************************************************
End Function