_Timers_SetTimer mit Parameterübergabe!

  • Bis jetzt konnte man bei einer_Timer_SetTimer-Funtion keine Parameter übergeben. Nun ändert sich das! Mit der folgenden UDF "TimerEx" kann man Arrays, Variablen und sonstige Werte übergeben! Bis zu 5 Parameter sind möglich.

    TimerEx.au3
    [autoit]

    #Include <Timers.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $zTimer[1][6]

    [/autoit] [autoit][/autoit] [autoit]

    ;=============================================================================
    ; Function: _TimerEx_SetTimer($zWnd,$zTime,$zFunction,$zPar_0=-1,$zPar_1=-1,$zPar_2=-1,$zPar_3=-1,$zPar_4=-1)
    ; Parameter: $zWnd = Handle zu dem Fenster, welches zu dem Timer gehört. Dieses Fenster muss zu dem aufgerufenen Thread gehören
    ; $zTime = Legt den Timeout Wert in Millisekunden fest
    ; $zFunction = die zu benachrichtigende Funktion wenn der Timeout Wert verstrichen ist
    ; $zPar_0 = 1. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
    ; $zPar_1 = 2. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
    ; $zPar_2 = 3. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
    ; $zPar_3 = 4. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
    ; $zPar_4 = 5. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
    ; Return: Erfolg: Integerkennung des neuen Timers
    ; Fehler: 0
    ; Notes: Erweitert die "_Timer_SetTimer"-Funtion mit Parameterübergabe
    ;=============================================================================
    func _TimerEx_SetTimer($zWnd,$zTime,$zFunction,$zPar_0=-1,$zPar_1=-1,$zPar_2=-1,$zPar_3=-1,$zPar_4=-1)
    $zId = _Timer_SetTimer($zWnd, $zTime, "_TimerEx_Call")
    If UBound($zTimer) < $zId-1000 then ReDim $zTimer[$zId-1000][6]
    $zTimer[$zId-1001][0] = $zFunction
    $zTimer[$zId-1001][1] = $zPar_0
    $zTimer[$zId-1001][2] = $zPar_1
    $zTimer[$zId-1001][3] = $zPar_2
    $zTimer[$zId-1001][4] = $zPar_3
    $zTimer[$zId-1001][5] = $zPar_4
    return $zId
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;=============================================================================
    ; Function: _TimerEx_SetParameter($zId,$zPar_0=-1,$zPar_1=-1,$zPar_2=-1,$zPar_3=-1,$zPar_4=-1)
    ; Parameter: $zId = ID des Timers, welcher von _TimerEx_SetTimer zurückgegeben wird.
    ; $zPar_0 = 1. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
    ; $zPar_1 = 2. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
    ; $zPar_2 = 3. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
    ; $zPar_3 = 4. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
    ; $zPar_4 = 5. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
    ; Notes: Setzt die Parameter neu!
    ;=============================================================================
    func _TimerEx_SetParameter($zId,$zPar_0=-1,$zPar_1=-1,$zPar_2=-1,$zPar_3=-1,$zPar_4=-1)
    $zTimer[$zId-1001][1] = $zPar_0
    $zTimer[$zId-1001][2] = $zPar_1
    $zTimer[$zId-1001][3] = $zPar_2
    $zTimer[$zId-1001][4] = $zPar_3
    $zTimer[$zId-1001][5] = $zPar_4
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;==============================================================================
    ; Folgende Funtionen sollten nicht aufgerufen werden!

    [/autoit] [autoit][/autoit] [autoit]

    func _TimerEx_Call($hWnd, $Msg, $iIDTimer, $dwTime)
    Select
    Case $zTimer[$iIDTimer-1001][1] = -1
    Execute($zTimer[$iIDTimer-1001][0] & "()")
    Case $zTimer[$iIDTimer-1001][2] = -1
    Execute($zTimer[$iIDTimer-1001][0] & "("&$zTimer[$iIDTimer-1001][1]&")")
    Case $zTimer[$iIDTimer-1001][3] = -1
    Execute($zTimer[$iIDTimer-1001][0] & "("&$zTimer[$iIDTimer-1001][1]&","&$zTimer[$iIDTimer-1001][2]&")")
    Case $zTimer[$iIDTimer-1001][4] = -1
    Execute($zTimer[$iIDTimer-1001][0] & "("&$zTimer[$iIDTimer-1001][1]&","&$zTimer[$iIDTimer-1001][2]&","&$zTimer[$iIDTimer-1001][3]&")")
    Case $zTimer[$iIDTimer-1001][5] = -1
    Execute($zTimer[$iIDTimer-1001][0] & "("&$zTimer[$iIDTimer-1001][1]&","&$zTimer[$iIDTimer-1001][2]&","&$zTimer[$iIDTimer-1001][3]&","&$zTimer[$iIDTimer-1001][4]&")")
    Case Else
    Execute($zTimer[$iIDTimer-1001][0] & "("&$zTimer[$iIDTimer-1001][1]&","&$zTimer[$iIDTimer-1001][2]&","&$zTimer[$iIDTimer-1001][3]&","&$zTimer[$iIDTimer-1001][4]&","&$zTimer[$iIDTimer-1001][5]&")")
    EndSelect
    EndFunc

    [/autoit]
    Spoiler anzeigen
    [autoit]

    #Include <TimerEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $hWnd = GUICreate("Test")

    [/autoit] [autoit][/autoit] [autoit]

    Local $var,$Par = 2, $Array[2] = ["hello",""]
    ; Als Parameter werden die Variable $var , der Integer e und eine Array übergeben
    _TimerEx_SetTimer($hWnd,1000,"_call","$var",$Par,3,"$Array")

    [/autoit] [autoit][/autoit] [autoit]

    while 1
    $var += 1
    Sleep(100)
    wend

    [/autoit] [autoit][/autoit] [autoit]

    func _call($a,$b,$c,$d)
    ConsoleWrite($a & "," & $b & "," & $c & "," & $d[0] &@lf)
    EndFunc

    [/autoit]