Listbox Eintrag

  • Hallo,

    habe folgendes Problem.
    In meiner Listbox sind Einträge aufgelistet.
    Wenn ein Eintrag gewählt wurde,
    dann soll per Doppelklick eine Funktion gestartet werden.

    Momentan geht das nur per Klick und Return!

    Spoiler anzeigen
    [autoit]


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

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

    $Form1 = GUICreate("Form1", 615, 438, 192, 124)
    $List1 = GUICtrlCreateList("", 376, 32, 201, 348)
    GUICtrlSetData(-1, "Start|Ende|")
    GUICtrlSetFont(-1, 12, 400, 0, "Verdana")
    Global $Dummy = GUICtrlCreateDummy()
    Global $AccelKeys[1][2] = [["{Enter}", $Dummy]]
    GUISetAccelerators($AccelKeys)
    GUISetState(@SW_SHOW)

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

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

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

    Case $List1
    _Menu1()
    ;~ Case $Dummy
    ;~ _Menu1()

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

    EndSwitch
    WEnd

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

    Func _Menu1()
    Switch GUICtrlRead($List1)
    Case "Start"
    MsgBox(0, "", "Start")
    Case "Ende"
    MsgBox(0, "", "Ende")

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

    EndSwitch
    EndFunc ;==>_Menu1

    [/autoit]

    Auch wenn die Pfeiltasten bewegt werden geht es nicht.
    Also selektieren bevor geklickt wird!

    Am besten wäre alles zusammen:

    1. Mit der Tastatur (Pfeiltasten + Return) (das geht bereits Case $Dummy
    2. Mit der Maus Doppelklick: 1 Klick Auswahl 2. Klick Start
    und
    3. Maus über EIntrag bewegen (Farbe-markiert) und dann direkt per Klick starten!

    ich weiß, viele Wünsche auf einmal...

    Liebe Grüße
    Ilse ;)

    • Offizieller Beitrag

    Hier mal als Beispiel:

    Spoiler anzeigen
    [autoit]


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

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

    $Form1 = GUICreate("Form1", 615, 438, 192, 124)
    $List1 = GUICtrlCreateList("", 376, 32, 201, 348)
    GUICtrlSetData(-1, "Start|Ende|")
    GUICtrlSetFont(-1, 12, 400, 0, "Verdana")
    Global $Dummy = GUICtrlCreateDummy()
    Global $AccelKeys[1][2] = [["{Enter}", $Dummy]]
    GUISetAccelerators($AccelKeys)
    GUISetState(@SW_SHOW)
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

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

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

    ;~ Case $List1
    ;~ _Menu1()
    ;~ Case $Dummy
    ;~ _Menu1()

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

    EndSwitch
    WEnd

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

    Func _Menu1()
    Switch GUICtrlRead($List1)
    Case "Start"
    MsgBox(0, "", "Start")
    Case "Ende"
    MsgBox(0, "", "Ende")

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

    EndSwitch
    EndFunc ;==>_Menu1

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($List1) Then $hWndListBox = GUICtrlGetHandle($List1)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $List1, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK ; Sent when the user double-clicks a string in a list box
    ToolTip('Doppelklick' & @CRLF & GUICtrlRead($List1))
    AdlibRegister('_CloseDblClk', 1000)
    EndSwitch
    EndSwitch
    ; Proceed the default AutoIt3 internal message commands.
    ; You also can complete let the line out.
    ; !!! But only 'Return' (without any value) will not proceed
    ; the default AutoIt3-message in the future !!!
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

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

    Func _CloseDblClk()
    AdlibUnRegister('_CloseDblClk')
    ToolTip('')
    EndFunc

    [/autoit]
  • Hallo Oscar,

    huh...

    kurze Rückfrage!
    Da ist nochmal soviel drin bin etwas durcheinander.

    Meine ganzen Listeneinträge
    wie manage ich das mit den Case Anweisungen!
    Die Schleife ist jetzt leer.

    Muß ich alles in die Switch Anweisung in der Funktion schreiben?

    [autoit]


    Switch $hWndFrom
    Case $List1, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK ; Sent when the user double-clicks a string in a list box
    ToolTip('Doppelklick' & @CRLF & GUICtrlRead($List1))
    AdlibRegister('_CloseDblClk', 1000)
    EndSwitch
    EndSwitch

    [/autoit]

    Wie kann ich z.B. die Msgboxen m. Doppelklick starten.
    Tappe etwas im dunkeln...


    Liebe Grüße
    Ilse ;)

    • Offizieller Beitrag

    MsgBoxen innerhalb der WM_COMMAND Auswertung sind böse X(
    Nee, Scherz beiseite. Innerhalb einer Messageabfrage darf keine MsgBox vorkommen, weil die Funktionen immer so schnell wie möglich wieder verlasssen werden müssen. Eine MsgBox würde dein Script hoffnungslos is Nirvana schicken.

    • Offizieller Beitrag

    Wenn Du längere Berechnungen/Scriptteile oder Messageboxen verwenden willst, dann solltest Du das vielleicht so lösen:

    Spoiler anzeigen
    [autoit]


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

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

    $Form1 = GUICreate("Form1", 615, 438, 192, 124)
    $List1 = GUICtrlCreateList("", 376, 32, 201, 348)
    GUICtrlSetData(-1, "Start|Ende|")
    GUICtrlSetFont(-1, 12, 400, 0, "Verdana")
    Global $Dummy = GUICtrlCreateDummy()
    Global $AccelKeys[1][2] = [["{Enter}", $Dummy]]
    GUISetAccelerators($AccelKeys)
    GUISetState(@SW_SHOW)
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    Global $fDblClk = False

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    ;~ Case $List1
    ;~ _Menu1()
    ;~ Case $Dummy
    ;~ _Menu1()
    EndSwitch
    If $fDblClk Then
    $fDblClk = False
    MsgBox(0, 'Test', 'Doppelklick')
    EndIf
    WEnd

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

    Func _Menu1()
    Switch GUICtrlRead($List1)
    Case "Start"
    MsgBox(0, "", "Start")
    Case "Ende"
    MsgBox(0, "", "Ende")

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

    EndSwitch
    EndFunc ;==>_Menu1

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($List1) Then $hWndListBox = GUICtrlGetHandle($List1)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $List1, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK ; Sent when the user double-clicks a string in a list box
    $fDblClk = True
    EndSwitch
    EndSwitch
    ; Proceed the default AutoIt3 internal message commands.
    ; You also can complete let the line out.
    ; !!! But only 'Return' (without any value) will not proceed
    ; the default AutoIt3-message in the future !!!
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

    [/autoit]