Zeit ändern per MouseWheel - Gorathan - 21.06.2018
Für meine Digitaluhr habe ich ja die Alarmzeit per MouseWheel einstellbar gemacht.
Falls ihr so etwas auch machen wollt, hier mal ein kleines, kommentiertes Minimal-Beispiel:
#include <GUIConstantsEx.au3>
#include <WinAPIGdi.au3>
#include <WindowsConstants.au3>
Global $hGui = GUICreate('Zeit ändern per MouseWheel', 350, 200)
Global $aidClock[3]
For $i = 0 To 2
$aidClock[$i] = GUICtrlCreateLabel('00', 60 + $i * 80, 20, 50, 44)
GUICtrlSetFont(-1, 32, 800, 0, 'Courier New')
Next
GUICtrlCreateLabel(':', 112, 20, 26, 44)
GUICtrlSetFont(-1, 32, 400, 0, 'Courier New')
GUICtrlCreateLabel(':', 192, 20, 26, 44)
GUICtrlSetFont(-1, 32, 400, 0, 'Courier New')
GUISetState()
GUIRegisterMsg($WM_MOUSEWHEEL, '_WM_MOUSEWHEEL')
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Func _WM_MOUSEWHEEL($hWnd, $iMsg, $wParam, $lParam)
Local Const $aMaxVal[3] = [23, 59, 59], $iWheelDelta = 120
Local $iWheel, $aGuiInfo, $iIndex, $iValue
$iWheel = _WinAPI_HiWord($wParam) / $iWheelDelta ; HiWord(wParam) / WheelDelta ergibt down = -1, up = 1
$aGuiInfo = GUIGetCursorInfo($hWnd) ; $aGuiInfo[4] enthaelt die Ctrl-ID vom Control unter dem Mauszeiger
$iIndex = $aGuiInfo[4] - $aidClock[0] ; minus der Ctrl-ID vom ersten Label ergibt 0...2 fuer die Clock-Labels
If $iIndex < 0 Or $iIndex > 2 Then Return $GUI_RUNDEFMSG ; wenn Mauszeiger ausserhalb, dann Funktion verlassen
$iValue = GUICtrlRead($aidClock[$iIndex]) + $iWheel ; Wert auslesen und Wheelwert (-1 oder 1) addieren
If $iValue > $aMaxVal[$iIndex] Then $iValue = 0 ; wenn neuer Wert groesser als Maximalwert, dann 0
If $iValue < 0 Then $iValue = $aMaxVal[$iIndex] ; wenn neuer Wert kleiner als 0, dann Maximalwert
_WinAPI_LockWindowUpdate($hWnd) ; WindowUpdate blockieren (verhindert das flackern beim aendern der Werte)
GUICtrlSetData($aidClock[$iIndex], StringFormat('%02i', $iValue)) ; neuen Wert setzen
_WinAPI_LockWindowUpdate(0) ; WindowUpdate wieder freigeben
Return $GUI_RUNDEFMSG
EndFunc ;==>_WM_MOUSEWHEEL
|