SetTimer funktioniert nur einmal - warum?
Verfasst: 07.10.2009 08:10
Hallo,
nach nun etlichen Tools mit PureBasic habe ich nun leider ein kleines Problem, das ich nicht lösen kann, obwohl es sehr einfach erscheint. Bestimmt stehe ich nur wieder auf dem Schlauch. Hier als mein Problem. Ich hab den Code aufs nötige reduziert:
Das Problem ist, das die getimte Messagebox nur einmal erscheint, wenn man die Zeit ablaufen lässt. Danach poppt keine Nachricht mehr auf. Wenn man die Messagebox in der angegebenen Zeit mit "Ok" bestätigt, dann erscheint diese aufgrund der forever-Schleife auch sofort wieder wie es soll. Kann vielleicht jemand helfen?
Edit: Achja, der Grund-Code ist nicht von mir!
nach nun etlichen Tools mit PureBasic habe ich nun leider ein kleines Problem, das ich nicht lösen kann, obwohl es sehr einfach erscheint. Bestimmt stehe ich nur wieder auf dem Schlauch. Hier als mein Problem. Ich hab den Code aufs nötige reduziert:
Code: Alles auswählen
#MessageBox_Timeout = -1
Global g_hwndTimedOwner
Global g_bTimedOut
Procedure MessageBoxTimer(hwnd, uiMsg, idEvent, dwTime)
g_bTimedOut = #True
If g_hwndTimedOwner
EnableWindow_(g_hwndTimedOwner, #True)
EndIf
PostQuitMessage_(0)
EndProcedure
Procedure TimedMessageBox(hwndOwner, pszMessage.s, pszTitle.s, flags, dwTimeout)
Protected idTimer.l, iResult.l
g_hwndTimedOwner = #Null
g_bTimedOut = #False
If hwndOwner And IsWindowEnabled_(hwndOwner)
g_hwndTimedOwner = hwndOwner
EndIf
idTimer.l = SetTimer_(#Null, 0, dwTimeout, @MessageBoxTimer())
iResult.l = MessageBox_(hwndOwner, pszMessage, pszTitle, flags)
KillTimer_(#Null, idTimer)
If g_bTimedOut
PeekMessage_(@msg.MSG, #Null, #WM_QUIT, #WM_QUIT, #PM_REMOVE)
iResult = #MessageBox_Timeout
EndIf
ProcedureReturn iResult
EndProcedure
Repeat
uiResult = TimedMessageBox(#Null, "Test", "Test", #MB_OK+#MB_ICONSTOP, 5000)
ForEver
Edit: Achja, der Grund-Code ist nicht von mir!