Tab mit Tooltip verschieben in X/Y

  • Hallo AutoIt Gemeinde,

    Da ich für meine Gui ein Tab mit ToolTip brauche, habe ich mal folgenden Code aus dem Netz geholt und damit ein wenig getüftelt...
    ...soweit so gut, nur bin ich auf eine mir unerklärliche Situation gestoßen, denn sobald ich den genzen TAB in X bzw. Y verschiebe (50 im Beispiel in Zeile 11),
    wird plötzlich der Tab von der Funktion "_GUICtrlTab_HitTest" nicht mehr gefunden. Zu erkennen ist das, da die MsgBox in Zeile 81 nicht mehr aufscheint...

    $TABHANDLE = _GUICtrlTab_Create($gui,50, 0, 465, 321, BitOR($TCS_TABS, $TCS_TOOLTIPS))

    kann mir jemand die Funktion, bzw. den Fehler erklären, da ich nach Stunden bei Google nicht schlau geworden bin.
    Auch mit dem "MouseCoordMode" hat das nicht viel zu tun, da ich dort auch schon alles ausprobiert habe..


    Spoiler anzeigen

    #include <GUIConstantsEx.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUITab.au3>
    #include <GUITooltip.au3>

    Global $arr0[1] = [0], $arr1[1] = [0], $arr2[1] = [0]
    Global $activetab = 0 ; default to first tab active

    $gui = GUICreate("UDF Tabs Tooltips", 472, 348, 226, 125)
    $TABHANDLE = _GUICtrlTab_Create($gui,50, 0, 465, 321, BitOR($TCS_TABS, $TCS_TOOLTIPS))
    ; Create Tooltiop control
    $hToolTip = _GUICtrlTab_GetToolTips($TABHANDLE)
    ; end create

    _GUICtrlTab_InsertItem($TABHANDLE, 0, "tab0", -1, 1000)
    _GUIToolTip_AddTool($hToolTip, $TABHANDLE, "tab0", 1000)
    _GUICtrlTab_InsertItem($TABHANDLE, 1, "tab1", -1, 1001)
    _GUIToolTip_AddTool($hToolTip, $TABHANDLE, "tab1", 1001)
    _GUICtrlTab_InsertItem($TABHANDLE, 2, "tab2", -1, 1002)
    _GUIToolTip_AddTool($hToolTip, $TABHANDLE, "tab2", 1002)

    For $i = 1 To 10
    _ControlAdd($arr0, GUICtrlCreateLabel("label 0-" & $i, 10, 30 + (25 * ($i - 1))))
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    Next
    For $i = 1 To 10
    _ControlAdd($arr0, GUICtrlCreateButton("button 0-" & $i, 70, 30 + (25 * ($i - 1)), 70, 20))
    Next

    For $i = 1 To 10
    _ControlAdd($arr1, GUICtrlCreateLabel("label 1-" & $i, 30, 30 + (25 * ($i - 1))))
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    Next
    For $i = 1 To 10
    _ControlAdd($arr1, GUICtrlCreateButton("button 1-" & $i, 90, 30 + (25 * ($i - 1)), 70, 20))
    Next

    For $i = 1 To 10
    _ControlAdd($arr2, GUICtrlCreateLabel("label 2-" & $i, 50, 30 + (25 * ($i - 1))))
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    Next
    For $i = 1 To 10
    _ControlAdd($arr2, GUICtrlCreateButton("button 2-" & $i, 110, 30 + (25 * ($i - 1)), 70, 20))
    Next

    ;~ ;; tab0 is default
    ;~ _ControlState(0, $GUI_SHOW)

    ;; tab1 is default
    _GUICtrlTab_SetCurSel($TABHANDLE, 1)
    _ControlState(1, $GUI_SHOW)
    $activetab = 1

    ;~ GUICtrlCreateTabItem("")
    GUIRegisterMsg($WM_NOTIFY,"TOOL_WM_NOTIFY")
    ;End Define Tooltips

    GUISetState()

    While 1
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    Func _ControlAdd(ByRef $array, $cID)
    $array[0] += 1
    ReDim $array[$array[0] + 1]
    $array[$array[0]] = $cID
    GUICtrlSetState(-1, $GUI_HIDE) ; hide all controls

    Return $cID
    EndFunc

    Func _TabClick($iTab)

    If $iTab == $activetab Then Return
    MsgBox("","","tabklick" & $iTab )
    _ControlState($activetab, $GUI_HIDE) ; hide
    _ControlState($iTab, $GUI_SHOW) ; show
    $activetab = $iTab
    EndFunc

    Func _ControlState($iArr, $iState)
    Local $array = Eval("arr" & $iArr)
    For $i = 1 To $array[0]
    GUICtrlSetState($array[$i], $iState)
    Next
    EndFunc

    ; Prog@ndy
    Func TOOL_WM_NOTIFY($hWndGUI, $MsgID, $wParam, $lParam)

    Local $tagNMTTDISPINFOA = "hwnd hWndFrom;int IDFrom;int Code;ptr lpszText;char szText[80];hwnd hinst;uint uFlags;"
    Local $tagNMTTDISPINFOW = "hwnd hWndFrom;int IDFrom;int Code;ptr lpszText;wchar szText[80];hwnd hinst;uint uFlags;"
    Local $NMHDR = DllStructCreate($tagNMTTDISPINFOW, $lParam)

    Local $hWndFrom = DllStructGetData($NMHDR, 1)
    Local $IdFrom = DllStructGetData($NMHDR, 2)
    Local $Event = DllStructGetData($NMHDR, 3)
    Switch $Event
    Case $TTN_GETDISPINFOW, $TTN_GETDISPINFO
    If $TTN_GETDISPINFO == $Event Then $NMHDR = DllStructCreate($tagNMTTDISPINFOA, $lParam)
    If $hwndFrom == HWnd($hToolTip) Then
    Local $param = _GUICtrlTab_GetItemParam($TABHANDLE, $IdFrom)
    Local $text = _GUIToolTip_GetText($hwndFrom, $TABHANDLE, $param)
    ;~ ConsoleWrite("tip: " & $IdFrom & ", param: " & $param & @CRLF)
    ;~ ConsoleWrite("text: " & $text & @CRLF)
    DllStructSetData($NMHDR, "szText", $text & Chr(0))
    EndIf
    Case $NM_CLICK
    Local $oldmco = Opt("MouseCoordMode", 2)
    Local $mpos = MouseGetPos()
    Opt("MouseCoordMode", $oldmco)
    Local $idx = _GUICtrlTab_HitTest($hWndFrom, $mpos[0], $mpos[1]) ; get index of clicked tab
    If $idx[0] <> -1 Then
    _TabClick($idx[0])
    EndIf
    EndSwitch
    Return $GUI_RUNDEFMSG

    EndFunc ;==>TOOL_WM_NOTIFY