Frage zu Doppelklick abfragen in Listbox

  • Hallo Zusammen,

    das Abfragen eines Doppelklicks auf einen Listbox-Eintrag bringt mich zur Verzweiflung:

    Erzeugen der Listbox:

    $List_r_Report = GUICtrlCreateList("", 16, 144, 593, 292, BitOR($LBS_SORT,$LBS_USETABSTOPS,$LBS_STANDARD,$WS_HSCROLL,$WS_VSCROLL,$WS_BORDER))


    Abfragen der Ereignisse:

    GUIRegisterMsg($WM_NOTIFY,"WM_COMMAND")
    [...]
    Do

    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    [...]
    Func WM_COMMAND($hWnd,$iMsg,$iwParam,$ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $iIDFrom

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR,"hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR,"IDFrom")
    $iCode = DllStructGetData($tNMHDR,"Code")

    Switch $hWndFrom
    Case $List_r_Report ; Events der Listbox
    Switch $iCode ; checkt wie das Event aussieht
    Case $LBN_DBLCLK
    MsgBox(0,"","DoubleClickOnListView")
    EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG
    EndFunc

    Leider kommt kein Event in der Funktion WM_COMMAND an. Hat einer von euch einen Tipp, wo ich hier noch auf Fehlersuche gehen kann?

    Danke vorab,
    viele Grüße

    TheDude

    Cuiusvis hominis est errare, nullius nisi insipientis in errore perseverare.
    [Cicero, Philippica 12,2]

    Einmal editiert, zuletzt von TheDude (22. Mai 2012 um 16:52)

  • Hallo Bugfix,

    ... danke Dir für die schnelle Antwort.

    Ich habe jetzt folgendes ergänzt:

    If Not IsHWnd($List_r_Report) Then $hList_r_Report = GUICtrlGetHandle($List_r_Report)
    [...]
    Switch $hWndFrom
    Case $List_r_Report, $hList_r_Report ; Events der Listbox
    Switch $iCode ; checkt wie das Event aussieht
    Case $LBN_DBLCLK
    MsgBox(0,"","DoubleClickOnListView")
    EndSwitch
    EndSwitch
    [...]

    Leider scheint es so zu sein, daß die mit GUIRegisterMsg($WM_NOTIFY,"WM_COMMAND") definierte Funktion bei einem Doppelklick auf einen Eintrag in der Listbox gar nicht aufgerufen bzw. durchlaufen wird.

    Wenn ich jedoch mit der Mouse über z. B. eine Schaltfläche "fahre" (hover), dann wird WM_COMMAND durchlaufen ... ?(

    Hast Du hierzu evtl. noch einen Tipp?

    Danke vorab,
    viele Grüße

    TheDude

    Cuiusvis hominis est errare, nullius nisi insipientis in errore perseverare.
    [Cicero, Philippica 12,2]

  • Versuch mal das ganze anstatt mit DLL zumachen. So zumachen.

    [autoit]

    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF)
    $iCode = BitShift($iwParam, 16)

    [/autoit]
  • Hallo M-Obi,

    danke für die schnelle Antwort.

    Leider geht es auch damit nicht, da nach einem Doppelklick auf einen
    Listboxeintrag die Funktion WM_COMMAND nicht angesprungen bzw.
    durchlaufen wird. Das ist es, was ich nicht verstehe. Bei z. B. einem
    Klick auf eine Schaltfläche springt das Programm in die Funktion
    WM_COMMAND ...

    Komisch ist auch, daß das Beispiel aus der Auto-It Hilfe funktioniert ... ?(

    Im Gegensatz zum Beispiel gibt es allerdings in meinem Programm noch folgende Funktion:

    Func _VerwalteGUI($DbHdl)
    Local $nMsg,$Datei,$SQL_Command,$NeueLizenz

    $NeueLizenz = 0

    While 1

    $nMsg = GUIGetMsg()

    Switch $nMsg

    Case $GUI_EVENT_CLOSE

    ExitLoop

    ;Case $frmMain

    Case $cbb_s_SoftTitle

    [...]

    EndSwitch

    Wend

    [...]

    Verhindert dies möglicherweise den Einsprung in die Funktion WM_COMMAND?

    Danke & Grüße
    TheDude

    Cuiusvis hominis est errare, nullius nisi insipientis in errore perseverare.
    [Cicero, Philippica 12,2]

  • Hallo Zusammen,

    ... ich habe das Programm jetzt einmal so umgeschrieben, daß es keine zweite Funktion mehr gibt um die Events auszuwerten. Leider reagiert das Script dennoch nicht auf Interaktionen mit der Listbox. Beim Bedienen anderer Steuerelemente dagegen wird die Funktion angesprungen:

    Hat jemand vielleicht noch eine Idee, wie ich die Ereignisse der Listbox abgefragt bekomme? ?(

    Vielleicht noch zur Info: Die GUI wurde KODA 1708 Beta erstellt ...

    Danke vielmals,
    Grüße

    TheDude

    Cuiusvis hominis est errare, nullius nisi insipientis in errore perseverare.
    [Cicero, Philippica 12,2]

  • Schreib mal anstatt

    [autoit]

    GUIRegisterMsg($WM_NOTIFY,"WM_COMMAND")

    [/autoit][autoit]

    GUIRegisterMsg($WM_COMMAND,"WM_COMMAND")

    [/autoit]

    Und benutzt mal bitte die AutoIt-Tags.

  • Hey M-Obi,

    ...YES!!! Danke Dir! Es klappt! :thumbup:

    Wegen der Tags gelobe ich hiermit Besserung. :whistling:

    Vielen Dank,
    Grüße & einen schönen Tag

    TheDude

    Cuiusvis hominis est errare, nullius nisi insipientis in errore perseverare.
    [Cicero, Philippica 12,2]