Уроки PureBasic

Categories

Other Sites

Other Sites

Other Sites



             Поиск по сайту

     

                


    Оставить мне сообщение:



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

Уроки PureBasic

Первоначальный вариант выводил:   DrawText(#clock,19,FormatDate("%hh:%ii:%ss", Date() ))
- в качестве индикации и использовался шрифт:  digital-7
Но возникла проблема с внедрением шрифта в разные системы.

Поэтому цифры от 0 до 9 заменены соответствующими изображениями.
Появилась возможность добавить свечение и сглаживание цифр (в первоначальном варианте - нет)

Выключить - Esc
Часы/будильник - правая кнопка мыши.

Для всех версий PureBasic


Часы:


digital_clock


Будильник:


digital_clock


Уроки 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 </plaintext> </div><br><br><br><br> <br><br> </div> </div> <!-- copyright (t4) --><div align="center">Используются технологии <a href="http://www.ucoz.ru/" title="Создать сайт бесплатно"><b>uCoz</b></a><br /></div><!-- /copyright --> </body> </html>