procedure Draw_Clock_Face (Size, X, Y : int, TimeOfDay : string)
const COLOR_CLOCK := 10
const CLOCK_HAND_COLOR := 2
var Hour, Minute, Second : nat
Second := strnat (TimeOfDay (7 .. 8))
Minute := strnat (TimeOfDay (4 .. 5))
Hour := strnat (TimeOfDay (1 .. 2))
drawoval (X, Y, Size, Size, COLOR_CLOCK)
drawoval (X, Y, 75, 75, COLOR_CLOCK)
% drawfilloval (X, Y, 50, 50, COLOR_CLOCK)
drawarc (X, Y, Size + 30, Size + 30, round (360 + (15 * (360 / 60)) - (Second * (360 / 60))) - 135,
round (360 + (15 * (360 / 60)) - (Second * (360 / 60))) + 135, COLOR_CLOCK)
drawarc (X, Y, Size + 10, Size + 10, round (360 + (15 * (360 / 60)) - (Minute * (360 / 60))) - 90,
round (360 + (15 * (360 / 60)) - (Minute * (360 / 60))) + 90, COLOR_CLOCK)
drawarc (X, Y, Size, Size,
round ((360 + (15 * (360 / 60)) - (Hour * (360 / 12)) - (Minute * (360 / 60 / 12)))) - 45,
round ((360 + (15 * (360 / 60)) - (Hour * (360 / 12)) - (Minute * (360 / 60 / 12)))) + 45, COLOR_CLOCK)
for Hours : 1 .. 12
drawline (X +
round (cosd (360 + (15 * (360 / 60)) - (Hours * (360 / 12))) * (Size - 13)),
Y +
round (sind (360 + (15 * (360 / 60)) - (Hours * (360 / 12))) * (Size - 13)),
X +
round (cosd (360 + (15 * (360 / 60)) - (Hours * (360 / 12))) * Size),
Y +
round (sind (360 + (15 * (360 / 60)) - (Hours * (360 / 12))) * Size), COLOR_CLOCK)
end for
for Mins : 1 .. 60
drawline (X +
round (cosd (360 + (15 * (360 / 60)) - (Mins * (360 / 60))) * (70)),
Y +
round (sind (360 + (15 * (360 / 60)) - (Mins * (360 / 60))) * (70)),
X +
round (cosd (360 + (15 * (360 / 60)) - (Mins * (360 / 60))) * 80),
Y +
round (sind (360 + (15 * (360 / 60)) - (Mins * (360 / 60))) * 80), COLOR_CLOCK)
end for
%SECOND HAND
% drawfillarc (X, Y, Size, Size, round (360 + (15 * (360 / 60)) - (Second * (360 / 60))) - 90,
% round (360 + (15 * (360 / 60)) - (Second * (360 / 60))) + 90, 12)
drawline (X +
round (cosd (360 + (15 * (360 / 60)) - (Second * (360 / 60))) * (Size - 75)),
Y +
round (sind (360 + (15 * (360 / 60)) - (Second * (360 / 60))) * (Size - 75
)),
X +
round (cosd (360 + (15 * (360 / 60)) - (Second * (360 / 60))) * (Size + 30)),
Y +
round (sind (360 + (15 * (360 / 60)) - (Second * (360 / 60))) * (Size + 30)), CLOCK_HAND_COLOR)
%minute hand
Draw.ThickLine (X +
round (cosd (360 + (15 * (360 / 60)) - (Minute * (360 / 60))) * (Size - 75)),
Y +
round (sind (360 + (15 * (360 / 60)) - (Minute * (360 / 60))) * (Size - 75
)),
X +
round (cosd (360 + (15 * (360 / 60)) - (Minute * (360 / 60))) * (Size + 10)),
Y +
round (sind (360 + (15 * (360 / 60)) - (Minute * (360 / 60))) * (Size + 10)), 2, CLOCK_HAND_COLOR)
%hour hand
Draw.ThickLine (X +
round (cosd (360 + (15 * (360 / 60)) - (Hour * (360 / 12)) - (Minute * (360 / 60 / 12))) * (Size div 2)),
Y +
round (sind (360 + (15 * (360 / 60)) - (Hour * (360 / 12)) - (Minute * (360 / 60 / 12))) * (Size div 2)),
X +
round (cosd (360 + (15 * (360 / 60)) - (Hour * (360 / 12)) - (Minute * (360 / 60 / 12))) * Size),
Y +
round (sind (360 + (15 * (360 / 60)) - (Hour * (360 / 12)) - (Minute * (360 / 60 / 12))) * Size), 2, CLOCK_HAND_COLOR)
drawoval (X, Y, 5, 5, COLOR_CLOCK)
drawfilloval (X, Y, 2, 2, 7)
end Draw_Clock_Face
%analog clock
var TimeOfDay : string
var Font1 := Font.New ("System:24")
var Date : string
setscreen ("graphics:280,280,nobuttonbar,offscreenonly")
colorback (7)
loop
cls
time (TimeOfDay)
Date := Time.Date
Draw_Clock_Face (100, maxx div 2, maxy div 2, TimeOfDay)
if strint (TimeOfDay (1 .. 2)) > 12 then
Font.Draw (intstr (strint (TimeOfDay (1 .. 2)) - 12) + TimeOfDay (3 .. *) + " PM", 1, 1, Font1, 0)
else
Font.Draw (TimeOfDay + " AM", 1, 1, Font1, 0)
end if
Font.Draw (Date (1 .. 9), maxx - 125, maxy - 20, Font1, 0)
View.Update
end loop
|