Page 1 of 1

Win32Timer

Posted: Sun Nov 06, 2005 8:51 pm
by Droopy
Code updated For 5.20+

Just win32 Timer without CallBack

Code: Select all

;/ Author: BackupUser tweaked by Droopy

OpenWindow(0,0,0,230,120,"Timer with API",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)

TextGadget(0,10,10,210,30,"")
TextGadget(1,10,45,210,30,"")
TextGadget(2,10,80,210,30,"Timer 1 and 2 Started",#PB_Text_Center)

;/ Starting Timers
SetTimer_(WindowID(0),1,150,0)   ; Timer #1 each 150 ms
SetTimer_(WindowID(0),2,1000,0)  ; Timer #2 each 1 second
SetTimer_(WindowID(0),3,10000,0) ; Timer #3 each 10 seconds

Repeat
  Event = WaitWindowEvent()
  If Event=#WM_TIMER
    
    Select EventwParam()
        
      Case 1 ;/ Timer #1
        SetGadgetText(0,GetGadgetText(0)+"-")
        Beep_(400,10)
        
      Case 2 ;/ Timer #2
        SetGadgetText(1,GetGadgetText(1)+"###")
        Beep_(800,10)
        
      Case 3 ;/ Timer #3
        SetGadgetText(2,"Timer 1 and 2 Stopped")
        KillTimer_(WindowID(0),1) ;/ Kill Timer #1
        KillTimer_(WindowID(0),2) ;/ Kill Timer #2
        Beep_(1500,500)
        
    EndSelect
  EndIf
Until Event=#PB_Event_CloseWindow

Posted: Sun Nov 06, 2005 10:00 pm
by rsts
Hmm - not sure how I'll use this, but it sure does look/sound neat :)

Posted: Sun Nov 06, 2005 11:06 pm
by Kale
I think this is cleaner, then you don't need 'EventwParam()' which i think is deprieciated.

Code: Select all

;/ Author: Droopy tweaked by Kale

Procedure Timer1()
	SetGadgetText(0,GetGadgetText(0)+"-")
	Beep_(400,10)
EndProcedure

Procedure Timer2()
	SetGadgetText(1,GetGadgetText(1)+"###")
	Beep_(800,10)
EndProcedure

Procedure Timer3()
	SetGadgetText(2,"Timer 1 and 2 Stopped")
	KillTimer_(WindowID(),1) ;/ Kill Timer #1
	KillTimer_(WindowID(),2) ;/ Kill Timer #2
	Beep_(1500,500)
	End
EndProcedure

OpenWindow(0,0,0,230,120,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Timer with API")
	CreateGadgetList(WindowID(0))
		TextGadget(0,10,10,210,30,"")
		TextGadget(1,10,45,210,30,"")
		TextGadget(2,10,80,210,30,"Timer 1 and 2 Started",#PB_Text_Center)

;/ Starting Timers
SetTimer_(WindowID(), 1, 150, @Timer1())   ; Timer #1 each 150 ms
SetTimer_(WindowID(), 2, 1000, @Timer2())  ; Timer #2 each 1 second
SetTimer_(WindowID(), 3, 10000, @Timer3()) ; Timer #3 each 10 seconds
 
Repeat
	Event = WaitWindowEvent()

Until Event=#PB_EventCloseWindow

Posted: Sun Nov 06, 2005 11:59 pm
by Droopy
Thanks Kale, it's what i want since long-past :D

Posted: Mon Nov 07, 2005 12:04 am
by Chris
And why not a simple TimerProcedure

Code: Select all

;/ Author: Droopy tweaked by Kale and Up-tweaked by Chris :o))

Procedure TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
  Select uMsg
    Case #WM_TIMER
      Select idEvent
        Case 1
          SetGadgetText(0,GetGadgetText(0)+"-") 
          Beep_(400,10) 
          
        Case 2
          SetGadgetText(1,GetGadgetText(1)+"###") 
          Beep_(800,10) 
          
        Case 3
          SetGadgetText(2,"Timer 1 and 2 Stopped") 
          KillTimer_(WindowID(),1) ;/ Kill Timer #1 
          KillTimer_(WindowID(),2) ;/ Kill Timer #2 
          Beep_(1500,500) 
          End
      EndSelect
  EndSelect
EndProcedure

OpenWindow(0,0,0,230,120,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Timer with API") 
CreateGadgetList(WindowID(0)) 
TextGadget(0,10,10,210,30,"") 
TextGadget(1,10,45,210,30,"") 
TextGadget(2,10,80,210,30,"Timer 1 and 2 Started",#PB_Text_Center) 

;/ Starting Timers 
SetTimer_(WindowID(), 1, 150,   @TimerProc())   ; Timer #1 each 150 ms 
SetTimer_(WindowID(), 2, 1000,  @TimerProc())   ; Timer #2 each 1 second 
SetTimer_(WindowID(), 3, 10000, @TimerProc())   ; Timer #3 each 10 seconds 

Repeat 
  Event = WaitWindowEvent() 
  
Until Event=#PB_EventCloseWindow

Posted: Mon Nov 07, 2005 12:19 am
by Droopy
I prefer create one procedure for each Timer :wink:

Code: Select all

;/ Author: BackupUser tweaked by Droopy/Kale 

ProcedureDLL TimerStart(TimerId,Delay,ProcedureAdress)
  SetTimer_(WindowID(),TimerId,Delay,ProcedureAdress)
EndProcedure

ProcedureDLL TimerKill(TimerId)
  KillTimer_(WindowID(),TimerId)
EndProcedure

;/ Test

Procedure Timer1() ; First ProgressBarGadget
  SetGadgetState(0,GetGadgetState(0)+1) 
  Beep_(400,10) 
EndProcedure 

Procedure Timer2(); Second ProgressBarGadget 
  SetGadgetState(1,GetGadgetState(1)+1) 
  Beep_(1000,10) 
EndProcedure 

Procedure Timer3() 
  SetGadgetText(2,"Timer 3 Kill Timer 1 and 2") 
  TimerKill(1) ;/ Kill Timer #1 
  TimerKill(2) ;/ Kill Timer #2 
  Beep_(1500,500) 
EndProcedure 

OpenWindow(0,0,0,230,120,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Timers with API") 
CreateGadgetList(WindowID()) 
ProgressBarGadget(0,10,10,210,30,0,65,#PB_ProgressBar_Smooth) 
ProgressBarGadget(1,10,45,210,30,0,9,#PB_ProgressBar_Smooth) 
SetGadgetState(0,0)
SetGadgetState(1,0)
TextGadget(2,10,80,210,30,"Timer 1/2/3 Started",#PB_Text_Center) 

;/ Starting Timers 
TimerStart(1, 150, @Timer1())   ; Timer #1 each 150 ms 
TimerStart(2, 1000, @Timer2())  ; Timer #2 each 1 second 
TimerStart(3, 10000, @Timer3()) ; Timer #3 each 10 seconds 
  
Repeat 
Until WaitWindowEvent()=#PB_EventCloseWindow