Statusbar - Verschiedene Farben für die einzelnen Parts

  • Hallo,
    hab gerade für das englische Hilfeforum folgenden Code geschrieben, um verschiedene Farben für die einzelnen Parts einer Statusbar anzuzeigen.
    Das kann sicher auch hier der/die eine oder andere gebrauchen.

    mfg
    funkey

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiStatusBar.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>

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

    Global $hGUI, $hStatus
    Global $aParts[3] = [75, 150, -1]

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

    $hGUI = GUICreate("StatusBar Set BkColor", 400, 300)
    GUIRegisterMsg($WM_DRAWITEM, "_WM_DRAWITEM")
    $hStatus = _GUICtrlStatusBar_Create($hGUI)
    GUISetState()

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

    ;~ _GUICtrlStatusBar_SetBkColor($hStatus, 0x5555DD)

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

    _GUICtrlStatusBar_SetParts($hStatus, $aParts)
    _GUICtrlStatusBar_SetText($hStatus, "Part 1", 0, $SBT_OWNERDRAW)
    _GUICtrlStatusBar_SetText($hStatus, "Part 2", 1, $SBT_OWNERDRAW)
    _GUICtrlStatusBar_SetText($hStatus, "Part 3", 2, $SBT_OWNERDRAW)

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()

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

    Func _WM_DRAWITEM($hWnd, $Msg, $wParam, $lParam)
    #forceref $Msg, $wParam, $lParam
    Local $tDRAWITEMSTRUCT = DllStructCreate("uint CtlType;uint CtlID;uint itemID;uint itemAction;uint itemState;HWND hwndItem;HANDLE hDC;long rcItem[4];ULONG_PTR itemData", $lParam)
    Local $itemID = DllStructGetData($tDRAWITEMSTRUCT, "itemID") ;part number
    Local $hDC = DllStructGetData($tDRAWITEMSTRUCT, "hDC")
    Local $tRect = DllStructCreate("long left;long top;long right; long bottom", DllStructGetPtr($tDRAWITEMSTRUCT, "rcItem"))
    Local $iTop = DllStructGetData($tRect, "top")
    Local $iLeft = DllStructGetData($tRect, "left")
    Local $hBrush

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

    Switch $itemID
    Case 0
    $hBrush = _WinAPI_CreateSolidBrush(0x555500)
    _WinAPI_FillRect($hDC, DllStructGetPtr($tRect), $hBrush)
    _WinAPI_SetBkMode($hDC, $TRANSPARENT)
    DllStructSetData($tRect, "top", $iTop + 1)
    DllStructSetData($tRect, "left", $iLeft + 1)
    _WinAPI_SetTextColor($hDC, 0x00FFFF)
    _WinAPI_DrawText($hDC, "Part 1", $tRect, $DT_LEFT)
    _WinAPI_DeleteObject($hBrush)
    Case 1
    $hBrush = _WinAPI_CreateSolidBrush(0x00FF00)
    _WinAPI_FillRect($hDC, DllStructGetPtr($tRect), $hBrush)
    _WinAPI_SetBkMode($hDC, $TRANSPARENT)
    DllStructSetData($tRect, "top", $iTop + 1)
    DllStructSetData($tRect, "left", $iLeft + 1)
    _WinAPI_DrawText($hDC, "Part 2", $tRect, $DT_LEFT)
    _WinAPI_DeleteObject($hBrush)
    Case 2
    $hBrush = _WinAPI_CreateSolidBrush(0xABCDEF)
    _WinAPI_FillRect($hDC, DllStructGetPtr($tRect), $hBrush)
    _WinAPI_SetBkMode($hDC, $TRANSPARENT)
    DllStructSetData($tRect, "top", $iTop + 1)
    DllStructSetData($tRect, "left", $iLeft + 1)
    _WinAPI_DrawText($hDC, "Part 3", $tRect, $DT_LEFT)
    _WinAPI_DeleteObject($hBrush)
    EndSwitch

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

    $tDRAWITEMSTRUCT = 0
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_DRAWITEM

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Danke!
    Cool ist für mich zwar was anderes, aber manchmal könnte es ganz nützlich sein.

    Was ist denn für dich cool? ;)

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯