anythinging 发表于 2021-2-25 22:24:10

【已解决】关于状态栏颜色的小问题

本帖最后由 anythinging 于 2021-2-26 11:33 编辑

遇到个小问题,背景色和状态栏用的是同样的代码,但显示 的颜色却不一样,系统是win10帮助文件中的这句不是很理解 ,返回 RGB COLORREF 颜色, 传递颜色值必须是 16 位 BGR 颜色值, 或 RGB COLORREF 值.
感谢指点!
#include <ColorConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <WinAPITheme.au3>

Example()

Func Example()
    Local $hGUI, $hStatus
    Local $aParts =
    ; 创建 GUI
    $hGUI = GUICreate("设置状态栏背景颜色", 400, 300)
   GUISetBkColor(0x0000FF)

      $hStatus = _GUICtrlStatusBar_Create($hGUI)
    GUISetState(@SW_SHOW)

    ; to allow the setting of Bk Color at least under Windows 10
    _WinAPI_SetWindowTheme($hStatus, "", "")

    ; 设置部件
    _GUICtrlStatusBar_SetParts($hStatus, $aParts)
    _GUICtrlStatusBar_SetText($hStatus, "部件 1")
    _GUICtrlStatusBar_SetText($hStatus, "部件 2", 1)
    _GUICtrlStatusBar_SetText($hStatus, "部件 3", 2)

    ; 设置背景颜色
;~   _GUICtrlStatusBar_SetBkColor($hStatus, $CLR_MONEYGREEN)
      _GUICtrlStatusBar_SetBkColor($hStatus, 0x0000FF)

    ; 循环到用户退出.
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
EndFunc   ;==>Example


afan 发表于 2021-2-25 23:13:40

一个是 RGB 一个是 BGR,顾名思义,需要替换下前两位后两位的位置,可以 Bit 位操作,也可以纯字符串操作

        ; 设置背景颜色
        _GUICtrlStatusBar_SetBkColor($hStatus, _sRGB2BGR('0x0000FF'))

Func _sRGB2BGR($sRGB)
        Return StringRegExpReplace(StringFormat('%06s', StringRegExpReplace($sRGB, '(?i)^0x', '')), '(?i)^(..)(..)(..)', '0x${3}${2}${1}')
EndFunc   ;==>_sRGB2BGR

anythinging 发表于 2021-2-25 22:28:27

之前设置gui,button一直用的是0x16进制颜色代码都是正常的,直到这次用在状态栏上不一样了。

anythinging 发表于 2021-2-26 11:32:48

感谢指点,已解决。
就算知道原因也没撤,不会写A版的那个表达式。

chzj589 发表于 2021-2-27 13:30:25


页: [1]
查看完整版本: 【已解决】关于状态栏颜色的小问题