找回密码
 加入
搜索
查看: 6128|回复: 13

[AU3基础] (已解决)如何返回指定控件的背景颜色代码

 火.. [复制链接]
发表于 2010-8-6 04:01:24 | 显示全部楼层 |阅读模式
本帖最后由 suifeng123 于 2010-8-7 16:35 编辑

如何返回指定控件的背景颜色啊???我查帮助文档查了一晚上也没查到,,,请高手指点一下啊。。。
谢谢!!!
发表于 2010-8-6 11:43:15 | 显示全部楼层
我也没找着,帮顶一下
要不然再找一晚上吧
 楼主| 发表于 2010-8-6 20:13:10 | 显示全部楼层
既然有 GUICtrlSetBkColor(),怎么没有反向的函数呢???
发表于 2010-8-6 22:36:09 | 显示全部楼层
不知道你要获得什么控件的背景色呢?
_GUICtrlRebar_GetBKColor?
_GUICtrlListView_GetBkColor?
_GUIToolTip_GetTipBkColor?
_GUICtrlTreeView_GetBkColor?
_GUICtrlRichEdit_GetBkColor?

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-8-7 02:09:21 | 显示全部楼层
既然有SetBkColor,当然就有GetBkColor了!
 楼主| 发表于 2010-8-7 07:51:26 | 显示全部楼层
是  GUICtrlCreateInput()   或  GUICtrlCreateEdit() 的
发表于 2010-8-7 09:58:35 | 显示全部楼层
学习了,谢谢。
 楼主| 发表于 2010-8-7 11:41:18 | 显示全部楼层
本帖最后由 suifeng123 于 2010-8-7 12:02 编辑

难道没有办法可以解决吗?
我的想法是: 输入或编辑框的文字是变颜色的,当变成白色时由于白色背景,文字就看不出来了,所以检测输入框或编辑框的背景颜色,当文字颜色变的很浅时,自动改变背景的颜色为深色的。当文字颜色变得很深时,改变背景为白色。请高手帮忙看如何解决。
发表于 2010-8-7 16:08:13 | 显示全部楼层
#include <GUIConstantsEx.au3>

#include <WinAPI.au3>
#include <WindowsConstants.au3>
Global $WINDOW_TO_QUERY, $___RGBTC, $___RGBBGC
GUIRegisterMsg($WM_CTLCOLORSTATIC, "MY_CTLCOLOR")
GUIRegisterMsg($WM_CTLCOLOREDIT, "MY_CTLCOLOR")
GUIRegisterMsg($WM_CTLCOLORBTN, "MY_CTLCOLOR")

$hGui = GUICreate('Test', 200, 200)
GUISetBkColor(0xABCDEF)

$hButton = GUICtrlCreateButton("change", 20, 160, 40, 20)
$hButton_1 = GUICtrlCreateButton("msg", 120, 160, 40, 20)
$Input = GUICtrlCreateInput('Simple text', 20, 20, 160, 20)
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlSetBkColor(-1, 0x0000FF)
GUISetState()

$Z = 1
While 1
        $msg = GUIGetMsg()
        Select
                Case $msg = $GUI_EVENT_CLOSE
                        ExitLoop
                Case $msg = $hButton
                        ;$color=0xABCDEF
                        If $Z = 1 Then
                                GUICtrlSetBkColor($Input, 0xABCDEF)
                                $Z = 0
                        Else
                                GUICtrlSetBkColor($Input, 0xADEFAC)
                                $Z = 1
                        EndIf
                Case $msg = $hButton_1
                        MsgBox(0, 'Colours in RGB format', 'Text colour input    = : 0x' & Hex(_WinAPI_GetTextColor($Input, 1), 6) & @CRLF & _
                                        'BackGnd colour input = : 0x' & Hex(_WinAPI_GetTextColor($Input), 6) & @CRLF & _
                                        'BackGnd colour GUI   = : 0x' & Hex(_WinAPI_GetBkColor($hGui), 6) & @CRLF)
        EndSelect
WEnd


; $BGC_TC = 0 for background colour,  $BGC_TC <> 0 for text colour
Func _WinAPI_GetTextColor($hWnd, $BGC_TC = 0)
        ; Prog@ndy
        Global $___RGBTC = -1, $___RGBBGC = -1
        If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
        $WINDOW_TO_QUERY = $hWnd
        _WinAPI_RedrawWindow($hWnd, 0, 0, $RDW_INVALIDATE + $RDW_UPDATENOW)
        Do
                Sleep(10)
        Until $___RGBTC <> -1 And $___RGBBGC <> -1
        If $BGC_TC = 0 Then
                Return $___RGBBGC
        Else
                Return $___RGBTC
        EndIf
EndFunc   ;==>_WinAPI_GetTextColor

Func MY_CTLCOLOR($hWnd, $uMsg, $wParam, $lParam)
        ; Prog@ndy
        If $lParam = $WINDOW_TO_QUERY Then
                Local $RGB = DllCall('gdi32.dll', 'int', 'GetTextColor', 'ptr', $wParam)
                If Not @error Then
                        Global $___RGBTC = "0x" & StringRegExpReplace(Hex($RGB[0], 6), "(.{2})(.{2})(.{2})", "\3\2\1")
                Else
                        Global $___RGBTC = -2
                EndIf
                Local $___RGBBGC = DllCall('gdi32.dll', 'int', 'GetBkColor', 'ptr', $wParam)
                If Not @error Then
                        Global $___RGBBGC = "0x" & StringRegExpReplace(Hex($___RGBBGC[0], 6), "(.{2})(.{2})(.{2})", "\3\2\1")
                Else
                        Global $___RGBBGC = -2
                EndIf
        EndIf
        Return 'GUI_RUNDEFMSG'
EndFunc   ;==>MY_CTLCOLOR

; Get background colour of GUI window, NOT a control.
Func _WinAPI_GetBkColor($hWnd)
        ; Not Prog@ndy
        Local $aResult, $hDC, $Res
        If Not IsHWnd($hWnd) Then $hWnd = ControlGetHandle("", "", $hWnd)
        $hDC = _WinAPI_GetDC($hWnd)
        $aResult = DllCall("GDI32.dll", "int", "GetBkColor", "hwnd", $hDC)
        ConsoleWrite("Hex($aResult[0], 6) = " & Hex($aResult[0], 6) & @CRLF)
        $Res = "0x" & StringRegExpReplace(Hex($aResult[0], 6), "(.{2})(.{2})(.{2})", "\3\2\1")
        _WinAPI_ReleaseDC($hWnd, $hDC)
        Return $Res
EndFunc   ;==>_WinAPI_GetBkColor

评分

参与人数 2金钱 +70 收起 理由
suifeng123 + 20
hzxymkb + 50

查看全部评分

 楼主| 发表于 2010-8-7 16:34:27 | 显示全部楼层
3mile 真厉害  !!!多谢
发表于 2012-1-8 14:35:38 | 显示全部楼层
学习了,谢谢。
发表于 2013-3-12 18:35:19 | 显示全部楼层
學習了.哈哈剛剛接觸AU3,壇力牛人還是很多嗎~~
发表于 2013-6-8 14:22:05 | 显示全部楼层
学习了,谢谢
发表于 2015-10-23 08:04:18 | 显示全部楼层
这个很好,大部分规范的控件都可以.可惜有些控件还是找不到.
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-27 01:15 , Processed in 0.106567 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表