Basic Analog Clock [UPDATED]
Posted: Sun Dec 16, 2007 1:47 am
I have put together a very simple analog clock for newbies or old hands at programming to muck around with and perhaps modify and come up with their own version.
If you really want to get into clocks look no further than the master clock coder, netmaestros 'Transparent Clock', which should be easily found by searching on the board under that name.
Makes me drawl at the mouth every time I see it.
Updated: 24 December 2007
Updated: 25 December 2007
Updated: 27 December 2007
Enjoy 
If you really want to get into clocks look no further than the master clock coder, netmaestros 'Transparent Clock', which should be easily found by searching on the board under that name.
Makes me drawl at the mouth every time I see it.

Updated: 24 December 2007
Updated: 25 December 2007
Updated: 27 December 2007
Code: Select all
;
; My Clock By Electrochrisso, 2007, PB4
;
#MiddleX = 120
#MiddleY = 120
#Radius = 110
If CreateImage(0,#MiddleX*2,#MiddleY*2)
StartDrawing(ImageOutput(0))
Box(0,0,#MiddleX*2,#MiddleY*2,$999999)
Circle(#MiddleX,#MiddleY,#MiddleX-2,$D8BC27)
Circle(120,5, 3,$CCCCCC)
Circle(178,20, 3,$CCCCCC)
Circle(219,62, 3,$CCCCCC)
Circle(235,120,3,$CCCCCC)
Circle(219,178,3,$CCCCCC)
Circle(178,219,3,$CCCCCC)
Circle(120,235,3,$CCCCCC)
Circle(62, 219,3,$CCCCCC)
Circle(21, 178,3,$CCCCCC)
Circle(5, 120,3,$CCCCCC)
Circle(62, 20, 3,$CCCCCC)
Circle(21, 62, 3,$CCCCCC)
StopDrawing()
If OpenFile(0,"MyClock.ini")
Win_0X = Val(ReadString(0))
Win_0Y = Val(ReadString(0))
Sticky = Val(ReadString(0))
Win_1X = Val(ReadString(0))
Win_1Y = Val(ReadString(0))
AlarmState = Val(ReadString(0))
AlarmHour = Val(ReadString(0))
AlarmMin = Val(ReadString(0))
CloseFile(0)
EndIf
If OpenWindow(0,Win_0X,Win_0Y,#MiddleX*2,#MiddleY*2,"My Clock", #PB_Window_SystemMenu) And CreateGadgetList(WindowID(0)) And CreatePopupMenu(0)
ImageGadget(0,0,0,#MiddleX*2,#MiddleY*2,ImageID(0))
GadgetToolTip(0,"Right click for options menu")
MenuItem(1, "Window On Top")
MenuItem(2, "View Calendar")
MenuItem(3, "Alarm Settings")
MenuBar()
MenuItem(4, "Quit")
StickyWindow(0,Sticky) : SetMenuItemState(0,1,Sticky)
Repeat
Event = WaitWindowEvent(1)
Wvent = EventWindow()
If Wvent = 1 And Event = #PB_Event_CloseWindow
Win_1X = WindowX(1) : Win_1Y = WindowY(1) : CloseWindow(1)
EndIf
If AlarmState = 1
If AlarmHour = RealHour And AlarmMin = Minute(Date()) And Second(Date()) < 10
Delay(100) : Beep_(1000, 100)
EndIf
EndIf
Select Event
Case #WM_RBUTTONDOWN
DisplayPopupMenu(0, WindowID(0))
Case #PB_Event_Menu
Select EventMenu()
Case 1
If GetMenuItemState(0,1) = 0
StickyWindow(0,1) : SetMenuItemState(0,1,1) : Sticky = 1
Else
StickyWindow(0,0) : SetMenuItemState(0,1,0) : Sticky = 0
EndIf
Case 2
If OpenWindow(1, Win_1X, Win_1Y, 220, 200, "Calendar", #PB_Window_SystemMenu)
If CreateGadgetList(WindowID(1))
CalendarGadget(1, 10, 10, 200, 180)
StickyWindow(1,1)
EndIf
EndIf
Case 3
If OpenWindow(2, 0, 0, 220, 90, "Alarm Settings", #PB_Window_SystemMenu | #PB_Window_WindowCentered)
If CreateGadgetList(WindowID(2))
CheckBoxGadget(2, 10, 10, 150, 20, "Activate Alarm")
SetGadgetState(2, AlarmState)
TextGadget(3, 10, 52, 25, 20, "Hour")
SpinGadget(4, 40, 50, 30, 20, 0, 23, #PB_Spin_Numeric) : SetGadgetState(4, 0)
SetGadgetState(4, AlarmHour)
TextGadget(5, 90, 52, 20, 20, "Min")
SpinGadget(6, 115, 50, 30, 20, 0, 59, #PB_Spin_Numeric) : SetGadgetState(6, 0)
SetGadgetState(6, AlarmMin)
StickyWindow(2,1)
EndIf
EndIf
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
AlarmState = GetGadgetState(2) : AlarmHour = GetGadgetState(4) : AlarmMin = GetGadgetState(6)
CloseWindow(2) : Event = -1
Case 4 : Break
EndSelect
EndSelect
StartDrawing(ImageOutput(0))
Circle(#MiddleX,#MiddleY,#MiddleX-8,$9CE060)
Box(83,48,74,18,0)
DrawText(85,50,FormatDate("%dd-%mm-%yyyy", Date()),0,$0BD5F4)
LineXY(#MiddleX,#MiddleY,#MiddleX+Sin(grad_h*(2*3.14159265/360))*98,#MiddleY+Cos(grad_h*(2*3.14159265/360))*98, 0)
LineXY(#MiddleX,#MiddleY,#MiddleX+Sin(grad_m*(2*3.14159265/360))*107,#MiddleY+Cos(grad_m*(2*3.14159265/360))*107, $0000FF)
LineXY(#MiddleX,#MiddleY,#MiddleX+Sin(grad_s*(2*3.14159265/360))*110,#MiddleY+Cos(grad_s*(2*3.14159265/360))*110, $FFFFFF)
Circle(#MiddleX,#MiddleY,4,$FF0000)
StopDrawing()
SetGadgetState(0,ImageID(0))
grad_s = 360-(Second(Date())*6)+180
grad_m = 360-(Minute(Date())*6)+180
If GetTimeZoneInformation_(tzi.TIME_ZONE_INFORMATION) <> 1
RealHour = Hour(Date())-1
grad_h = 360-((RealHour*30)+180)-(Minute(Date())/2)
Else
RealHour = Hour(Date())
grad_h = 360-((RealHour*30)+180)-(Minute(Date())/2)
EndIf
Until Wvent = 0 And IsWindow(1) = 0 And Event = #PB_Event_CloseWindow
CreateFile(0,"MyClock.ini")
WriteStringN(0,Str(WindowX(0)))
WriteStringN(0,Str(WindowY(0)))
WriteStringN(0,Str(Sticky))
WriteStringN(0,Str(Win_1X))
WriteStringN(0,Str(Win_1Y))
WriteStringN(0,Str(AlarmState))
WriteStringN(0,Str(AlarmHour))
WriteStringN(0,Str(AlarmMin))
CloseFile(0)
EndIf
EndIf
End
