Win32Timer

Share your advanced PureBasic knowledge/code with the community.
User avatar
Droopy
Enthusiast
Enthusiast
Posts: 658
Joined: Thu Sep 16, 2004 9:50 pm
Location: France
Contact:

Win32Timer

Post 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
rsts
Addict
Addict
Posts: 2736
Joined: Wed Aug 24, 2005 8:39 am
Location: Southwest OH - USA

Post by rsts »

Hmm - not sure how I'll use this, but it sure does look/sound neat :)
Kale
PureBasic Expert
PureBasic Expert
Posts: 3000
Joined: Fri Apr 25, 2003 6:03 pm
Location: Lincoln, UK
Contact:

Post 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
--Kale

Image
User avatar
Droopy
Enthusiast
Enthusiast
Posts: 658
Joined: Thu Sep 16, 2004 9:50 pm
Location: France
Contact:

Post by Droopy »

Thanks Kale, it's what i want since long-past :D
Chris
User
User
Posts: 60
Joined: Wed Jun 11, 2003 4:54 pm
Location: Somewhere... But i can see you!

Post 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
My english is bad !!!... It's normal, i'm french :lol:
My english is not really the English.
It's the FrogLish (Froggy's English) ;)
User avatar
Droopy
Enthusiast
Enthusiast
Posts: 658
Joined: Thu Sep 16, 2004 9:50 pm
Location: France
Contact:

Post 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 
Post Reply