Hi,
hipfzwirgel , wie Oscar bereits beschrieben hat, ist ExtMsgBox per Konstruktion "Modal", was in diesem Zusammenhang bedeutet, dass es eine Abhängigkeit zu einer Interaktion mit dem User gibt. Klartext: Das Fenster bleibt so lange auf dem Schirm und das Programm so lange angehalten, bis der User mit dem Fenster interagiert!
Wenn du ein "Nicht-modales Fenster mit der Darstellung der ExtMsgBox brauchst, wieso änderst du dann nicht einfach Melbas code zu einer Funktion ExtMsgBox_nonmodal? Die gibt dann nicht den Statuscode der Funktion zurück den du sowieso nicht brauchst sondern den Handle der GUI, also $hMsgGUI.
;Teil der ExtMsgBox-Funktion von Melba
While 1
$aMsg = GUIGetMsg(1)
If $aMsg[1] = $hMsgGUI Then
Select
Case $aMsg[0] = -3 ; $GUI_EVENT_CLOSE
$iRet_Value = 0
ExitLoop
Case Else
; Check for other buttons
For $i = 1 To UBound($aButtonCID) - 1
If $aMsg[0] = $aButtonCID[$i] Then
$iRet_Value = $i
; No point in looking further
ExitLoop 2
EndIf
Next
EndSelect
EndIf
; Timeout if required
If TimerDiff($iTimeout_Begin) / 1000 >= $iTimeOut And $iTimeOut > 0 Then
$iRet_Value = 9
ExitLoop
EndIf
; Show countdown if required
If $fCountdown = True Then
Local $iTimeRun = Int(TimerDiff($iTimeout_Begin) / 1000)
If $iTimeRun <> $iCounter Then
$iCounter = $iTimeRun
GUICtrlSetData($cCountdown_Label, StringFormat("%2s", $iTimeOut - $iCounter))
EndIf
EndIf
WEnd
; Reset original mode
Opt('GUIOnEventMode', $iOrgMode)
If GUICtrlRead($cCheckbox) = 1 Then
; Negate the return value
$iRet_Value *= -1
EndIf
GUIDelete($hMsgGUI)
Return $iRet_Value
Alles anzeigen
Du musst doch nur die Abfrageschleife für die Buttons und den Timeout löschen und die "ExtMsgBox"-GUI nach dem Aufruf deiner Funktion(en) HWS/HaWe löschen...wie bei einer "selbstgestrickten" GUI auch?! Da geht zwar 90% der Funktionalität der ExtMsgBox() flöten, aber die brauchst du doch für deinen Anwendungsfall nicht!
Wobei ich persönlich mir diesen Krampf nicht antun würde...Eine GUI nach GENAU DEINEN VORGABEN zu erstellen und zu managen sollte auch nicht das Problem sein.