XIncludeFile "Inc_MIDI.pbi" hOutput.l *PM.PB_MIDI = PB_MIDI_Create() *PM\OpenOutputDevice(-1) *PM\ProgramChange(9, 1) Global Lamp.l, BPM.l BPM = 60 Procedure WindowCallback(WindowID.l, EventID.l, wParam.l, lParam.l) Shared BPM Select EventID Case #WM_LButtonDown ReleaseCapture_() SendMessage_(WindowID, #WM_NCLBUTTONDOWN, #HTCAPTION, 0) EndSelect ProcedureReturn #PB_ProcessPureBasicEvents EndProcedure WinID.l = OpenWindow(#PB_Any, 0, 0, 138, 239, #PB_Window_ScreenCentered | #PB_Window_BorderLess, "Metronom") If WinID SetWindowCallback(@WindowCallback()) hSkin.l = CatchFastSkin(?Skin) SkinWinFast(WindowID(WinID), hSkin) If CreateGadgetList(WindowID(WinID)) GadBPMtxt.l = TextGadget(#PB_Any, 55, 160, 30, 16, Str(BPM), #PB_Text_Border | #PB_Text_Center) GadBPM.l = TrackBarGadget(#PB_Any, 20, 180, 100, 18, 20, 220) SetGadgetState(GadBPM, BPM) minTime = ElapsedMilliseconds() Lamp = #True Repeat a = ElapsedMilliseconds() If a + 20>= minTime + Time Lamp = #True EndIf If a + 20 >= minTime + Time / 2 Lamp = #False EndIf If a => minTime + Time *PM\NoteOff(9, 42, 0) minTime + Time *PM\NoteOn(9, 42, 127) Lamp = #True EndIf StartDrawing(WindowOutput()) If Lamp Circle(45, 140, 5, $FF) Else Circle(45, 140, 5, 0) EndIf StopDrawing() BPM = GetGadgetState(GadBPM) SetGadgetText(GadBPMtxt, Str(BPM)) Time = 60000 / BPM EventID.l = WindowEvent() Select EventID Case #PB_EventCloseWindow Break Case #WM_KeyDown Select EventwParam() Case #VK_Escape Break EndSelect Case 0 Delay(1) EndSelect ForEver EndIf EndIf *PM\Kill() DataSection Skin: IncludeBinary "Metronom.fsk" EndDataSection ; jaPBe Version=2.5.4.22 ; Build=5 ; Language=0x0000 Language Neutral ; FirstLine=0 ; CursorPosition=28 ; UseIcon=Metronom.ico ; ExecutableFormat=Windows ; Executable=C:\Programme\PureBasic\Programme\Projekte\Metronom\Metronom.exe ; DontSaveDeclare ; EOF