Просмотров: 3227 | Дата: 19.04.2024 | Коментарии (0)

Цифровые часы





Первоначальный вариант выводил:
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

Скачать архив 










Сайт посвящён языку программирования PureBasic — коммерческий компилятор языка программирования, использующего синтаксис BASIC. Предназначен для создания кроссплатформенных приложений для AmigaOS, Linux, Microsoft Windows, Windows NT и Mac OS X. Разработан компанией Fantaisie Software.