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