Nothing special but I thought somebody might want it and improve it. Works fine here. Grab your own cartoon numbers and try it, I don't have a web site any more. (or ignore it heheheh)
Code: Select all
; Program windows, declarations and personal variables
UsePNGImageDecoder()
Define EventID, MenuID, GadgetID, WindowID
Enumeration 1
#Window_Lobsterclock
EndEnumeration
#WindowIndex = #PB_Compiler_EnumerationValue
Enumeration 1
; Window_Lobsterclock
#Gadget_Lobsterclock_hh0
#Gadget_Lobsterclock_hh1
#Gadget_Lobsterclock_Colon1
#Gadget_Lobsterclock_mm0
#Gadget_Lobsterclock_mm1
#Gadget_Lobsterclock_Colon2
#Gadget_Lobsterclock_ss0
#Gadget_Lobsterclock_ss1
EndEnumeration
#GadgetIndex = #PB_Compiler_EnumerationValue
Enumeration 1
#Image_Lobsterclock_hh0
#Image_Lobsterclock_hh1
#Image_Lobsterclock_Colon1
#Image_Lobsterclock_mm0
#Image_Lobsterclock_mm1
#Image_Lobsterclock_Colon2
#Image_Lobsterclock_ss0
#Image_Lobsterclock_ss1
EndEnumeration
#ImageIndex = #PB_Compiler_EnumerationValue
CatchImage(#Image_Lobsterclock_hh0, ?_OPT_Lobsterclock_hh0)
CatchImage(#Image_Lobsterclock_hh1, ?_OPT_Lobsterclock_hh0)
CatchImage(#Image_Lobsterclock_Colon1, ?_OPT_Lobsterclock_Colon1)
CatchImage(#Image_Lobsterclock_mm0, ?_OPT_Lobsterclock_hh0)
CatchImage(#Image_Lobsterclock_mm1, ?_OPT_Lobsterclock_hh0)
CatchImage(#Image_Lobsterclock_Colon2, ?_OPT_Lobsterclock_Colon1)
CatchImage(#Image_Lobsterclock_ss0, ?_OPT_Lobsterclock_hh0)
CatchImage(#Image_Lobsterclock_ss1, ?_OPT_Lobsterclock_hh0)
DataSection
_OPT_Lobsterclock_hh0: : IncludeBinary "Images\Blank.png"
_OPT_Lobsterclock_Colon1: : IncludeBinary "Images\Colon.png"
EndDataSection
Procedure.i Window_Lobsterclock()
If OpenWindow(#Window_Lobsterclock, 69, 81, 847, 194, "Lobsterclock", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible)
ImageGadget(#Gadget_Lobsterclock_hh0, 5, 5, 102, 180, ImageID(#Image_Lobsterclock_hh0))
ResizeGadget(#Gadget_Lobsterclock_hh0, 5, 5, 102, 180)
ResizeImage(#Image_Lobsterclock_hh0, 102, 180)
SetGadgetState(#Gadget_Lobsterclock_hh0, ImageID(#Image_Lobsterclock_hh0))
ImageGadget(#Gadget_Lobsterclock_hh1, 115, 5, 102, 180, ImageID(#Image_Lobsterclock_hh1))
ResizeGadget(#Gadget_Lobsterclock_hh1, 115, 5, 102, 180)
ResizeImage(#Image_Lobsterclock_hh1, 102, 180)
SetGadgetState(#Gadget_Lobsterclock_hh1, ImageID(#Image_Lobsterclock_hh1))
ImageGadget(#Gadget_Lobsterclock_Colon1, 225, 5, 84, 180, ImageID(#Image_Lobsterclock_Colon1))
ResizeGadget(#Gadget_Lobsterclock_Colon1, 225, 5, 84, 180)
ResizeImage(#Image_Lobsterclock_Colon1, 84, 180)
SetGadgetState(#Gadget_Lobsterclock_Colon1, ImageID(#Image_Lobsterclock_Colon1))
ImageGadget(#Gadget_Lobsterclock_mm0, 315, 5, 102, 180, ImageID(#Image_Lobsterclock_mm0))
ResizeGadget(#Gadget_Lobsterclock_mm0, 315, 5, 102, 180)
ResizeImage(#Image_Lobsterclock_mm0, 102, 180)
SetGadgetState(#Gadget_Lobsterclock_mm0, ImageID(#Image_Lobsterclock_mm0))
ImageGadget(#Gadget_Lobsterclock_mm1, 425, 5, 102, 180, ImageID(#Image_Lobsterclock_mm1))
ResizeGadget(#Gadget_Lobsterclock_mm1, 425, 5, 102, 180)
ResizeImage(#Image_Lobsterclock_mm1, 102, 180)
SetGadgetState(#Gadget_Lobsterclock_mm1, ImageID(#Image_Lobsterclock_mm1))
ImageGadget(#Gadget_Lobsterclock_Colon2, 535, 5, 84, 180, ImageID(#Image_Lobsterclock_Colon2))
ResizeGadget(#Gadget_Lobsterclock_Colon2, 535, 5, 84, 180)
ResizeImage(#Image_Lobsterclock_Colon2, 84, 180)
SetGadgetState(#Gadget_Lobsterclock_Colon2, ImageID(#Image_Lobsterclock_Colon2))
ImageGadget(#Gadget_Lobsterclock_ss0, 625, 5, 102, 180, ImageID(#Image_Lobsterclock_ss0))
ResizeGadget(#Gadget_Lobsterclock_ss0, 625, 5, 102, 180)
ResizeImage(#Image_Lobsterclock_ss0, 102, 180)
SetGadgetState(#Gadget_Lobsterclock_ss0, ImageID(#Image_Lobsterclock_ss0))
ImageGadget(#Gadget_Lobsterclock_ss1, 735, 5, 102, 180, ImageID(#Image_Lobsterclock_ss1))
ResizeGadget(#Gadget_Lobsterclock_ss1, 735, 5, 102, 180)
ResizeImage(#Image_Lobsterclock_ss1, 102, 180)
SetGadgetState(#Gadget_Lobsterclock_ss1, ImageID(#Image_Lobsterclock_ss1))
HideWindow(#Window_Lobsterclock, 0)
ProcedureReturn WindowID(#Window_Lobsterclock)
EndIf
EndProcedure
; All program declarations
Declare Clockgadget(ObjectHandle.i, Message.i, EventNumber.i, TimePeriod.i) ;
; Standard program data structure
#TitleBarClockTimer = 624 ; Title bar clock timer event
; Standard program data structure
Structure ProgramData
QuitValue.i ; Program quit value
CurrentDate.s ; The current date minus the time component
EndStructure
; Global variables
Global Program.ProgramData ;
; Date and time testing, date display on title bar
Program\CurrentDate = FormatDate("%dd/%mm/%yyyy", Date()) ; Get the current system date without the time component
; Setup day and month literal names
Global Dim NameOfDay.s(7) ; Fill an array with the names of the days (Terry Hough I think)
NameOfDay(0) = "Sunday"
NameOfDay(1) = "Monday"
NameOfDay(2) = "Tuesday"
NameOfDay(3) = "Wednesday"
NameOfDay(4) = "Thursday"
NameOfDay(5) = "Friday"
NameOfDay(6) = "Saturday"
Global Dim DaysPerMonth(12) ; Fill an array on how many days per month there are
For X = 0 To 11
DaysPerMonth(X) = 31
Next
DaysPerMonth(1) = 28
DaysPerMonth(3) = 30
DaysPerMonth(5) = 30
DaysPerMonth(8) = 30
DaysPerMonth(10) = 30
Global Dim NameOfMonth.s(12) ; Fill an array with the names of the months
NameOfMonth(0) = "January"
NameOfMonth(1) = "February"
NameOfMonth(2) = "March"
NameOfMonth(3) = "April"
NameOfMonth(4) = "May"
NameOfMonth(5) = "June"
NameOfMonth(6) = "July"
NameOfMonth(7) = "August"
NameOfMonth(8) = "September"
NameOfMonth(9) = "October"
NameOfMonth(10) = "November"
NameOfMonth(11) = "December"
Global Dim Years.s(19) ; Fill an array with the years
Years(0) = "2002"
Years(1) = "2003"
Years(2) = "2004"
Years(3) = "2005"
Years(4) = "2006"
Years(5) = "2007"
Years(6) = "2008"
Years(7) = "2009"
Years(8) = "2010"
Years(9) = "2011"
Years(10) = "2012"
Years(11) = "2013"
Years(12) = "2014"
Years(13) = "2015"
Years(14) = "2016"
Years(15) = "2017"
Years(16) = "2018"
Years(17) = "2019"
Years(18) = "2020"
; Extra image constants, follows on from the visual designer created code
Enumeration #ImageIndex ; Follow on from visual designer created constants
#Image_0 ;
#Image_1 ;
#Image_2 ;
#Image_3 ;
#Image_4 ;
#Image_5 ;
#Image_6 ;
#Image_7 ;
#Image_8 ;
#Image_9 ;
EndEnumeration
; Load images into memory from the datasection references, follows on from the visual designer created code
CatchImage(#Image_0, ?_Image_0) ;
CatchImage(#Image_1, ?_Image_1) ;
CatchImage(#Image_2, ?_Image_2) ;
CatchImage(#Image_3, ?_Image_3) ;
CatchImage(#Image_4, ?_Image_4) ;
CatchImage(#Image_5, ?_Image_5) ;
CatchImage(#Image_6, ?_Image_6) ;
CatchImage(#Image_7, ?_Image_7) ;
CatchImage(#Image_8, ?_Image_8) ;
CatchImage(#Image_9, ?_Image_9) ;
; Datasection references, follows on from the visual designer created code
DataSection
_Image_0: : IncludeBinary "Images\0.png" ;
_Image_1: : IncludeBinary "Images\1.png" ;
_Image_2: : IncludeBinary "Images\2.png" ;
_Image_3: : IncludeBinary "Images\3.png" ;
_Image_4: : IncludeBinary "Images\4.png" ;
_Image_5: : IncludeBinary "Images\5.png" ;
_Image_6: : IncludeBinary "Images\6.png" ;
_Image_7: : IncludeBinary "Images\7.png" ;
_Image_8: : IncludeBinary "Images\8.png" ;
_Image_9: : IncludeBinary "Images\9.png" ;
EndDataSection
; All my procedures
; Run an asynchronous clock in the window title bar
Procedure Clockgadget(ObjectHandle.i, Message.i, EventNumber.i, TimePeriod.i) ; (Baron Baldrick code)
Select EventNumber.i
; User selected timer event number
Case #TitleBarClockTimer
LocalTimeDate.i = Date()
CurrentDate.s = NameOfDay(DayOfWeek(LocalTimeDate.i)) + " "
CurrentDate.s + Str(Day(LocalTimeDate.i)) + " "
CurrentDate.s + NameOfMonth(Month(LocalTimeDate.i) - 1) + " "
CurrentDate.s + Str(Year(LocalTimeDate.i))
HourVal.i = Hour(LocalTimeDate.i)
MinuteVal.i = Minute(LocalTimeDate.i)
SecondVal.i = Second(LocalTimeDate.i)
Hour12.i = HourVal.i % 12 ; Added to fix midnight 0 hour fault
If Not Hour12.i ;= 12 changed see above
Hour12.i = 12 ; HourVal ; 0 will now display as 12
; Else ; removed, see above
; Hour12.i = HourVal.i % 12
EndIf
If HourVal.i > 11
Suffix.s = " PM"
Else
Suffix.s = " AM"
EndIf
TimeString.s = "(12) " + Str(Hour12.i) + ":" + RSet(Str(MinuteVal.i), 2, "0") + ":" + RSet(Str(SecondVal.i), 2, "0") + Suffix.s + ", "
TimeString.s + "(24) " + FormatDate("%hh:%ii:%ss", LocalTimeDate.i)
; TimeString.s + "(UTC) " + FormatDate("%hh:%ii:%ss", UtcTime) ; Show UTC time
; SetWindowTitle(#Window_Keeper, #Fish +
; #Basename +
; #Version +
; Program\CompileCounters +
; ", Date: " +
; CurrentDate.s +
; ", Time: " +
; TimeString.s +
; ", Shortcuts: " +
; GetShortCutText(#ShortcutKeys_KeyboardShortcuts))
Hours.s = Str(Hour12.i)
Minutes.s = RSet(Str(MinuteVal.i), 2, "0")
Seconds.s = RSet(Str(SecondVal.i), 2, "0")
Select Left(Hours.s, 1)
Case "0" : SetGadgetState(#Gadget_Lobsterclock_hh0, ImageID(#Image_0))
Case "1" : SetGadgetState(#Gadget_Lobsterclock_hh0, ImageID(#Image_1))
Case "2" : SetGadgetState(#Gadget_Lobsterclock_hh0, ImageID(#Image_2))
Case "3" : SetGadgetState(#Gadget_Lobsterclock_hh0, ImageID(#Image_3))
Case "4" : SetGadgetState(#Gadget_Lobsterclock_hh0, ImageID(#Image_4))
Case "5" : SetGadgetState(#Gadget_Lobsterclock_hh0, ImageID(#Image_5))
Case "6" : SetGadgetState(#Gadget_Lobsterclock_hh0, ImageID(#Image_6))
Case "7" : SetGadgetState(#Gadget_Lobsterclock_hh0, ImageID(#Image_7))
Case "8" : SetGadgetState(#Gadget_Lobsterclock_hh0, ImageID(#Image_8))
Case "9" : SetGadgetState(#Gadget_Lobsterclock_hh0, ImageID(#Image_9))
EndSelect
Select Right(Hours.s, 1)
Case "0" : SetGadgetState(#Gadget_Lobsterclock_hh1, ImageID(#Image_0))
Case "1" : SetGadgetState(#Gadget_Lobsterclock_hh1, ImageID(#Image_1))
Case "2" : SetGadgetState(#Gadget_Lobsterclock_hh1, ImageID(#Image_2))
Case "3" : SetGadgetState(#Gadget_Lobsterclock_hh1, ImageID(#Image_3))
Case "4" : SetGadgetState(#Gadget_Lobsterclock_hh1, ImageID(#Image_4))
Case "5" : SetGadgetState(#Gadget_Lobsterclock_hh1, ImageID(#Image_5))
Case "6" : SetGadgetState(#Gadget_Lobsterclock_hh1, ImageID(#Image_6))
Case "7" : SetGadgetState(#Gadget_Lobsterclock_hh1, ImageID(#Image_7))
Case "8" : SetGadgetState(#Gadget_Lobsterclock_hh1, ImageID(#Image_8))
Case "9" : SetGadgetState(#Gadget_Lobsterclock_hh1, ImageID(#Image_9))
EndSelect
Select Left(Minutes.s, 1)
Case "0" : SetGadgetState(#Gadget_Lobsterclock_mm0, ImageID(#Image_0))
Case "1" : SetGadgetState(#Gadget_Lobsterclock_mm0, ImageID(#Image_1))
Case "2" : SetGadgetState(#Gadget_Lobsterclock_mm0, ImageID(#Image_2))
Case "3" : SetGadgetState(#Gadget_Lobsterclock_mm0, ImageID(#Image_3))
Case "4" : SetGadgetState(#Gadget_Lobsterclock_mm0, ImageID(#Image_4))
Case "5" : SetGadgetState(#Gadget_Lobsterclock_mm0, ImageID(#Image_5))
Case "6" : SetGadgetState(#Gadget_Lobsterclock_mm0, ImageID(#Image_6))
Case "7" : SetGadgetState(#Gadget_Lobsterclock_mm0, ImageID(#Image_7))
Case "8" : SetGadgetState(#Gadget_Lobsterclock_mm0, ImageID(#Image_8))
Case "9" : SetGadgetState(#Gadget_Lobsterclock_mm0, ImageID(#Image_9))
EndSelect
Select Right(Minutes.s, 1)
Case "0" : SetGadgetState(#Gadget_Lobsterclock_mm1, ImageID(#Image_0))
Case "1" : SetGadgetState(#Gadget_Lobsterclock_mm1, ImageID(#Image_1))
Case "2" : SetGadgetState(#Gadget_Lobsterclock_mm1, ImageID(#Image_2))
Case "3" : SetGadgetState(#Gadget_Lobsterclock_mm1, ImageID(#Image_3))
Case "4" : SetGadgetState(#Gadget_Lobsterclock_mm1, ImageID(#Image_4))
Case "5" : SetGadgetState(#Gadget_Lobsterclock_mm1, ImageID(#Image_5))
Case "6" : SetGadgetState(#Gadget_Lobsterclock_mm1, ImageID(#Image_6))
Case "7" : SetGadgetState(#Gadget_Lobsterclock_mm1, ImageID(#Image_7))
Case "8" : SetGadgetState(#Gadget_Lobsterclock_mm1, ImageID(#Image_8))
Case "9" : SetGadgetState(#Gadget_Lobsterclock_mm1, ImageID(#Image_9))
EndSelect
Select Left(Seconds.s, 1)
Case "0" : SetGadgetState(#Gadget_Lobsterclock_ss0, ImageID(#Image_0))
Case "1" : SetGadgetState(#Gadget_Lobsterclock_ss0, ImageID(#Image_1))
Case "2" : SetGadgetState(#Gadget_Lobsterclock_ss0, ImageID(#Image_2))
Case "3" : SetGadgetState(#Gadget_Lobsterclock_ss0, ImageID(#Image_3))
Case "4" : SetGadgetState(#Gadget_Lobsterclock_ss0, ImageID(#Image_4))
Case "5" : SetGadgetState(#Gadget_Lobsterclock_ss0, ImageID(#Image_5))
Case "6" : SetGadgetState(#Gadget_Lobsterclock_ss0, ImageID(#Image_6))
Case "7" : SetGadgetState(#Gadget_Lobsterclock_ss0, ImageID(#Image_7))
Case "8" : SetGadgetState(#Gadget_Lobsterclock_ss0, ImageID(#Image_8))
Case "9" : SetGadgetState(#Gadget_Lobsterclock_ss0, ImageID(#Image_9))
EndSelect
Select Right(Seconds.s, 1)
Case "0" : SetGadgetState(#Gadget_Lobsterclock_ss1, ImageID(#Image_0))
Case "1" : SetGadgetState(#Gadget_Lobsterclock_ss1, ImageID(#Image_1))
Case "2" : SetGadgetState(#Gadget_Lobsterclock_ss1, ImageID(#Image_2))
Case "3" : SetGadgetState(#Gadget_Lobsterclock_ss1, ImageID(#Image_3))
Case "4" : SetGadgetState(#Gadget_Lobsterclock_ss1, ImageID(#Image_4))
Case "5" : SetGadgetState(#Gadget_Lobsterclock_ss1, ImageID(#Image_5))
Case "6" : SetGadgetState(#Gadget_Lobsterclock_ss1, ImageID(#Image_6))
Case "7" : SetGadgetState(#Gadget_Lobsterclock_ss1, ImageID(#Image_7))
Case "8" : SetGadgetState(#Gadget_Lobsterclock_ss1, ImageID(#Image_8))
Case "9" : SetGadgetState(#Gadget_Lobsterclock_ss1, ImageID(#Image_9))
EndSelect
EndSelect
EndProcedure
; Main program event handler
If Window_Lobsterclock()
Define quitLobsterclock = #False
; Create the permanent timer
SetTimer_(WindowID(#Window_Lobsterclock), #TitleBarClockTimer, 1000, @Clockgadget()) ; 1000 = 1 second
;
Repeat
EventID = WaitWindowEvent()
MenuID = EventMenu()
GadgetID = EventGadget()
WindowID = EventWindow()
Select EventID
Case #PB_Event_CloseWindow
Select WindowID
Case #Window_Lobsterclock : quitLobsterclock = #True
EndSelect
EndSelect
Until quitLobsterclock
CloseWindow(#Window_Lobsterclock)
EndIf
End