Advertisement
OgreVorbis

Nixie Timer

Nov 19th, 2021 (edited)
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. #DefaultTime = 27
  3. #ImageGap = 32
  4. #Offset = 42
  5. #ClockFramePath = "./Nixie/"
  6.  
  7.  
  8. Macro Pos(string,position)
  9.     Val(Mid(string,position+1,1))
  10. EndMacro
  11.  
  12. HowLong = Val(InputRequester("Tea Timer", "Enter time in minutes (1 - 59):", Str(#DefaultTime)))
  13. If HowLong < 1
  14.     HowLong = #DefaultTime
  15. ElseIf HowLong > 59
  16.     MessageRequester("Tea Timer", "That is not a valid time. It must be between 1 and 59 minutes.", #PB_MessageRequester_Warning)
  17.     HowLong = 59
  18. EndIf
  19.  
  20. UsePNGImageDecoder()
  21. For i = 0 To 9
  22.     LoadImage(i, #ClockFramePath + Str(i) + ".png")
  23. Next
  24. LoadImage(10, #ClockFramePath + "blank.png")
  25. ; IMAGE 11 IS IMAGE FOR DRAWING CLOCK REALTIME
  26. LoadImage(12, #ClockFramePath + "base.png")
  27.  
  28. ;ExamineDesktops()
  29. SystemParametersInfo_(#SPI_GETWORKAREA, 0, @DesktopWorkArea.RECT, 0)
  30. OpenWindow(0, 0, DesktopWorkArea\Bottom - (ImageHeight(0) + ImageHeight(12)), ImageWidth(12), ImageHeight(0) + ImageHeight(12), "Tube Timer", #PB_Window_BorderLess)
  31. SetWindowColor(0, #Magenta)
  32. SetWindowLong_(WindowID(0), #GWL_EXSTYLE, #WS_EX_LAYERED | #WS_EX_TOPMOST)
  33. SetLayeredWindowAttributes_(WindowID(0), #Magenta, 0, #LWA_COLORKEY)
  34. ImageGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), 0)
  35. CreateImage(11, WindowWidth(0), WindowHeight(0))
  36. AddWindowTimer(0, 0, 250)
  37.  
  38. StartTime = Date()
  39. EndTime = AddDate(StartTime, #PB_Date_Minute, HowLong)
  40. FlashDone = #False
  41. TubePos = ImageWidth(0) + #ImageGap
  42.  
  43. Repeat
  44.     Event = WaitWindowEvent(10)
  45.    
  46.     Select Event
  47.         Case #WM_LBUTTONDOWN
  48.             MouseDown = #True
  49.             OffsetX = WindowMouseX(0)
  50.             OffsetY = WindowMouseY(0)
  51.         Case #WM_LBUTTONUP
  52.             MouseDown = #False
  53.         Case #WM_MOUSEMOVE
  54.             If MouseDown
  55.                 ResizeWindow(0, DesktopMouseX() - OffsetX, DesktopMouseY() - OffsetY, #PB_Ignore, #PB_Ignore)
  56.             EndIf
  57.         Case #PB_Event_Timer
  58.             If EventTimer() = 0
  59.                 MinutesRemain = Minute(EndTime - Date())
  60.                 SecondsRemain = Second(EndTime - Date())
  61.                 If MinutesRemain < 1 And SecondsRemain < 1
  62.                     Beep_(1200, 100)
  63.                     If FlashDone = #False
  64.                         StartDrawing(ImageOutput(11))
  65.                             Box(0, 0, ImageWidth(11), ImageHeight(11), #Magenta)
  66.                             DrawImage(ImageID(12), 0, ImageHeight(11) - ImageHeight(12))
  67.                             DrawImage(ImageID(0), #Offset, 0)
  68.                             DrawImage(ImageID(0), #Offset + TubePos, 0)
  69.                             DrawImage(ImageID(10), #Offset + (TubePos * 2), 0)
  70.                             DrawImage(ImageID(0), #Offset + (TubePos * 3), 0)
  71.                             DrawImage(ImageID(0), #Offset + (TubePos * 4), 0)
  72.                         StopDrawing()
  73.                         FlashDone = #True
  74.                     Else
  75.                         StartDrawing(ImageOutput(11))
  76.                             Box(0, 0, ImageWidth(11), ImageHeight(11), #Magenta)
  77.                             DrawImage(ImageID(12), 0, ImageHeight(11) - ImageHeight(12))
  78.                             For i = 0 To 4
  79.                                 DrawImage(ImageID(10), #Offset + (TubePos * i), 0)
  80.                             Next
  81.                         StopDrawing()
  82.                         FlashDone = #False
  83.                     EndIf
  84.                 Else
  85.                     ToDispMin.s = Str(MinutesRemain)
  86.                     ToDispSec.s = Str(SecondsRemain)
  87.                     If MinutesRemain < 10 : ToDispMin = "0" + Str(MinutesRemain) : EndIf
  88.                     If SecondsRemain < 10 : ToDispSec = "0" + Str(SecondsRemain) : EndIf
  89.                     StartDrawing(ImageOutput(11))
  90.                         Box(0, 0, ImageWidth(11), ImageHeight(11), #Magenta)
  91.                         DrawImage(ImageID(12), 0, ImageHeight(11) - ImageHeight(12))
  92.                         DrawImage(ImageID(Pos(ToDispMin,0)), #Offset, 0)
  93.                         DrawImage(ImageID(Pos(ToDispMin,1)), #Offset + TubePos, 0)
  94.                         DrawImage(ImageID(10), #Offset + (TubePos * 2), 0)
  95.                         DrawImage(ImageID(Pos(ToDispSec,0)), #Offset + (TubePos * 3), 0)
  96.                         DrawImage(ImageID(Pos(ToDispSec,1)), #Offset + (TubePos * 4), 0)
  97.                     StopDrawing()
  98.                 EndIf
  99.                 SetGadgetState(0, ImageID(11))
  100.             EndIf
  101.     EndSelect
  102.    
  103. Until Event = #PB_Event_CloseWindow
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement