InputRequester und MessageRequester automatisch schließen

Anfängerfragen zum Programmieren mit PureBasic.
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

InputRequester und MessageRequester automatisch schließen

Beitrag von Martin66119 »

Guten morgen!

Ich habe mal eine Frage zu InputRequester und MessageRequester.
Kann man die beiden Requester automatisch schließen, sofern nicht nach
z.B. 20 Sekunden der entsprechende Button gedrückt oder keine Eingabe erfolgte wurde.

Danke für die Hilfe
Martin
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

Ein Beispiel aus dem englischen Forum

Code: Alles auswählen

;*************************************************************************** 
; Program:         Yet another timed messagebox sample 
; Source:          http://support.microsoft.com/?scid=181934 
; PB version by:   netmaestro 
; Date:            March 21, 2007 
; Applies to:      Anyone who likes timed message boxes 
; Disclaimer:      Hardly any animals were harmed during the creation of 
;                  this software. (one who whined got his feelings hurt) 
;*************************************************************************** 

#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 

; Little test... 

OpenWindow(0,0,0,320,240,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu) 
CreateGadgetList(WindowID(0)) 
ButtonGadget(0,100,200,100,25,"Do it") 
Repeat 
  ev = WaitWindowEvent() 
  If ev = #PB_Event_Gadget 
    uiResult = TimedMessageBox(#Null, "Does a triangle have three sides?", "Quiz", #MB_YESNO, 5000) ; // NULL first parameter is important. 
    
    Select uiResult 
      Case #IDYES 
        MessageBox_(#Null, "That's right!", "Result", #MB_OK) 
      Case #IDNO 
        MessageBox_(#Null, "Believe it or not, triangles really do have three sides.", "Result", #MB_OK) 
      Case #MessageBox_Timeout 
        MessageBox_(#Null,  "I sensed some hesitation there. The correct answer is Yes.", "Result", #MB_OK) 
    EndSelect 
  EndIf 
Until ev = #WM_CLOSE 
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

TimedMessageBox

Beitrag von Martin66119 »

Danke für die Hilfe!
Klappt genauso wie ich es mir vorgestellt habe.

Martin
Antworten