Zwei ListView mit WM_NOTIFY

  • Hi Leute,

    ich habe zwei Listviews und will WM_NOTIFY bei beiden hinkriegen. Ich kriege immer diesen error:

    Code
    Variable used without being declared.

    Wenn ich versuche noch ein weiteres $wParam anzugeben. Wie der Error sagt, ist die Variable nicht deklariert, stimmt aber nicht, weil ich einfach die Variable von der zweiten ListView angegeben habe. Hier mal ein Beispielskript: Wenn man auf eines der beiden ListView soll eine leere MsgBox erscheinen:

    Beispiel (Auch im Anhang)
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Beispiel 2 ListView's", 266, 322)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    $ListView1 = GUICtrlCreateListView("Beispiel", 8, 8, 250, 150, -1, $LVS_EX_FULLROWSELECT) ; Ich habe einfach dieselben Parameter wie bei meinem Main-Skript gewählt, bei einer Spalte bring ja FULLROWSELECT nicht wirklich etwas^^
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 246)
    GUICtrlCreateListViewItem("Beim Klick leere MsgBox", -1)
    $ListView2 = GUICtrlCreateListView("Beispiel 2", 8, 168, 250, 150, -1, $LVS_EX_FULLROWSELECT) ;ebenso
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 246)
    GUICtrlCreateListViewItem("Beim Klick leere MsgBox", -1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Exit()
    GUIDelete()
    Exit
    EndFunc

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

    Func WM_NOTIFY($hWndGUI, $MsgID, $wParam, $lParam)
    #forceref $hWndGUI, $MsgID, $wParam
    Local $tagNMHDR, $event, $hWndFrom, $code, $aCurrent, $aCurrentName, $sAttrib, $iSize, $aTime, $iVersion, $aAmounts
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3)
    Select
    Case $wParam = $ListView1
    Select
    Case $event = $NM_CLICK
    If GUICtrlRead($ListView2) <> 0 Then MsgBox(0, "", "")
    EndSelect
    Case $wParam = $ListView2 ; Gibt Error: Variable used without being declared.
    Select
    Case $event = $NM_CLICK
    If GUICtrlRead($ListView2) <> 0 Then MsgBox(0, "", "")
    EndSelect
    EndSelect
    $tagNMHDR = 0
    $event = 0
    $lParam = 0
    EndFunc ;==>_WM_Notify_Events

    [/autoit]

    Einmal editiert, zuletzt von BurakSZ (3. Juli 2010 um 13:52)

  • Hallo BurakSZ,

    wenn du GuiRegisterMsg nach GuiSetState definierst klappt es:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Beispiel 2 ListView's", 266, 322)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    $ListView1 = GUICtrlCreateListView("Beispiel", 8, 8, 250, 150, -1, $LVS_EX_FULLROWSELECT) ; Ich habe einfach dieselben Parameter wie bei meinem Main-Skript gewählt, bei einer Spalte bring ja FULLROWSELECT nicht wirklich etwas^^
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 246)
    GUICtrlCreateListViewItem("Beim Klick leere MsgBox", -1)
    $ListView2 = GUICtrlCreateListView("Beispiel 2", 8, 168, 250, 150, -1, $LVS_EX_FULLROWSELECT) ;ebenso
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 246)
    GUICtrlCreateListViewItem("Beim Klick leere MsgBox", -1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Exit()
    GUIDelete()
    Exit
    EndFunc

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

    Func WM_NOTIFY($hWndGUI, $MsgID, $wParam, $lParam)
    #forceref $hWndGUI, $MsgID, $wParam
    Local $tagNMHDR, $event, $hWndFrom, $code, $aCurrent, $aCurrentName, $sAttrib, $iSize, $aTime, $iVersion, $aAmounts
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3)
    Select
    Case $wParam = $ListView1
    Select
    Case $event = $NM_CLICK
    If GUICtrlRead($ListView2) <> 0 Then MsgBox(0, "", "")
    EndSelect
    Case $wParam = $ListView2 ; Gibt Error: Variable used without being declared.
    Select
    Case $event = $NM_CLICK
    If GUICtrlRead($ListView2) <> 0 Then MsgBox(0, "", "")
    EndSelect
    EndSelect
    $tagNMHDR = 0
    $event = 0
    $lParam = 0
    EndFunc ;==>_WM_Notify_Events

    [/autoit]

    mfg (Auto)Bert