Hallo
habe ka Ahnung wie man die Hintergrundfarbe eines TabItems ändert. Es geht leider nicht mit der Funktion GUICtrlSetBkColor oder GUICtrlSetDefBkColor. Vielleicht kann mir jemand einen Tip geben!
Gruß Ralf
Hallo
habe ka Ahnung wie man die Hintergrundfarbe eines TabItems ändert. Es geht leider nicht mit der Funktion GUICtrlSetBkColor oder GUICtrlSetDefBkColor. Vielleicht kann mir jemand einen Tip geben!
Gruß Ralf
Hallo Ralf!
Ich habe hier das Skript von Bugfix:
#include <TabConstants.au3>
#include <WinAPI.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiTab.au3>
Global Const $ODT_TAB = 101
Global Const $ODS_SELECTED = 0x0001
Global Const $ODA_DRAWENTIRE = 0x1
Global Const $ODS_FOCUS = 0x0010
Global $aColTabItem[3][2] = [['Item1',0x11AADD],["Item2",0xEEBB99],["Item3",0x4763FF]] ; [[TabItem-Bezeichnung,TabItem-Color]]
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate("Draw Tab", 300, 200)
$hTab = GUICtrlCreateTab(10, 10, 280, 180, $TCS_OWNERDRAWFIXED)
$TabItem_1 = GUICtrlCreateTabItem("Item1")
GUICtrlCreateLabel("", 10, 33, 277, 155)
$TabItem_2 = GUICtrlCreateTabItem("Item2")
GUICtrlCreateLabel("", 10, 33, 277, 155)
$TabItem_2 = GUICtrlCreateTabItem("Item3")
GUICtrlCreateLabel("", 10, 33, 277, 155)
GUICtrlCreateTabItem("")
GUISetState()
[/autoit] [autoit][/autoit] [autoit]GUIRegisterMsg($WM_DRAWITEM, "WM_DRAWITEM")
[/autoit] [autoit][/autoit] [autoit]_GUICtrlTab_SetCurSel($hTab, 2)
_GUICtrlTab_SetCurSel($hTab, 1)
_GUICtrlTab_SetCurSel($hTab, 0)
Do
Until GUIGetMsg() = -3
Func WM_DRAWITEM($hWnd, $Msg, $wParam, $lParam)
Local $DRAWITEMSTRUCT = DllStructCreate("uint cType;uint cID;uint itmID;uint itmAction;uint itmState;" & _
"hwnd hItm;hwnd hDC;dword itmRect[4];dword itmData", $lParam)
If DllStructGetData($DRAWITEMSTRUCT, "cType") <> $ODT_TAB Then Return $GUI_RUNDEFMSG
If DllStructGetData($DRAWITEMSTRUCT, "itmAction") <> $ODA_DRAWENTIRE Then Return $GUI_RUNDEFMSG
Local $itmID = DllStructGetData($DRAWITEMSTRUCT, "itmID")
Local $hDC = DllStructGetData($DRAWITEMSTRUCT, "hDC")
Local $itmText = $aColTabItem[$itmID][0], $iBrushColor = $aColTabItem[$itmID][1]
[/autoit] [autoit][/autoit] [autoit]DLLCall("gdi32.dll","int","SetBkMode", "hwnd", $hDC, "int", 1)
[/autoit] [autoit][/autoit] [autoit]Local $iBrush = DLLCall("gdi32.dll","hwnd","CreateSolidBrush", "int", $iBrushColor)
$iBrush = $iBrush[0]
Local $iBrushOld = _WinAPI_SelectObject($hDC, $iBrush)
DLLCall("user32.dll","int","FillRect", "hwnd", $hDC, "ptr", DllStructGetPtr($DRAWITEMSTRUCT, "itmRect"), "hwnd", $iBrush)
Local $tBuffer = DllStructCreate("char[256]")
DllStructSetData($tBuffer, 1, $itmText)
$itmText = DllStructGetData($tBuffer, 1)
DllStructSetData($DRAWITEMSTRUCT, "itmRect", DllStructGetData($DRAWITEMSTRUCT, "itmRect", 1) + 10, 1)
DllStructSetData($DRAWITEMSTRUCT, "itmRect", DllStructGetData($DRAWITEMSTRUCT, "itmRect", 2) + 5, 2)
DllCall("user32.dll", "int", "DrawText", "hwnd", $hDC, "str", $itmText, "int", StringLen($itmText), _
"ptr", DllStructGetPtr($DRAWITEMSTRUCT, "itmRect"), "int", $DT_LEFT)
_WinAPI_SelectObject($hDC, $iBrushOld)
_WinAPI_DeleteObject($iBrush)
Return $GUI_RUNDEFMSG
EndFunc
Mit freundlichen Grüßen
Elodie
Danke Dir Elodie
Das geht zwar in die richtige Richtung nur wollte ich den ganzen Tab einfärben und nicht nur den Karteireiter oben. Werde bei Gelegenheit mir die Funktion mal genauer ansehen.
Bis dann
Gruß Ralf
Hab noch eine Funktion hinzugefügt
#include <TabConstants.au3>
#include <WinAPI.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiTab.au3>
Global Const $ODT_TAB = 101
Global Const $ODS_SELECTED = 0x0001
Global Const $ODA_DRAWENTIRE = 0x1
Global Const $ODS_FOCUS = 0x0010
Global $aColTabItem[3][2] = [['Item1',0x11AADD],["Item2",0xEEBB99],["Item3",0x4763FF]] ; [[TabItem-Bezeichnung,TabItem-Color]]
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate("Draw Tab", 300, 200)
$hTab = GUICtrlCreateTab(10, 10, 280, 180, $TCS_OWNERDRAWFIXED)
_GUICtrlTab_SetBkColor($hGUI, $hTab, 0x00FF00)
$TabItem_1 = GUICtrlCreateTabItem("Item1")
GUICtrlCreateLabel("", 10, 33, 277, 155)
$TabItem_2 = GUICtrlCreateTabItem("Item2")
GUICtrlCreateLabel("", 10, 33, 277, 155)
$TabItem_2 = GUICtrlCreateTabItem("Item3")
GUICtrlCreateLabel("", 10, 33, 277, 155)
GUICtrlCreateTabItem("")
GUISetState()
[/autoit] [autoit][/autoit] [autoit]GUIRegisterMsg($WM_DRAWITEM, "WM_DRAWITEM")
[/autoit] [autoit][/autoit] [autoit]_GUICtrlTab_SetCurSel($hTab, 2)
_GUICtrlTab_SetCurSel($hTab, 1)
_GUICtrlTab_SetCurSel($hTab, 0)
Do
Until GUIGetMsg() = -3
Func _GUICtrlTab_SetBkColor($hWnd, $hSysTab32, $sBkColor)
Local $aTabPos = ControlGetPos($hWnd, "", $hSysTab32)
Local $aTab_Rect = _GUICtrlTab_GetItemRect($hSysTab32, -1)
[/autoit] [autoit][/autoit] [autoit]GUICtrlCreateLabel("", $aTabPos[0]+2, $aTabPos[1]+$aTab_Rect[3]+4, $aTabPos[2]-6, $aTabPos[3]-$aTab_Rect[3]-7)
GUICtrlSetBkColor(-1, $sBkColor)
GUICtrlSetState(-1, $GUI_DISABLE)
EndFunc
Func WM_DRAWITEM($hWnd, $Msg, $wParam, $lParam)
Local $DRAWITEMSTRUCT = DllStructCreate("uint cType;uint cID;uint itmID;uint itmAction;uint itmState;" & _
"hwnd hItm;hwnd hDC;dword itmRect[4];dword itmData", $lParam)
If DllStructGetData($DRAWITEMSTRUCT, "cType") <> $ODT_TAB Then Return $GUI_RUNDEFMSG
If DllStructGetData($DRAWITEMSTRUCT, "itmAction") <> $ODA_DRAWENTIRE Then Return $GUI_RUNDEFMSG
Local $itmID = DllStructGetData($DRAWITEMSTRUCT, "itmID")
Local $hDC = DllStructGetData($DRAWITEMSTRUCT, "hDC")
Local $itmText = $aColTabItem[$itmID][0], $iBrushColor = $aColTabItem[$itmID][1]
[/autoit] [autoit][/autoit] [autoit]DLLCall("gdi32.dll","int","SetBkMode", "hwnd", $hDC, "int", 1)
[/autoit] [autoit][/autoit] [autoit]Local $iBrush = DLLCall("gdi32.dll","hwnd","CreateSolidBrush", "int", $iBrushColor)
$iBrush = $iBrush[0]
Local $iBrushOld = _WinAPI_SelectObject($hDC, $iBrush)
DLLCall("user32.dll","int","FillRect", "hwnd", $hDC, "ptr", DllStructGetPtr($DRAWITEMSTRUCT, "itmRect"), "hwnd", $iBrush)
Local $tBuffer = DllStructCreate("char[256]")
DllStructSetData($tBuffer, 1, $itmText)
$itmText = DllStructGetData($tBuffer, 1)
DllStructSetData($DRAWITEMSTRUCT, "itmRect", DllStructGetData($DRAWITEMSTRUCT, "itmRect", 1) + 10, 1)
DllStructSetData($DRAWITEMSTRUCT, "itmRect", DllStructGetData($DRAWITEMSTRUCT, "itmRect", 2) + 5, 2)
DllCall("user32.dll", "int", "DrawText", "hwnd", $hDC, "str", $itmText, "int", StringLen($itmText), _
"ptr", DllStructGetPtr($DRAWITEMSTRUCT, "itmRect"), "int", $DT_LEFT)
_WinAPI_SelectObject($hDC, $iBrushOld)
_WinAPI_DeleteObject($iBrush)
Return $GUI_RUNDEFMSG
EndFunc
Quelle: http://www.autoitscript.com/forum/index.php?showtopic=90624&view=findpost&p=651714
EDIT:
#include <TabConstants.au3>
#include <WinAPI.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiTab.au3>
Global Const $ODT_TAB = 101
Global Const $ODS_SELECTED = 0x0001
Global Const $ODA_DRAWENTIRE = 0x1
Global Const $ODS_FOCUS = 0x0010
Global $aColTabItem[3][2] = [['Item1',0x11AADD],["Item2",0xEEBB99],["Item3",0x4763FF]] ; [[TabItem-Bezeichnung,TabItem-Color]]
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate("Draw Tab", 300, 200)
$hTab = GUICtrlCreateTab(10, 10, 280, 180, $TCS_OWNERDRAWFIXED)
$TabItem_1 = GUICtrlCreateTabItem("Item1")
_GUICtrlTab_SetBkColor($hGUI, $hTab, 0xFFFF00)
GUICtrlCreateLabel("", 10, 33, 277, 155)
$TabItem_2 = GUICtrlCreateTabItem("Item2")
_GUICtrlTab_SetBkColor($hGUI, $hTab, 0x00FF00)
GUICtrlCreateLabel("", 10, 33, 277, 155)
$TabItem_2 = GUICtrlCreateTabItem("Item3")
_GUICtrlTab_SetBkColor($hGUI, $hTab, 0x00FFFF)
GUICtrlCreateLabel("", 10, 33, 277, 155)
GUICtrlCreateTabItem("")
GUISetState()
[/autoit] [autoit][/autoit] [autoit]GUIRegisterMsg($WM_DRAWITEM, "WM_DRAWITEM")
[/autoit] [autoit][/autoit] [autoit]_GUICtrlTab_SetCurSel($hTab, 2)
_GUICtrlTab_SetCurSel($hTab, 1)
_GUICtrlTab_SetCurSel($hTab, 0)
Do
Until GUIGetMsg() = -3
Func _GUICtrlTab_SetBkColor($hWnd, $hSysTab32, $sBkColor)
Local $aTabPos = ControlGetPos($hWnd, "", $hSysTab32)
Local $aTab_Rect = _GUICtrlTab_GetItemRect($hSysTab32, -1)
[/autoit] [autoit][/autoit] [autoit]GUICtrlCreateLabel("", $aTabPos[0]+2, $aTabPos[1]+$aTab_Rect[3]+4, $aTabPos[2]-6, $aTabPos[3]-$aTab_Rect[3]-7)
GUICtrlSetBkColor(-1, $sBkColor)
GUICtrlSetState(-1, $GUI_DISABLE)
EndFunc
Func WM_DRAWITEM($hWnd, $Msg, $wParam, $lParam)
Local $DRAWITEMSTRUCT = DllStructCreate("uint cType;uint cID;uint itmID;uint itmAction;uint itmState;" & _
"hwnd hItm;hwnd hDC;dword itmRect[4];dword itmData", $lParam)
If DllStructGetData($DRAWITEMSTRUCT, "cType") <> $ODT_TAB Then Return $GUI_RUNDEFMSG
If DllStructGetData($DRAWITEMSTRUCT, "itmAction") <> $ODA_DRAWENTIRE Then Return $GUI_RUNDEFMSG
Local $itmID = DllStructGetData($DRAWITEMSTRUCT, "itmID")
Local $hDC = DllStructGetData($DRAWITEMSTRUCT, "hDC")
Local $itmText = $aColTabItem[$itmID][0], $iBrushColor = $aColTabItem[$itmID][1]
[/autoit] [autoit][/autoit] [autoit]DLLCall("gdi32.dll","int","SetBkMode", "hwnd", $hDC, "int", 1)
[/autoit] [autoit][/autoit] [autoit]Local $iBrush = DLLCall("gdi32.dll","hwnd","CreateSolidBrush", "int", $iBrushColor)
$iBrush = $iBrush[0]
Local $iBrushOld = _WinAPI_SelectObject($hDC, $iBrush)
DLLCall("user32.dll","int","FillRect", "hwnd", $hDC, "ptr", DllStructGetPtr($DRAWITEMSTRUCT, "itmRect"), "hwnd", $iBrush)
Local $tBuffer = DllStructCreate("char[256]")
DllStructSetData($tBuffer, 1, $itmText)
$itmText = DllStructGetData($tBuffer, 1)
DllStructSetData($DRAWITEMSTRUCT, "itmRect", DllStructGetData($DRAWITEMSTRUCT, "itmRect", 1) + 10, 1)
DllStructSetData($DRAWITEMSTRUCT, "itmRect", DllStructGetData($DRAWITEMSTRUCT, "itmRect", 2) + 5, 2)
DllCall("user32.dll", "int", "DrawText", "hwnd", $hDC, "str", $itmText, "int", StringLen($itmText), _
"ptr", DllStructGetPtr($DRAWITEMSTRUCT, "itmRect"), "int", $DT_LEFT)
_WinAPI_SelectObject($hDC, $iBrushOld)
_WinAPI_DeleteObject($iBrush)
Return $GUI_RUNDEFMSG
EndFunc
Perfekt
danke DIr funkey. es ist genau das was ich gesucht hab.
Gruß Ralf