Цифровые часы
Первоначальный вариант выводил:
DrawText(#clock,19,
FormatDate("%hh:%ii:%ss", Date() ))
- в качестве индикации и использовался шрифт:
digital-7
Но возникла проблема с внедрением шрифта в разные системы.
Поэтому цифры от
0 до
9 заменены соответствующими изображениями.
Появилась возможность добавить свечение и сглаживание цифр (в первоначальном варианте - нет)
Выключить -
Esc
Часы/будильник -
правая кнопка мыши.
Для всех версий
PureBasic
Часы:
Будильник:
В архиве рабочий пример с
исходниками
Вариантов рабочего кода:
Enumeration
#Window_0
#im_fon=33
#im_fon_2
#Sou
#ggg
#img
#img2
#hh_min
#hh_pl
#m_min
#m_pl
EndEnumeration
Global ss, rez_hh.s, rez_mm.s, yy
InitMovie() ; Инициализациявидео библиотеки
UsePNGImageDecoder()
yy=25 ; начальная позиция индикации времени
ss=5100 ; начальная позиция индикации будильника
rez_hh.s="00" ; час будильник
rez_mm.s="00" ; минуты будильник
mm=0 ; минуты будильник
hh=0 ; час будильник
CatchImage(0, ?Im0, ?Im0End -?Im0)
CatchImage(1, ?Im1, ?Im1End -?Im1)
CatchImage(2, ?Im2, ?Im2End -?Im2)
CatchImage(3, ?Im3, ?Im3End -?Im3)
CatchImage(4, ?Im4, ?Im4End -?Im4)
CatchImage(5, ?Im5, ?Im5End -?Im5)
CatchImage(6, ?Im6, ?Im6End -?Im6)
CatchImage(7, ?Im7, ?Im7End -?Im7)
CatchImage(8, ?Im8, ?Im8End -?Im8)
CatchImage(9, ?Im9, ?Im9End -?Im9)
CatchImage(#im_fon, ?Im11, ?Im11End -?Im11)
LoadMovie (#Sou, "sound.mp3")
CatchImage(#ggg, ?Im44, ?Im44End -?Im44) ; индикация будильника
CatchImage(#im_fon_2,?Im66, ?Im66End -?Im66)
Procedure Clok() ; часы
StartDrawing( WindowOutput(0) )
rez.s=FormatDate("%hh:%ii:%ss", Date() )
in1.s=Mid(rez.s, 1, 1)
in2.s=Mid(rez.s, 2, 1)
in4.s=Mid(rez.s, 4, 1)
in5.s=Mid(rez.s, 5, 1)
in7.s=Mid(rez.s, 7, 1)
in8.s=Mid(rez.s, 8, 1)
DrawImage(ImageID(Val(in1.s)), 47, yy, 33, 51) ;час
DrawImage(ImageID(Val(in2.s)), 80, yy, 33, 51) ;час
DrawImage(ImageID(Val(in4.s)), 132, yy, 33, 51) ;минуты
DrawImage(ImageID(Val(in5.s)), 165, yy, 33, 51) ;минуты
DrawImage(ImageID(Val(in7.s)), 218, yy, 33, 51) ;секунда
DrawImage(ImageID(Val(in8.s)), 251, yy, 33, 51) ;секунда
StopDrawing()
EndProcedure
Procedure Alarm() ; будильник
StartDrawing( WindowOutput(0) )
c1.s=Mid(rez_hh.s, 1, 1)
c2.s=Mid(rez_hh.s, 2, 1)
c3.s=Mid(rez_mm.s, 1, 1)
c4.s=Mid(rez_mm.s, 2, 1)
DrawImage(ImageID(Val(c1.s)), 47, ss, 33, 51) ;час
DrawImage(ImageID(Val(c2.s)), 80, ss, 33, 51) ;час
DrawImage(ImageID(Val(c3.s)), 132, ss, 33, 51) ;минуты
DrawImage(ImageID(Val(c4.s)), 165, ss, 33, 51) ;минуты
DrawImage(ImageID(0), 218, ss, 33, 51) ;секунда
DrawImage(ImageID(0), 251, ss, 33, 51) ;секунда
StopDrawing()
EndProcedure
Procedure IsMouseOver(wnd) ; Эта процедура определяет находится ли курсор мышки над заданым окном или гаджетом
GetWindowRect_(wnd,re.RECT)
GetCursorPos_(pt.POINT)
Result.l = PtInRect_(@re, pt\x | (pt\y<<32) )
ProcedureReturn Result
EndProcedure
Procedure EventButton1(Event, Gadget, Type, ImageGadget)
Static Button
If Event=#WM_MOUSEMOVE ; Переместилась мышка
If IsMouseOver(GadgetID(#hh_min)) Or IsMouseOver(GadgetID(#hh_pl)) Or IsMouseOver(GadgetID(#m_min)) Or IsMouseOver(GadgetID(#m_pl)) Or IsMouseOver(GadgetID(#img2))
Button=1
SetCursor_(LoadCursor_(0,#IDC_HAND)) ; курсор рука
ElseIf Button=1
Button=0
EndIf
EndIf
EndProcedure
;{------------------Окно--------------------------------
hWnd =OpenWindow (#Window_0,0,0,341,144,"Окно",#PB_Window_BorderLess |#PB_Window_ScreenCentered)
SkinWin(hWnd, ImageID(#im_fon))
ImageGadget(#img, 323, 126, 11, 11, 0) ; индикация будильника
ButtonID=ImageGadget(#img2,24, 90, 290, 33, 0) ; выключить звучание будильника
ButtonID=ImageGadget(#hh_min, 24, 900, 50, 33, 0) ; - час
ButtonID=ImageGadget(#hh_pl, 114,900, 50, 33, 0) ; + час
ButtonID=ImageGadget(#m_min, 174, 900, 50, 33, 0) ; - минуты
ButtonID=ImageGadget(#m_pl, 264, 900, 50, 33, 0) ; + минуты
;}------------------------------------------------------
AddKeyboardShortcut(0, #PB_Shortcut_Escape, 1) ; выключить Esc
SetTimer_(WindowID(#Window_0),Event,100,@Alarm() )
;{-----------------Главный цикл-------------------------
Repeat
Event = WaitWindowEvent()
Window = EventWindow()
Gadget = EventGadget()
;-----перетягивание---------------------
If Event = #WM_LBUTTONDOWN
If Window=#Window_0
SendMessage_(WindowID(#Window_0),#WM_NCLBUTTONDOWN, #HTCAPTION,0)
EndIf
EndIf
;-----часы-----------------------------
If zeit$< >FormatDate("%ss", Date() )
zeit$=FormatDate("%ss", Date() )
Clok()
EndIf
;----совпадениу времени и будильника----------------------
If FormatDate("%hh:%ii:%ss", Date() )=rez_hh+":"+rez_mm.s+":00"
PlayMovie(#Sou,0)
EndIf
Select Event
Case #WM_RBUTTONUP ; нажата правая кнопка
min = min ! 1
If min
yy=5100 ; прячим время
ss=25 ; показать будильник
ResizeGadget(#hh_min,#PB_Ignore, 90, #PB_Ignore,#PB_Ignore) ; показать кнопки будильника
ResizeGadget(#hh_pl ,#PB_Ignore, 90, #PB_Ignore,#PB_Ignore) ; показать кнопки будильника
ResizeGadget(#m_min, #PB_Ignore, 90, #PB_Ignore,#PB_Ignore) ; показать кнопки будильника
ResizeGadget(#m_pl, #PB_Ignore, 90, #PB_Ignore,#PB_Ignore) ; показать кнопки будильника
ResizeGadget(#img2, #PB_Ignore, 900,#PB_Ignore,#PB_Ignore) ; скрыть кнопки
SkinWin(hWnd, ImageID(#im_fon_2)) ; одеть скин будильник
Else
yy=25 ; показать время
ss=5100 ; прячим будильник
ResizeGadget(#hh_min,#PB_Ignore,900, #PB_Ignore,#PB_Ignore) ; скрыть кнопки будильника
ResizeGadget(#hh_pl ,#PB_Ignore,900, #PB_Ignore,#PB_Ignore) ; скрыть кнопки будильника
ResizeGadget(#m_min, #PB_Ignore,900, #PB_Ignore,#PB_Ignore) ; скрыть кнопки будильника
ResizeGadget(#m_pl, #PB_Ignore,900, #PB_Ignore,#PB_Ignore) ; скрыть кнопки будильника
ResizeGadget(#img2, #PB_Ignore, 90, #PB_Ignore,#PB_Ignore) ; скрыть кнопки
SkinWin(hWnd, ImageID(#im_fon)) ; одеть скин время
EndIf
Case #PB_Event_Gadget
Select EventGadget()
;----------минус час------------------------
Case #hh_min
If hh>0 And hh<24
If hh<=10
hh=hh-1
rez_hh.s="0"+Str(hh)
ElseIf hh>10
hh=hh-1
rez_hh.s=Str(hh)
EndIf
Else
hh=23
rez_hh.s=Str(hh)
EndIf
If hh =0
SetGadgetState(#img,0 )
Else
SetGadgetState(#img,ImageID(#ggg) )
EndIf
;-----------плюс час------------------------
Case #hh_pl
If hh>=0 And hh<23
If hh<9
hh=hh+1
rez_hh.s="0"+Str(hh)
Else
hh=hh+1
rez_hh.s=Str(hh)
EndIf
Else
hh=0
rez_hh.s="0"+Str(hh)
EndIf
If hh =0
SetGadgetState(#img,0 )
Else
SetGadgetState(#img,ImageID(#ggg) )
EndIf
;----------минус минута-------------------------
Case #m_min
If mm>0 And mm<60
If mm<=10
mm=mm-1
rez_mm.s="0"+Str(mm)
Else
mm=mm-1
rez_mm.s=Str(mm)
EndIf
Else
mm=59
rez_mm.s=Str(mm)
EndIf
If mm =0
SetGadgetState(#img,0 )
Else
SetGadgetState(#img,ImageID(#ggg) )
EndIf
;------------плюс минута-----------------------
Case #m_pl
If mm>=0 And mm<59
If mm<9
mm=mm+1
rez_mm.s="0"+Str(mm)
Else
mm=mm+1
rez_mm.s=Str(mm)
EndIf
Else
mm=0
rez_mm.s="0"+Str(mm)
EndIf
If mm =0
SetGadgetState(#img,0 )
Else
SetGadgetState(#img,ImageID(#ggg) )
EndIf
Case #img2
StopMovie(#Sou)
EndSelect
EndSelect
EventButton1(Event, Gadget, Type, ImageGadget)
Until Event=#PB_Event_Menu And EventMenu() = 1
;}-------------------------------------------------------
DataSection
Im0:
IncludeBinary "0.png"
Im0End:
Im1:
IncludeBinary "1.png"
Im1End:
Im2:
IncludeBinary "2.png"
Im2End:
Im3:
IncludeBinary "3.png"
Im3End:
Im4:
IncludeBinary "4.png"
Im4End:
Im5:
IncludeBinary "5.png"
Im5End:
Im6:
IncludeBinary "6.png"
Im6End:
Im7:
IncludeBinary "7.png"
Im7End:
Im8:
IncludeBinary "8.png"
Im8End:
Im9:
IncludeBinary "9.png"
Im9End:
;----------------------------
Im11:
IncludeBinary "555-img.png"
Im11End:
Im44:
IncludeBinary "ggg.png" ; индикация будильника
Im44End:
Im66:
IncludeBinary "666.png"
Im66End:
EndDataSection