Here"s a quick and easy stopwatch timer you can use for a digital counter. Drop it onto a text or field sprite, and let it go. Start counting automatically, or control it with Lingo. Get the elapsed seconds via the mGetTime method.
-- Here"s a quick and easy stopwatch timer |
-- you can use for a digital counter. Drop |
-- it onto a text or field sprite, and let |
-- it go. Start counting automatically, or |
-- control it with Lingo. Get the elapsed |
-- seconds via the mGetTime method |
-- |
-- This code is emailware. If you use it, |
-- email me. What could be cheaper? |
-- Send comments to rwingate@mindmagic.com |
--------------------------------------------
-----------------------
on beginSprite me
-- initialize variables and the display
kStartTime = the milliSeconds
iLastTime = 0
mSetCounter me, ":00"
end
-----------------------
on exitFrame me
-- Check to see if a full seconds has elapsed.
-- If so, format the new time & fill the field
if fTicking then
tix = ( the milliSeconds - kStartTime ) / 1000
if tix <> iLastTime then
mSetCounter me, mGetStopWatchTime ( me, tix )
iLastTime = tix
end if
end if
end
-----------------------
on mSetCounter me, displayStr
-- dump the formatted counter display to the field
sprite(spriteNum).member.text = displayStr
end
-----------------------
on mGetStopWatchTime me, tim
-- format the time into a readable text string
hrs = tim / 3600
tim = tim mod 3600
myn = tim / 60
tim = tim mod 60
sec = mPadIfNecessary ( me, tim )
case ( TRUE ) of
( hrs > 0 ): return hrs & ":" & myn & ":" & sec
( myn > 0 ): return myn & ":" & sec
otherwise return ":" & sec
end case
end
-----------------------
on mPadIfNecessary me, sec
-- private method called by mGetStopWatchTime to
-- aid in formatting digital counter string
secStr = string ( sec )
if secStr.chars.count = 1 then return "0" & secStr
return secStr
end
-----------------------
on mStartCounting me
-- public method. Turns counting on
kStartTime = the milliSeconds
if not fTicking then fTicking = TRUE
end
-----------------------
on mStopCounting me
-- public method. Turns counting off
fTicking = FALSE
end
-----------------------
on mGetTime me
-- public accessor method. Call it from outside to get
-- the current seconds elapsed since counting started
return iLastTime
end
-----------------------
on getPropertyDescriptionList
-- make sure it"s been dragged onto a field
if not the currentSpriteNum then exit
myType = sprite(the currentSpriteNum).member.type
case ( myType ) of
#field, #text:
otherwise:
err = "This behavior requires text entry. Clear it from this"
err = err && "sprite, then drag it onto a field or text sprite."
alert err
exit
end case
ls = [:]
addProp ls, #fTicking, [ #comment:"Start stopwatch on beginSprite?",¬
#format:#boolean, #default:FALSE ]
return ls
end
-----------------------
on getBehaviorDescription me
txt = "Drag this behavior onto a field sprite to turn it"
txt = txt && "into a stopwatch counter. Use Lingo"s"
txt = txt && QUOTE & "sendSprite ( whichSprite, #message )"
txt = txt & QUOTE && "syntax with the behavior"s mStartCounting"
txt = txt && "methods to turn the stopwatch on and off."
return txt
end
Contact
MMI
36 South Court Sq
Suite 300
Newnan, GA 30263
USA