forum.technik-hobby.de
Zeit ändern per MouseWheel - Druckversion

+- forum.technik-hobby.de (https://forum.technik-hobby.de)
+-- Forum: AutoIt (https://forum.technik-hobby.de/forum-1.html)
+--- Forum: Scripte (https://forum.technik-hobby.de/forum-3.html)
+--- Thema: Zeit ändern per MouseWheel (/thread-36.html)



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