WM_NOTIFY macht eine falsche CaseZuordnung

  • Hallo zusammen,

    seit über zwei Stunden suche ich nun einen scheinbar dummen Fehler wieso mein WM_NOTIFY nicht mehr funktioniert. Ich hab keinen blassen Schimmer wieso, ich habe lediglich einen Button mehr zu einer Toolbar hinzugefügt. Wir Ihr an dem ConsoleWrite seht habe ich mir mal die verschiedenen Informationen ausgeben lassen und feststellen müssen (kurze Info noch, bei $i_idOld steht der Wert der Variable & "-" & @error):

    Klick auf die Toolbar an einer Stelle wo kein Button ist:
    $hWndFrom: 0x00170CD8
    $iCode: -20
    $tNMTBHOTITEM:
    $i_idOld: -1 - 0

    Klick auf einen meiner 7 Toolbar Buttons (egal welcher):
    $hWndFrom: 0x00170CD8
    $iCode: -20
    $tNMTBHOTITEM:
    $i_idOld: 0 - 0

    [autoit]

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iCode, $tNMHDR, $i_idOld, $tNMTOOLBAR, $tNMTBHOTITEM

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

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

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

    Switch $hWndFrom
    Case $hToolbar
    Switch $iCode
    Case $NM_LDOWN
    $tNMTBHOTITEM = DllStructCreate($tagNMTBHOTITEM, $ilParam)
    $i_idOld = DllStructGetData($tNMTBHOTITEM, "idOld")

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

    ConsoleWrite("$hWndFrom: " & $hWndFrom & @CR & _
    "$iCode: " & $iCode & @CR & _
    "$tNMTBHOTITEM: " & $tNMTBHOTITEM & @CR & _
    "$i_idOld: " & $i_idOld & " - " & @error & @CR & @CR)

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

    Switch $i_idOld
    Case $hToolbarButtonOpen
    ConsoleWrite("Open" & @CR & @CR)
    Case $hToolbarButtonCopy
    ConsoleWrite("Copy" & @CR & @CR)
    Case $hToolbarButtonCreate
    ConsoleWrite("Create" & @CR & @CR)
    Case $hToolbarButtonExplorer
    ConsoleWrite("Explorer" & @CR & @CR)
    Case $hToolbarButtonRefresh
    ConsoleWrite("Refresh" & @CR & @CR)
    Case $hToolbarButtonDelete
    ConsoleWrite("Delete" & @CR & @CR)
    Case $hToolbarButtonConfigWizzard
    If $fConfigWizzardActive = True Then
    _CloseConfigWizzard()
    $fConfigWizzardActive = False
    Else
    _OpenConfigWizzard()
    $fConfigWizzardActive = True
    EndIf
    EndSwitch
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]

    Er navigiert leider immer nur in den ersten Case Fall. Ich hatte sowas ähnliches schon mal glaub ich, aber ich finde weder hier im Forum etwas, noch auf meinem Rechner oder sehe es einfach selber :7

    Wäre jemand so freundlich und schaut mal drüber?

    Grüße Yaerox

    Grüne Hölle

    Einmal editiert, zuletzt von Yaerox (31. Mai 2013 um 08:44)

    • Offizieller Beitrag

    Also der Case-Zweig arbeitet völlig korrekt. Wenn idOld -Wert sich nicht ändert, wird Case den zugehörigen Wert (ich nehme an, "0" ist der Wert von $hToolbarButtonOpen) anwählen.
    Lass dir doch erst mal die $hToolbarButtonOpen usw. in die Konsole ausgeben (Wieso eigentlich "$h.." wenn es ID sind? - Das verwirrt.) und prüfe deren Wert.

  • Heyy danke für deine Antwort BugFix, und sorry das ich erst jetzt schreibe.
    Die Ausgabe der $hToolbarBUTTON_NAME Variablen ist bei allen leer.
    Das erzeugen gibt allerdings bei allen ein Success zurück...hmmm.

    Könnte es daran liegen, dass ich mit mehreren GUIs arbeite? Meine Grundidee war: ich habe ein Programm, dass Toolbar Buttons hat, und einer davon soll eine Art Konfigurations/Einrichtungs-Assistent starten. Dieser soll allerdings integriert sein. Da meine Recherche ergeben hat, dass ich Tree und Listview nicht einfach komplett ausblenden kann, dachte ich an eine Art GUI die einfach an besagter Position darüber liegt, nur halt ohne Rahmen etc.

    So Far

    Grüße Yaerox

    Grüne Hölle

  • Deklaration der Toolbarbuttons war mein Fehler. Die waren nicht mit Enum deklariert, und zugewiesen

    [autoit]

    Enum $Button1 = 1000, $Button2, ...

    [/autoit]

    #Edit: Du fragtest wieso $h wenn es eine ID sei. Ich weiss nicht, für meinen Teil sehe ich alle Controls als Handle an und daher das h, auch wenn ein Handle eine ControlID hat...falls ich das falsch sehe darfst du mich gern aufklären ;)

    Grüße Yaerox

    Grüne Hölle

    Einmal editiert, zuletzt von Yaerox (31. Mai 2013 um 09:02)