ListView Doppelklick 64bit

  • Hi,
    leider funktioniert der Doppelklick auf ein ListView Item unter Win 7 64bit nicht.

    Einer eine Ahnung warum?

    Spoiler anzeigen
    [autoit]

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

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

    GUICreate("Listview Einträge", 220, 250, 100, 200, -1)

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

    $listview = GUICtrlCreateListView("Spalte1 |Spalte2|Spalte3", 10, 10, 200, 150);,$LVS_SORTDESCENDING)
    $item1 = GUICtrlCreateListViewItem("Eintrag2|Spalte22|Spalte23", $listview)
    $item2 = GUICtrlCreateListViewItem("Eintrag1|Spalte12|Spalte13", $listview)
    $item3 = GUICtrlCreateListViewItem("Eintrag3|Spalte32|Spalte33", $listview)
    GUISetState()

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

    Do
    $msg = GUIGetMsg()
    Sleep(10)
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit] [autoit][/autoit] [autoit][/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 = "hwnd hWndFrom;uint_ptr IDFrom;uint Code"
    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3)
    Select
    Case $wParam = $listview
    Select
    Case $event = $NM_DBLCLK
    ConsoleWrite("ja" & @CRLF)
    EndSelect
    EndSelect
    $tagNMHDR = 0
    $event = 0
    $lParam = 0
    EndFunc ;==>WM_Notify_Events

    [/autoit]
    • Offizieller Beitrag

    Was hällst du davon erst mal GUIRegisterMsg in deinem Script zu benutzen? :D

    Probier das:

    Spoiler anzeigen
    [autoit]

    #region - Timestamp
    ; 2011-05-23 21:13:39
    #endregion - Timestamp

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

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

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

    GUICreate("Listview Einträge", 220, 250, 100, 200, -1)

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

    $listview = GUICtrlCreateListView("Spalte1 |Spalte2|Spalte3", 10, 10, 200, 150);,$LVS_SORTDESCENDING)
    $item1 = GUICtrlCreateListViewItem("Eintrag2|Spalte22|Spalte23", $listview)
    $item2 = GUICtrlCreateListViewItem("Eintrag1|Spalte12|Spalte13", $listview)
    $item3 = GUICtrlCreateListViewItem("Eintrag3|Spalte32|Spalte33", $listview)
    GUISetState()
    GUIRegisterMsg($WM_NOTIFY, "wm_Notify_Events")
    Do
    $msg = GUIGetMsg()
    Sleep(10)
    Until $msg = $GUI_EVENT_CLOSE

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

    ;~ ; WM_NOTIFY event handler
    Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam)
    #forceref $hWndGUI, $MsgID, $wParam
    Local $tagNMHDR = "hwnd hWndFrom;uint_ptr IDFrom;INT Code"
    Local $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    Local $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    Local $iCode = DllStructGetData($tNMHDR, "Code")
    Select
    Case $hWndFrom = GUICtrlGetHandle($listview)
    Select
    Case $iCode = $NM_DBLCLK
    ConsoleWrite("ja" & @CRLF)
    EndSelect
    EndSelect
    $tagNMHDR = 0
    $event = 0
    $lParam = 0
    EndFunc ;==>WM_Notify_Events

    [/autoit]
  • Was soll wo ein Fehler sein ?
    Wenn man vergisst GUIRegisterMsg() aufzurufen, ist klar dass es nicht funktioniert:

    Aber was du damit meinst :


    Probier mal die neue Beta 3.3.7.2, da scheint der Fehler gefixt zu sein. Hab es aber noch nicht getestet.

    verstehe ich nicht. Wie soll ein Fehler in gefixt sein, den es gar nicht gibt ?

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

    • Offizieller Beitrag

    Darter, das Tweaky GUIRegisterMsg in seinem Beispiel vergessen hat, ist Nebensache.
    Ich denke er hat es einfach in seinem Beispiel vergessen zu kopieren.
    Kannst du ja selber testen, indem du einfach GUIRegisterMsg einfügst, der Code wird nur unter X86 funzen und nicht bei X64.
    Das Problem liegt bei $tagNMHDR, diese Struc funzt im Originalen nicht auf X64.
    Der Bug ist auch im BugTracker zu finden und sollte laut Changelog in der Version 3.3.7.2 behoben sein.

  • Also bei mir funktioniert es einwandfrei. Sowohl ausgeführt unter Win7 x64, wie auch kompiliert als x64 unter Win7.

    Und das mit der V3.3.6.1 !

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"