timer while dragging a window

BlitzPlus Forums/BlitzPlus Programming/timer while dragging a window

CS_TBL(Posted 2003) [#1]
I only have crappy 56k line here, however, to lower the regular 2-monthly 200$+ phonebill, a company offers a better deal: you buy a fixed amount of phonehours and that's all. In my case, I have 100 hours for 50$ per month. Day or night doesn't make a difference..

Anyway, ofcourse, you can't take unused hours to the next month, and if you exceed the 100hour barrier, you gotta pay extra. Ofcourse, these companies want you to exceed since they can get more $ then.., so, logically they won't tell you how many hours you already used..

After I tried a one-month solution by writing down all used time in notepad, here's my hacky B+ solution.. when you go online, press 'start' and when you disconnect, press 'stop'.

However.. the timer doesn't update when you drag the app-window around.. how do I fix this?


sw=ClientWidth(Desktop())
sh=ClientHeight(Desktop())

app=CreateWindow("Counter",(sw/2)-70,(sh/2)-40,126,80,0,1)
quit=False
panel=CreatePanel(0,0,130,80,app):SetPanelColor panel,128,160,192:SetGadgetLayout panel,1,0,1,0
start=CreateButton("start",4,4,40,24,panel)
disconnect=CreateButton("stop",48,4,40,24,panel)
minimize=CreateButton("_",96,6,20,20,panel)

timerfile$="c:\My Documents\CS_TBL_counter.dat"

f=ReadFile(timerfile$)

If Not f
	f=WriteFile (timerfile$)
	WriteLine f,0
	CloseFile f	
	f=ReadFile(timerfile$)
Else
	seconds=ReadLine$(f)
	CloseFile f
EndIf


DisableGadget disconnect

startlabel=CreateLabel(seconds+"  ( "+secs2time(seconds)+" )",4,32,112,20,panel,3)

Repeat WaitEvent()

	If EventID()=$803
		If EventSource()=app
			f=WriteFile(timerfile$)
			WriteLine f,seconds
			CloseFile f
			quit=True
		EndIf
	EndIf
	
	If EventID()=$401
		If EventSource()=start
			timer=CreateTimer(1)
			DisableGadget start
			EnableGadget disconnect
		EndIf

		If EventSource()=disconnect
			If timer FreeTimer timer
			f=WriteFile(timerfile$)
			WriteLine f,seconds
			CloseFile f
			
			DisableGadget disconnect
			EnableGadget start
			
		EndIf

		If EventSource()=minimize
			MinimizeWindow app
		EndIf

	EndIf
	
	If EventID()=$4001

		If EventSource()=timer
			seconds=seconds+1
			SetGadgetText startlabel,seconds+"  ( "+secs2time(seconds)+" )"
		EndIf

	EndIf

Until quit End


Function secs2time$(s)
	hours= s / 3600
	mins = (s / 60) Mod 60
	secs = s Mod 60
	Return addzero(hours,3)+":"+addzero(mins,2)+":"+addzero(secs,2)
End Function

Function addzero$(s$,l)
	s$=RSet$(s$,l)
	s$=Replace$(s$," ","0")
	Return s$
End Function



Snarty(Posted 2003) [#2]
Here you go, this uses a self syncronising timer based on millisecs, and one which I use for all timing.

sw=ClientWidth(Desktop())
sh=ClientHeight(Desktop())

app=CreateWindow("Counter",(sw/2)-70,(sh/2)-40,126,80,0,1)
quit=False
panel=CreatePanel(0,0,130,80,app):SetPanelColor panel,128,160,192:SetGadgetLayout panel,1,0,1,0
start=CreateButton("start",4,4,40,24,panel)
disconnect=CreateButton("stop",48,4,40,24,panel)
minimize=CreateButton("_",96,6,20,20,panel)

timerfile$="c:\My Documents\CS_TBL_counter.dat"

f=ReadFile(timerfile$)

If Not f
	f=WriteFile (timerfile$)
	WriteLine f,0
	CloseFile f	
	f=ReadFile(timerfile$)
Else
	seconds=ReadLine$(f)
	CloseFile f
EndIf


DisableGadget disconnect
Seconds=0

startlabel=CreateLabel(seconds+"  ( "+secs2time(seconds)+" )",4,32,112,20,panel,3)
Global LastTime

Repeat WaitEvent()

	If EventID()=$803
		If EventSource()=app
			f=WriteFile(timerfile$)
			WriteLine f,seconds
			CloseFile f
			quit=True
		EndIf
	EndIf
	
	If EventID()=$401
		If EventSource()=start
			timer=CreateTimer(5)
			LastTime=MilliSecs()
			DisableGadget start
			EnableGadget disconnect
		EndIf

		If EventSource()=disconnect
			If timer FreeTimer timer
			f=WriteFile(timerfile$)
			WriteLine f,seconds
			CloseFile f
			
			DisableGadget disconnect
			EnableGadget start
			
		EndIf

		If EventSource()=minimize
			MinimizeWindow app
		EndIf

	EndIf
	
	If EventID()=$4001

		If EventSource()=timer
			Seconds=UpdateSeconds(Seconds)
			SetGadgetText startlabel,seconds+"  ( "+secs2time(seconds)+" )"
		EndIf

	EndIf

Until quit End

Function UpdateSeconds(Secs)

	ThisTime=MilliSecs()-LastTime
	If ThisTime=>1000
		Repeat
			Secs=Secs+1
			ThisTime=ThisTime-1000
		Until ThisTime<1000
		LastTime=MilliSecs()-ThisTime
	EndIf
	Return Secs

End Function

Function secs2time$(s)
	hours= s / 3600
	mins = (s / 60) Mod 60
	secs = s Mod 60
	Return addzero(hours,3)+":"+addzero(mins,2)+":"+addzero(secs,2)
End Function

Function addzero$(s$,l)
	s$=RSet$(s$,l)
	s$=Replace$(s$," ","0")
	Return s$
End Function



okee(Posted 2003) [#3]
There are freeware utilities that log your time online automatically:
http://www.simtel.net/product.download.mirrors.php?id=11819
there's loads more if you search.
Luckily enough my isp gives access to a log which is quite handy.

okee


Mark Tiffany(Posted 2003) [#4]
My ISP (Tiscali UK) gives me a log. But it doesn't correspond to my bill. I got charged for 2 hours extra last month, but when I add up their figures (even if I do some crazy rounding up), I'm at least 4-5 hours under my 50 hour limit...

grrr.