Doppelklickfunktion für Labels

  • Hallo,

    ich habe selber eine kleine Funktion erstellt, mit der man Linklabel Klicke richtig auswerten kann.
    Wie kann ich genau die selbe Funktion machen, um doppelklicks abzufangen?
    Also nur true und false returns.

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    AutoIt Version: 3.3.1.0 (beta)
    Author: myName

    Script Function:
    Template AutoIt script.

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("Test", 138, 52)
    $Label1 = GUICtrlCreateLabel("Klick mich!", 40, 16, 55, 17)
    GUICtrlSetFont(-1, 8, 400, 4, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlSetCursor(-1, 0)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Label1
    $LabelState = _Label_OnClick($Form1, $Label1)
    If $LabelState = True Then
    MsgBox(0, "", "Sie haben mich geklickt :P")
    EndIf

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

    EndSwitch
    WEnd

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

    Func _Label_OnClick($hWnd, $Control_Hwnd)
    GUICtrlSetColor($Control_Hwnd, 0xE51251)
    $Cursorinfo99 = GUIGetCursorInfo($hWnd)
    If IsArray($Cursorinfo99) Then
    While $Cursorinfo99[4] = $Control_Hwnd
    $Cursorinfo99 = GUIGetCursorInfo($hWnd)
    If Not $Cursorinfo99[2] Then
    GUICtrlSetColor($Control_Hwnd, 0x0000E4)
    Return True
    ExitLoop
    EndIf
    Sleep(10)
    WEnd
    EndIf
    GUICtrlSetColor($Control_Hwnd, 0x0000E4)
    Return False
    EndFunc ;==>_Label_OnClick

    [/autoit]
  • Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Opt("GUIOnEventMode", 1)
    Opt("MouseCoordMode", 0) ; Maus-Koordinaten relativ zum Fenster
    Global $start
    Global $n = 0
    Global $MousePos = True
    Global $pos
    Global $clickspeed = RegRead("HKEY_CURRENT_USER\Control Panel\Mouse", "DoubleClickSpeed")

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

    $Form1 = GUICreate("Test", 138, 52)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_PRIMARYdown')
    GUISetOnEvent($GUI_EVENT_PRIMARYUP, '_PRIMARYup')

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

    $Label1 = GUICtrlCreateLabel("Klick mich!", 40, 16, 55, 17)
    GUICtrlSetOnEvent(-1, '_Label1')
    GUICtrlSetFont(-1, 8, 400, 4, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlSetCursor(-1, 0)
    $Label2 = GUICtrlCreateLabel("Klick mich doppelt!", 20, 36)
    GUICtrlSetFont(-1, 8, 400, 4, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlSetCursor(-1, 0)
    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(3000)
    WEnd

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

    Func Form1Close()
    Exit
    EndFunc ;==>Form1Close

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

    Func _Label1()
    $LabelState = _Label_OnClick($Form1, $Label1)
    If $LabelState = True Then
    MsgBox(0, "", "Sie haben mich geklickt :P")
    EndIf
    EndFunc ;==>_Label1

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

    Func _PRIMARYdown()
    $pos = MouseGetPos()
    Select
    Case _CheckCtrlDblClick($Form1, $Label2)
    _Lbl_2_DblClick()
    EndSelect
    EndFunc ;==>_PRIMARYdown

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

    Func _PRIMARYup()
    If $MousePos Then
    If $n = 2 Then
    $n = 0
    Else
    $start = TimerInit()
    EndIf
    EndIf
    EndFunc ;==>_PRIMARYup

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

    Func _Label_OnClick($hWnd, $Control_Hwnd)
    GUICtrlSetColor($Control_Hwnd, 0xE51251)
    $Cursorinfo99 = GUIGetCursorInfo($hWnd)
    If IsArray($Cursorinfo99) Then
    While $Cursorinfo99[4] = $Control_Hwnd
    $Cursorinfo99 = GUIGetCursorInfo($hWnd)
    If Not $Cursorinfo99[2] Then
    GUICtrlSetColor($Control_Hwnd, 0x0000E4)
    Return True
    ExitLoop
    EndIf
    Sleep(10)
    WEnd
    EndIf
    GUICtrlSetColor($Control_Hwnd, 0x0000E4)
    Return False
    EndFunc ;==>_Label_OnClick

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

    Func _Lbl_2_DblClick()
    MsgBox(0, '', 'Doubleclick Label 2')
    EndFunc ;==>_Lbl_2_DblClick

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

    Func _CheckCtrlDblClick($GUI, $CTRL)
    Local $CtrlPos = ControlGetPos($GUI, '', $CTRL)
    If ($pos[0] >= $CtrlPos[0] And $pos[0] <= $CtrlPos[0] + $CtrlPos[2]) And _
    ($pos[1] >= $CtrlPos[1] + 20 And $pos[1] <= $CtrlPos[1] + 20 + $CtrlPos[3]) Then
    $n += 1
    $MousePos = True
    If $n = 2 And (TimerDiff($start) < $clickspeed) Then
    Return True
    Else
    $start = TimerInit()
    $n = 1
    EndIf
    EndIf
    EndFunc ;==>_CheckCtrlDblClick

    [/autoit]

    Quelle: Doppelklick für (fast) jedes Control