So habe an meinen Code etwas rum geschrieben.
Aktuelle fehlt noch:
- Einstellmenü
- verschiedene Sound
- Pause Timer einstellen (angefangen noch nicht beendet)
- Pause läuft nach Spielzeit
- Balken für Pause (vorbereitet)
Code
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=prog.ico
#AutoIt3Wrapper_Outfile=Spielzeit-Timer.exe
#AutoIt3Wrapper_Res_Description=Spielzeit-Timer
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_LegalCopyright=Oscar (www.autoit.de)/geändert SCCSSF
#AutoIt3Wrapper_Res_Language=1031
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#Region Includes
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <Sound.au3>
#include <StaticConstants.au3>
#include <Timers.au3>
#include <WinAPI.au3>
#include <WinAPIGdi.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <Misc.au3>
#include '_ProgressEx.au3'
#include '_DateiEx.au3'
#EndRegion Includes
#Region single
If _Singleton("Timer", 1) = 0 Then
Exit
EndIf
#EndRegion
#Region Optionen
Opt('MustDeclareVars', 1)
Opt('GUIOnEventMode', 1)
Opt('TrayMenuMode', 1)
Opt('GUIOnEventMode', 1)
#EndRegion Optionen
_GDIPlus_Startup()
#Region Konstanten deklarieren
Global Const $sAppTitle = 'Spielzeit-Timer'
Global Const $sAppVersion = '1.0.0.0'
Global Const $sAppDate = '20.02.2019'
Global Const $sAppAuthor = 'Oscar (www.autoit.de) / SCCCSF'
Global Const $sAppDir = @AppDataDir & '\TeaTimer\'
If Not FileExists($sAppDir) Then DirCreate($sAppDir)
Global Const $sInifile = $sAppDir & 'TeaTimer.ini'
Global $b7SegmentFont = _Segment7new()
Global $t7SegmentFont = DllStructCreate('byte[' & BinaryLen($b7SegmentFont) & ']')
DllStructSetData($t7SegmentFont, 1, $b7SegmentFont)
Global $h7SegmentFont = _WinAPI_AddFontMemResourceEx(DllStructGetPtr($t7SegmentFont), DllStructGetSize($t7SegmentFont))
Global $hUpBitmap = _GDIPlus_BitmapCreateFromMemory(_uppng())
Global $hDownBitmap = _GDIPlus_BitmapCreateFromMemory(_downpng())
Global $sSoundfile = @TempDir & '\glocke.mp3'
If Not FileExists($sSoundfile) Then _glocke(True, @TempDir)
Global $aSound = _SoundOpen($sSoundfile)
Global Const $iAppDPI = RegRead('HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics', 'AppliedDPI')
Global Const $iRed = 0, $iYellow = 60, $iGreen = 120, $iBlue = -150 ; Farbwerte/HUE gegenueber dem roten Standardwert (Werte von -180 bis +180 sind moeglich)
Global Const $iWidth = 240, $iHeight = 360
#EndRegion Konstanten deklarieren
#Region globale Variablen
Global $iTimerSeconds = IniRead($sInifile, 'Config', 'TimerSeconds', 600)
Global $iTimerStep = IniRead($sInifile, 'Config', 'TimerStep', 10) ; In der Inidatei kann man die Schrittweite (in Sekunden) fuer die Timereinstellung festlegen
Global $iTimerDiv = IniRead($sInifile, 'Config', 'TimerDiv', 5) ; In der Inidatei kann man die Schrittweite (in Sekunden) fuer die Timerdiverens festlegen
Global $bTimerOn = False, $iSeconds = $iTimerSeconds
#EndRegion globale Variablen
#Region Fenster erstellen
Global $hGui = GUICreate(StringFormat('%s v%-3.3s', $sAppTitle, $sAppVersion), $iWidth, $iHeight, -1, -1, -1)
;GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseMainGui')
GUISetBkColor(0x000000)
GUISetIcon(@ScriptDir & '\prog.ico', 0, $hGui)
Global $Setting_Menu = GUICtrlCreateMenu("Menü")
Global $Setting_Para = GUICtrlCreateMenuItem("Einstellungen", $Setting_Menu)
Global $Setting_exit = GUICtrlCreateMenuItem("Ende", $Setting_Menu)
GUICtrlSetOnEvent(-1, "_Exit")
Global $helpmenu = GUICtrlCreateMenu("?")
Global $Info = GUICtrlCreateMenuItem("Version", $helpmenu)
GUICtrlSetOnEvent(-1, "_showInfo")
Global $idTime = GUICtrlCreateLabel(StringFormat('%02d:%02d', Int($iTimerSeconds / 60), Mod($iTimerSeconds, 60)), 20, 12, $iWidth - 60, 44, $SS_CENTER)
GUICtrlSetColor(-1, 0x22FF22)
GUICtrlSetFont(-1, 40 / $iAppDPI * 80, 400, 0, 'Segment7')
Global $hGUi1 = GUICtrlCreateLabel("Spielzeit", 30, 80, 172, 33,$SS_CENTER)
GUICtrlSetColor(-1, 0xFEFF22)
GUICtrlSetFont(-1, 20)
Global $idTime1 = GUICtrlCreateLabel(StringFormat('%02d:%02d', Int(($iTimerSeconds- $iTimerDiv*60) /60 ), Mod($iTimerSeconds, 60)), 20, 120, $iWidth - 60, 44, $SS_CENTER)
GUICtrlSetColor(-1, 0x22FF22)
GUICtrlSetFont(-1, 40 / $iAppDPI * 80, 400, 0, 'Segment7')
Global $hGUi2 = GUICtrlCreateLabel("letzte Minute", 30, 158, 172, 33,$SS_CENTER)
GUICtrlSetColor(-1, 0xFEFF22)
GUICtrlSetFont(-1, 20)
Global $idTime2 = GUICtrlCreateLabel(StringFormat('%02d:%02d', Int($iTimerSeconds / 60), Mod($iTimerSeconds, 60)), 20, 200, $iWidth - 60, 44, $SS_CENTER)
GUICtrlSetColor(-1, 0x22FF22)
GUICtrlSetFont(-1, 40 / $iAppDPI * 80, 400, 0, 'Segment7')
Global $hGUi3 = GUICtrlCreateLabel("Pause", 30, 268, 172, 33,$SS_CENTER)
GUICtrlSetColor(-1, 0xFEFF22)
GUICtrlSetFont(-1, 20)
Global $idUp = GUICtrlCreatePic('', $iWidth - 34, 6, 24, 24)
GUICtrlSetOnEvent(-1, '_ChangeTimerSeconds')
Global $hBMP = _GDIPlus_BitmapCreateDIBFromBitmap($hUpBitmap)
_WinAPI_DeleteObject(GUICtrlSendMsg($idUp, $STM_SETIMAGE, $IMAGE_BITMAP, $hBMP))
_WinAPI_DeleteObject($hBMP)
Global $idDown = GUICtrlCreatePic('', $iWidth - 34, 34, 24, 24)
GUICtrlSetOnEvent(-1, '_ChangeTimerSeconds')
Global $hBMP = _GDIPlus_BitmapCreateDIBFromBitmap($hDownBitmap)
_WinAPI_DeleteObject(GUICtrlSendMsg($idDown, $STM_SETIMAGE, $IMAGE_BITMAP, $hBMP))
_WinAPI_DeleteObject($hBMP)
Global $idUpP = GUICtrlCreatePic('', $iWidth - 34, 197, 24, 24)
GUICtrlSetOnEvent(-1, '_ChangeTimerPauseSeconds')
Global $hBMP = _GDIPlus_BitmapCreateDIBFromBitmap($hUpBitmap)
_WinAPI_DeleteObject(GUICtrlSendMsg($idUpP, $STM_SETIMAGE, $IMAGE_BITMAP, $hBMP))
_WinAPI_DeleteObject($hBMP)
Global $idDownP = GUICtrlCreatePic('', $iWidth - 34, 225, 24, 24)
GUICtrlSetOnEvent(-1, '_ChangeTimerPauseSeconds')
Global $hBMP = _GDIPlus_BitmapCreateDIBFromBitmap($hDownBitmap)
_WinAPI_DeleteObject(GUICtrlSendMsg($idDownP, $STM_SETIMAGE, $IMAGE_BITMAP, $hBMP))
_WinAPI_DeleteObject($hBMP)
Global $aProgress1 = _ProgressEx_Create(10, 60, $iWidth - 20, 15, $PE_NOTEXT)
_ProgressEx_SetData($aProgress1, 100, $iGreen)
Global $aProgress2 = _ProgressEx_Create(10, 250, $iWidth - 20, 15, $PE_NOTEXT)
_ProgressEx_SetData($aProgress2, 100, -0)
Global $idStart = GUICtrlCreateButton('Reset', 10, 310, 50, 25)
GUICtrlSetFont(-1, 12 / $iAppDPI * 96, 600, 0, 'Tahoma')
GUICtrlSetOnEvent(-1, '_ResetTimer')
Global $idStop = GUICtrlCreateButton('Stop', 65, 310, 50, 25)
GUICtrlSetFont(-1, 12 / $iAppDPI * 96, 600, 0, 'Tahoma')
GUICtrlSetOnEvent(-1, '_StopTimer')
GUICtrlSetState($idStop, $GUI_DISABLE)
Global $idStart = GUICtrlCreateButton('Start', $iWidth - 120, 310, 110, 25, $BS_DEFPUSHBUTTON)
GUICtrlSetFont(-1, 12 / $iAppDPI * 96, 600, 0, 'Tahoma')
GUICtrlSetOnEvent(-1, '_StartTimer')
#EndRegion Fenster erstellen
#Region Fenster anzeigen und auf das Schliessen warten (der Rest ist funktionsgesteuert)
Global $aAccelKeys[2][2] = [['{UP}', $idUp], ['{DOWN}', $idDown]]
GUISetAccelerators($aAccelKeys)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_MOUSEWHEEL, '_WM_MOUSEWHEEL')
_Timer_SetTimer($hGui, 1000, '_ChangeTimer')
WinWaitClose($hGui)
Exit
#EndRegion Fenster anzeigen und auf das Schliessen warten (der Rest ist funktionsgesteuert)
#Region Funktionen
Func _CloseMainGui()
_Timer_KillAllTimers($hGui)
_WinAPI_RemoveFontMemResourceEx($h7SegmentFont)
$t7SegmentFont = 0
_GDIPlus_BitmapDispose($hUpBitmap)
_GDIPlus_BitmapDispose($hDownBitmap)
_GDIPlus_Shutdown()
_SoundClose($aSound)
IniWrite($sInifile, 'Config', 'TimerSeconds', $iTimerSeconds)
IniWrite($sInifile, 'Config', 'TimerStep', $iTimerStep)
IniWrite($sInifile, 'Config', 'TimerDiv', $iTimerDiv)
GUIDelete($hGui)
EndFunc ;==>_CloseMainGui
Func _ChangeTimer($hWnd, $iMsg, $iIDTimer, $iTime, $idTime1, $idTime2)
If Not $bTimerOn Then Return
$iSeconds -= 1
GUICtrlSetData($idTime, StringFormat('%02d:%02d', Int($iSeconds / 60), Mod($iSeconds, 60)))
If (($iSeconds -$iTimerDiv*60) /60) > 0 Then
GUICtrlSetData($idTime1, StringFormat('%02d:%02d', Int(($iSeconds- $iTimerDiv*60) / 60), Mod($iSeconds, 60)))
Else
GUICtrlSetData($idTime1, '00:00')
EndIf
_ProgressEx_SetData($aProgress1, 100 / $iTimerSeconds * $iSeconds, $iGreen)
If (($iSeconds -$iTimerDiv*60) /60) = 0 Then
_SoundPlay($aSound)
EndIf
If $iSeconds = 0 Then
$bTimerOn = False
_SoundPlay($aSound)
#MsgBox($MB_OK + $MB_ICONINFORMATION, $sAppTitle, 'Die eingestellte Zeit ist abgelaufen.', 0, $hGui)
#_ResetTimer()
EndIf
EndFunc ;==>_ChangeTimer
Func _ChangeTimerPause($hWnd, $iMsg, $iIDTimer, $iTime, $idTime1, $idTime2)
If Not $bTimerOnPause Then Return
$iSecondsPause -= 1
GUICtrlSetData($idTimePause, StringFormat('%02d:%02d', Int($iSeconds / 60), Mod($iSeconds, 60)))
If (($iSecondsPause -$iTimerDiv*60) /60) > 0 Then
GUICtrlSetData($idTime2, StringFormat('%02d:%02d', Int($iSeconds / 60), Mod($iSeconds, 60)))
Else
GUICtrlSetData($idTime2, '00:00')
EndIf
_ProgressEx_SetData($aProgressPause, 100 / $iTimerSeconds * $iSecondsPause, $iGreen)
If (($iSecondsPause -$iTimerDiv*60) /60) = 0 Then
_SoundPlay($aSound)
EndIf
If $iSeconds = 0 Then
$bTimerOn = False
_SoundPlay($aSound)
#MsgBox($MB_OK + $MB_ICONINFORMATION, $sAppTitle, 'Die eingestellte Zeit ist abgelaufen.', 0, $hGui)
#_ResetTimer()
EndIf
EndFunc ;==>_ChangeTimerPause
Func _WM_MOUSEWHEEL($hWnd, $iMsg, $wParam, $lParam)
Local $iWheel = _WinAPI_HiWord($wParam) / 120 ; down = -1, up = 1
Local $aGuiInfo = GUIGetCursorInfo($hGui)
Switch $aGuiInfo[4]
Case $idTime
If $bTimerOn Then Return
$iTimerSeconds += $iWheel * $iTimerStep
If $iTimerSeconds < $iTimerStep Then $iTimerSeconds = 6000 - $iTimerStep
If $iTimerSeconds > 6000 - $iTimerStep Then $iTimerSeconds = $iTimerStep
$iSeconds = $iTimerSeconds
GUICtrlSetData($idTime, StringFormat('%02d:%02d', Int($iSeconds / 60), Mod($iSeconds, 60)))
Return
Case Else
Return $GUI_RUNDEFMSG
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>_WM_MOUSEWHEEL
Func _ChangeTimerSeconds()
If $bTimerOn Then Return
$iTimerSeconds += (@GUI_CtrlId = $idUp ? 1 : -1) * $iTimerStep
If $iTimerSeconds < $iTimerStep Then $iTimerSeconds = 6000 - $iTimerStep
If $iTimerSeconds > 6000 - $iTimerStep Then $iTimerSeconds = $iTimerStep
$iSeconds = $iTimerSeconds
GUICtrlSetData($idTime, StringFormat('%02d:%02d', Int($iSeconds / 60), Mod($iSeconds, 60)))
GUICtrlSetData($idTime1, StringFormat('%02d:%02d', Int(($iSeconds- $iTimerDiv*60) / 60), Mod($iSeconds, 60)))
EndFunc ;==>_ChangeTimerSeconds
Func _ChangeTimerSecondsPause()
If $bTimerOn Then Return
$iTimerSeconds += (@GUI_CtrlId = $idUpP ? 1 : -1) * $iTimerStep
If $iTimerSeconds < $iTimerStep Then $iTimerSeconds = 6000 - $iTimerStep
If $iTimerSeconds > 6000 - $iTimerStep Then $iTimerSeconds = $iTimerStep
$iSeconds = $iTimerSeconds
GUICtrlSetData($idTime2, StringFormat('%02d:%02d', Int($iSeconds / 60), Mod($iSeconds, 60)))
EndFunc ;==>_Ch
Func _ResetTimer()
$iSeconds = $iTimerSeconds
GUICtrlSetData($idTime, StringFormat('%02d:%02d', Int($iSeconds / 60), Mod($iSeconds, 60)))
GUICtrlSetData($idTime1, StringFormat('%02d:%02d', Int(($iSeconds- $iTimerDiv*60) / 60 ), Mod($iSeconds, 60)))
GUICtrlSetData($idTime2, StringFormat('%02d:%02d', Int($iSeconds / 60), Mod($iSeconds, 60)))
$bTimerOn = False
GUICtrlSetState($idStart, $GUI_ENABLE)
GUICtrlSetState($idStop, $GUI_DISABLE)
_ProgressEx_SetData($aProgress1, 100, $iGreen)
EndFunc ;==>_ResetTimer
Func _StopTimer()
$bTimerOn = False
GUICtrlSetState($idStart, $GUI_ENABLE)
GUICtrlSetState($idStop, $GUI_DISABLE)
;if $idTime
EndFunc ;==>_StopTimer
Func _StartTimer()
$bTimerOn = True
GUICtrlSetState($idStart, $GUI_DISABLE)
GUICtrlSetState($idStop, $GUI_ENABLE)
EndFunc ;==>_StartTimer
#EndRegion Funktionen
#Region Menue
Func _Showinfo()
MsgBox(0, "Info", "Version "& $sAppVersion & @CRLF & $sAppDate & @CRLF & $sAppAuthor)
EndFunc ;==>_Showinfo
Func _Exit()
_CloseMainGui()
EndFunc ;==>_Exit
Func _Minimize()
TraySetState(1)
GUISetState(@SW_HIDE)
EndFunc ;==>_Minimize
Func _Restore()
TraySetState(2)
GUISetState(@SW_SHOW)
EndFunc ;==>_Restore
#EndRegion menue
Alles anzeigen