Doppelklick (noch ne Lösung?)

  • Hallo an alle AutoIt-Fanatiker und liebe Grüße aus Chile-

    Seit kurzem beschäftige ich mich mit AutoIt und bin - natürlich - dabei auch auf Eure Seite gelangt. Das Thema Doppelklick wurde mehrfach angesprochen und doch, irgendwie, nie so richtig gelöst. Beim Spielen mit AutoIt ist mir aber aufgefallen, dass die List- / ListView aus selektieren und fokusieren besteht, also 2 Klicks.....
    O.K. lange Rede kurzer Sinn, ich hab mal eine Spiel-Gui gebaut, bei der der Doppelklick funktioniert. Jetzt weiß ich aber nicht ob das eine Eigenart bei ME (Muy Extraño - ich weiß :rolleyes:) ist, oder ob das bei Xp usw. auch funktioniert...
    Hier kommt mal der Code:

    Spoiler anzeigen
    [autoit]

    <GUIConstants.au3>
    #Include <GuiListView.au3>
    #include <GuiList.au3>
    ;~ /======== Doppelklick-Spiel-GUI ========\
    ;~ /======== AutoIt-Vers.: v3.2.0.1 ========\
    ;~ /======== Hinweis: die Anwendung läuft ohne Checkbox/TreeView ========\
    ;~ /======== dazu mÇussten mehr Abfragen eingebaut werden ========\
    ;~ /======== Saludos de Chile / Willie ========\
    Opt ('MustDeclareVars', 1)

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

    Dim $msg,$Liste,$ListView, $Ausgang,$BTN1,$BTN2,$CurPos
    GUICreate("Doppelklick die Lösung ?", 400, 230, -1, -1)
    $Liste = GUICtrlCreateList("", 25, 40, 100, 120,$LBS_MULTIPLESEL)
    GUICtrlCreateLabel("List",55,20,40,20)
    GUICtrlSetFont(-1,11)
    GUICtrlSetData($Liste, "Listeintrag 1|Listeintrag 2|Listeintrag 3|º(·¿·)º|";)
    $ListView = GUICtrlCreateListView("List-View| ...", 140, 19, 200, 130)
    _GUICtrlListViewSetColumnWidth ($ListView, 0, 150)
    GUICtrlCreateListViewItem("List-View-Eintrag 1|(·¿·)", $ListView)
    GUICtrlCreateListViewItem("List-View-Eintrag 2|(·¡-)", $ListView)
    GUICtrlCreateListViewItem("List-View-Eintrag 3|(º.º)", $ListView)
    GUICtrlCreateListViewItem("List-View-Eintrag 4|(_º_)", $ListView)
    $Ausgang = GUICtrlCreateButton("E X I T", 360, 22, 20, 130,-1,$WS_EX_DLGMODALFRAME )
    GUICtrlSetStyle($Ausgang,$SS_Center+$BS_MULTILINE )
    $BTN1 = GUICtrlCreateButton("Liste Sel.", 25, 160, 100, 25)
    $BTN2 = GUICtrlCreateButton("ListView Sel.", 240, 160, 100, 25)
    GUISetState()
    While 1
    $msg = GUIGetMsg(1)
    Select
    Case $msg[0] = $GUI_EVENT_CLOSE Or $msg[0] =$Ausgang
    ExitLoop
    Case $msg[0] = $GUI_EVENT_PRIMARYUP
    ;~ ==== Doppelklick (linke Maustaste) abprüfen ===
    ;~ ==== ACHTUNG: das funktioniert nicht mit CHeckbox/Trees ===
    $CurPos=GUIGetCursorInfo()
    Select
    Case $CurPos[4] = $Liste
    _GetListe()
    Case $CurPos[4] = $ListView
    _GetListView()
    EndSelect
    Case $msg[0] = $BTN1
    $CurPos=GUIGetCursorInfo()
    _GetListe()
    Case $msg[0] = $BTN2
    $CurPos=GUIGetCursorInfo()
    _GetListView()
    EndSelect
    WEnd

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

    Func _GetListe()
    Local $AnzSelect,$AnzTotal,$text,$cnt,$cntT
    ;~ == Liste muss MultiSel sein (ob das sinnvoll ist bei Doppelklick?) ===
    $AnzSelect=_GUICtrlListGetSelCount($Liste) ; === ausgewählte ===
    $AnzTotal =_GUICtrlListCount($Liste) ; === Gesamteintrsg Liste ===
    $Text ="ausgewählte Einträge = "&$AnzSelect&" von Total = "&$AnzTotal&@cr
    $cnt = _GUICtrlListGetSelItems($Liste) ; === Num ausgewählte ===
    $cntT = _GUICtrlListGetSelItemsText($Liste) ; === Text ausgewählte ===
    If Not IsArray($cnt) Then ; Liste meldet immer Array
    msgbox(16,"Liste-Auswahl","keine Daten selektiert";)
    Return
    EndIf
    If $CurPos[4] = $BTN1 Then ; Info aus GUIGetCursorInfo()
    $text=$text&"*** manuelle Auswahl ***"&@cr&@cr
    Else
    $text=$text&"*** Doppelklick ***"&@cr&"------------------------"&@cr
    EndIf
    For $i = 1 To $cnt[0]
    $text=$text&$cnt[$i]&". "&$cntT[$i]&@cr
    Next
    MsgBox(0, "Liste-Auswahl: ",$text)
    EndFunc

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

    Func _GetListView()
    Local $SatzSelect,$AnzTotal,$text
    ;~ ListView, wegen Doppelklick kein Status: MultiSel ! ===
    $SatzSelect=_GUICtrlListViewGetCurSel($ListView) ; === ausgewählter Satz ===
    If $SatzSelect = $LV_Err Then
    msgbox(16,"List-View-Auswahl","keine Daten selektiert";)
    Return
    EndIf
    $AnzTotal =_GUICtrlListViewGetItemCount($ListView) ; === Gesamteinträge ListView ===
    $Text ="ausgewählter Eintrag = "&$SatzSelect&" von Total = "&$AnzTotal&@cr
    If $CurPos[4] = $BTN2 Then
    $text=$text&"*** manuelle Auswahl ***"&@cr&@cr
    Else
    $text=$text&"*** Doppelklick ***"&@cr&"------------------------"&@cr
    EndIf
    $text=$text&$SatzSelect&". "&_GUICtrlListViewGetItemText($ListView,$SatzSelect)
    MsgBox(0, "List-View-Auswahl: ",$text)
    EndFunc

    [/autoit]

    Auch hier der Hinweis: Die List/ListView arbeitet ohne Checkbox/TreeView. Sollte dies gewünscht werden müssen weitere Abfragen eingebaut werden, da diese Anweisungen den Klick sofort erkennen.

    Freu mich auf Eure Antworten, hoffentlich positiv
    Saludos de Chile
    Willie

    (3x editiert unde jetzt klappts auch mit dem Spoiler/Autoit)

    Ich hatte einst ein schönes Vaterland.
    Der Eichenbaum wuchs dort so hoch, die Veilchen nickten sanft.
    Es war ein Traum.
    Das küsste mich auf deutsch und sprach auf deutsch (Man glaubt es kaum
    wie gut es klang) das Wort: „Ich liebe dich!“
    Es war ein Traum.
    Heinrich Heine "In der Fremde"

    3 Mal editiert, zuletzt von RapaNui (3. Dezember 2006 um 06:22)

    • Offizieller Beitrag

    Hi,

    hier mal ein Beispiel für Doppelclick in einer Listview:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>;Inclusion file for the GUI interface controls
    #include <GuiListView.au3>

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

    Global $ListView
    Global Const $WM_NOTIFY = 0x004E
    Global Const $DebugIt = 1

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

    ;ListView Events
    Global Const $NM_FIRST = 0
    Global Const $NM_LAST = (-99)
    Global Const $NM_OUTOFMEMORY = ($NM_FIRST - 1)
    Global Const $NM_CLICK = ($NM_FIRST - 2)
    Global Const $NM_DBLCLK = ($NM_FIRST - 3)
    ;~ Global Const $NM_RETURN = ($NM_FIRST - 4)
    ;~ Global Const $NM_RCLICK = ($NM_FIRST - 5)
    ;~ Global Const $NM_RDBLCLK = ($NM_FIRST - 6)
    ;~ Global Const $NM_SETFOCUS = ($NM_FIRST - 7)
    ;~ Global Const $NM_KILLFOCUS = ($NM_FIRST - 8)
    ;~ Global Const $NM_CUSTOMDRAW = ($NM_FIRST - 12)
    ;~ Global Const $NM_HOVER = ($NM_FIRST - 13)
    ;~ Global Const $NM_NCHITTEST = ($NM_FIRST - 14)
    ;~ Global Const $NM_KEYDOWN = ($NM_FIRST - 15)
    ;~ Global Const $NM_RELEASEDCAPTURE = ($NM_FIRST - 16)
    ;~ Global Const $NM_SETCURSOR = ($NM_FIRST - 17)
    ;~ Global Const $NM_CHAR = ($NM_FIRST - 18)
    ;~ Global Const $NM_TOOLTIPSCREATED = ($NM_FIRST - 19)
    #endregion End Global variables

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

    Opt("WinTitleMatchMode", 2)

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

    $main_GUI = GUICreate("GuiRegisterMsg Test", 225, 400, 300, 10, BitOR($WS_THICKFRAME, $WS_SIZEBOX))

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

    $ListView = GUICtrlCreateListView("Entry Name|Category", 5, 75, 195, 280, BitOR($LVS_SORTASCENDING, $LVS_SINGLESEL))
    _GUICtrlListViewSetColumnWidth ($ListView, 0, 100)
    _GUICtrlListViewSetColumnWidth ($ListView, 1, 100)
    GUICtrlSendMsg($ListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    GUICtrlSendMsg($ListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    GUICtrlCreateListViewItem("Name 1|Category 1", $ListView)
    GUICtrlCreateListViewItem("Name 2|Category 2", $ListView)
    GUISetState()

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

    ;Register WM_NOTIFY events
    GUIRegisterMsg($WM_NOTIFY, "WM_Notify_Events")

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    ;-----------------------------------------------------------------------------------------
    ;This case statement exits and updates code if needed
    Case $GUI_EVENT_CLOSE
    Exit
    ;-----------------------------------------------------------------------------------------
    ;put all the misc. stuff here
    Case Else
    ;;;
    EndSwitch
    WEnd

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

    ; WM_NOTIFY event handler
    Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam)
    #forceref $hWndGUI, $MsgID, $wParam
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate("int;int;int", $lParam);NMHDR (hwndFrom, idFrom, code)
    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3)
    Select
    Case $wParam = $ListView
    Select
    Case $event = $NM_CLICK
    ConsoleWrite("SingleClick" & @LF)
    Case $event = $NM_DBLCLK
    MsgBox(0,"Double Clicked", _GUICtrlListViewGetItemText ($ListView, _GUICtrlListViewGetSelectedIndices($ListView)))
    EndSelect
    EndSelect
    $tagNMHDR = 0
    $event = 0
    $lParam = 0
    EndFunc ;==>WM_Notify_Events

    [/autoit]

    So long,

    Mega

  • Hi und Hallo
    Danke für den Hinweis auf eine weitere Möglichkeit des Doppelklick.

    Dennoch bleibt meine Frage unbeantwortet.

    Funktioniert diese (meine Möglichkeit) nur auf meinem ME-System oder klappt das auch auf XP etc...

    Saludos de Chile
    Willie

    Ich hatte einst ein schönes Vaterland.
    Der Eichenbaum wuchs dort so hoch, die Veilchen nickten sanft.
    Es war ein Traum.
    Das küsste mich auf deutsch und sprach auf deutsch (Man glaubt es kaum
    wie gut es klang) das Wort: „Ich liebe dich!“
    Es war ein Traum.
    Heinrich Heine "In der Fremde"

  • Hi und Hallo,
    möchte nur schnell Danke sagen

    Saludos de Chile
    Willie

    Ich hatte einst ein schönes Vaterland.
    Der Eichenbaum wuchs dort so hoch, die Veilchen nickten sanft.
    Es war ein Traum.
    Das küsste mich auf deutsch und sprach auf deutsch (Man glaubt es kaum
    wie gut es klang) das Wort: „Ich liebe dich!“
    Es war ein Traum.
    Heinrich Heine "In der Fremde"