关于_ChooseColor的示例[已解决]
本帖最后由 cashiba 于 2017-2-6 20:18 编辑#include <GUIConstantsEx.au3>
#include <Misc.au3>
#include <WindowsConstants.au3>
Example()
Func Example()
Local $hGUI, $idCOLORREF, $idBGR, $idRGB, $idMemo
$hGUI = GUICreate("创建颜色选择对话框", 400, 300)
$idMemo = GUICtrlCreateEdit("", 2, 55, 396, 200, BitOR($WS_VSCROLL, $WS_HSCROLL))
GUICtrlSetFont($idMemo, 10, 400, 0, "Courier New")
$idCOLORREF = GUICtrlCreateButton("COLORREF", 70, 10, 80, 40)
$idBGR = GUICtrlCreateButton("BGR", 160, 10, 80, 40)
$idRGB = GUICtrlCreateButton("RGB", 250, 10, 80, 40)
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $idCOLORREF
_ShowChoice($hGUI, $idMemo, 0, _ChooseColor(0, 255, 0, $hGUI), "选择的 COLORREF 颜色值为: ")
Case $idBGR
_ShowChoice($hGUI, $idMemo, 1, _ChooseColor(2, 0x808000, 1, $hGUI), "选择的 BGR 十六进制颜色值为: ")
Case $idRGB
_ShowChoice($hGUI, $idMemo, 2, _ChooseColor(2, 0x0080C0, 2, $hGUI), "选择的 RGB 十六进制颜色值为: ")
EndSwitch
WEnd
EndFunc ;==>Example
Func _ShowChoice($hGUI, $idMemo, $iType, $iChoose, $sMessage)
Local $sCr
If $iChoose <> -1 Then
If $iType = 0 Then ; 此示例将 COLORREF 转换为 RGB
$sCr = Hex($iChoose, 6)
GUISetBkColor('0x' & StringMid($sCr, 5, 2) & StringMid($sCr, 3, 2) & StringMid($sCr, 1, 2), $hGUI)
Else
GUISetBkColor($iChoose, $hGUI)
EndIf
GUICtrlSetData($idMemo, $sMessage & $iChoose & @CRLF, 1)
Else
GUICtrlSetData($idMemo, "用户取消选择" & @CRLF, 1)
EndIf
EndFunc ;==>_ShowChoice这段示例是不是有点问题....
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $idCOLORREF
_ShowChoice($hGUI, $idMemo, 0, _ChooseColor(0, 255, 0, $hGUI), "选择的 COLORREF 颜色值为: ")
Case $idBGR
_ShowChoice($hGUI, $idMemo, 1, _ChooseColor(2, 0x808000, 1, $hGUI), "选择的 BGR 十六进制颜色值为: ")
Case $idRGB
_ShowChoice($hGUI, $idMemo, 2, _ChooseColor(2, 0x0080C0, 2, $hGUI), "选择的 RGB 十六进制颜色值为: ")
EndSwitch
WEnd
上面的红色数字是不是原本应该为1?
另外:
1、话说BGR这种形式的颜色值倒地有何用处?
2、函数_ChooseColor ( [返回颜色类型 = 0 [, 默认选中颜色= 0 [, 默认选中颜色类型= 0 [,对话框的父窗口句柄= 0]]]] )中
为啥要加一个"默认选中颜色类型"这个参数?对结果有影响吗?
3、_ShowChoice感觉有点绕....
{:face (52):} 本帖最后由 cashiba 于 2017-2-3 22:47 编辑
#include <GUIConstantsEx.au3>
#include <Misc.au3>
#include <WindowsConstants.au3>
Example()
Func Example()
Local $hdGUI, $idREF, $idBGR, $idRGB, $idEDT
$hdGUI = GUICreate("创建颜色选择对话框", 400, 300)
$idEDT = GUICtrlCreateEdit("", 2, 55, 396, 200, BitOR($WS_VSCROLL, $WS_HSCROLL))
GUICtrlSetFont($idEDT, 10, 400, 0, "Courier New")
$idHUE = GUICtrlCreateButton("HUE", 70, 10, 80, 40)
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $idHUE
$msg=""
$Ret=_ChooseColor(0,0,0,$hdGUI)
$msg="选择的颜色" & @CRLF & "REF值为:" & $Ret & @CRLF
$Ret=_ChooseColor(1,0,0,$hdGUI)
$msg=$msg & "BGR值为:" & $Ret & @CRLF
$Ret=_ChooseColor(2,0,0,$hdGUI)
$msg=$msg & "RGB值为:" & $Ret & @CRLF
$msg=$msg & "----------------------" & @CRLF
_ShowChoice($hdGUI,$idEDT,0,$Ret,$msg)
EndSwitch
WEnd
EndFunc ;==>Example
Func _ShowChoice($hdGUI, $idEDT, $iType, $iChoose, $sMessage)
Local $sCr
If $iChoose <> -1 Then
If $iType = 0 Then ; 此示例将 COLORREF 转换为 RGB
$sCr = Hex($iChoose, 6)
GUISetBkColor('0x' & StringMid($sCr, 5, 2) & StringMid($sCr, 3, 2) & StringMid($sCr, 1, 2), $hdGUI)
Else
GUISetBkColor($iChoose, $hdGUI)
EndIf
GUICtrlSetData($idEDT, $sMessage, 1)
Else
GUICtrlSetData($idEDT, "用户取消选择" & @CRLF, 1)
EndIf
EndFunc ;==>_ShowChoice
#cs
创建颜色选择对话框.
#include <Misc.au3>
_ChooseColor ( [$iReturnType = 0 [, $iColorRef = 0 [, $iRefType = 0 [, $hWndOwnder = 0]]]] )
参 数
$iReturnType [可选] 定义返回颜色类型, 有效值:
0 - COLORREF RGB 颜色
1 - 十六进制 BGR 颜色
2 - 十六进制 RGB 颜色
$iColorRef [可选] 默认选中颜色
$iRefType [可选] 定义 $iColorRef 默认选中颜色类型, 有效值:
0 - COLORREF RGB 颜色
1 - 十六进制 BGR 颜色
2 - 十六进制 RGB 颜色
$hWndOwnder [可选] 对话框的父窗口句柄
返 回 值
成功: 返回颜色值
失败: 返回 -1
#ce改了一下,貌似也有点不好,需要选择三次,还不如直接把颜色值进行数字转换了。而且最后呈现的颜色也不对.....
{:face (396):} 回复 1# cashiba
1:RGB模式与BGR模式,本质上并没有太大区别。
RGB即是代表红、绿、蓝三个通道的颜色,BGR则反之。
目前运用最为广泛的就是RGB模式。
2:默认选中颜色参数,是当你颜色选择对话框时默认选中的颜色!比如将此参数设置为 0xFF0000 那么打开颜色选择对话框时,就会默认选中红色。
3:_ShowChoice 函数实际就是将颜色值转换为 GUISetBkColor 能够使用的颜色值并设置窗口背景色。 回复cashiba
1:RGB模式与BGR模式,本质上并没有太大区别。
RGB即是代表红、绿、蓝三个通道的颜色, ...
水木子 发表于 2017-2-4 12:02 http://www.autoitx.com/images/common/back.gif
一点小问题,感谢水版关注!
顺便问下:
Hex与StringtoHex有何不同?local $sStr="4227327"
Local $sHex=Hex($sStr)
ConsoleWrite("Str: " & $sStr & @CRLF & "Hex: " & $sHex & @CRLF)
$sHex=_StringToHex($sStr)
ConsoleWrite("Str: " & $sStr & @CRLF & "Hex: " & $sHex & @CRLF)
结果不同:
Str: 4227327
Hex: 004080FF
Str: 4227327
Hex: 34323237333237
两者参数含义不同?
Hex(表达式[, 长度])
_StringToHex ( $sString )
另外,004080FF转换为00FF8040
除了用StringMid($sCr, 5, 2) & StringMid($sCr, 3, 2) & StringMid($sCr, 1, 2)方法直接调换字符
用Bitrotate、bitshift怎么写? 回复 4# cashiba
Hex是针对数值型,_StringToHex是作用于字符型,我想应该是这样的吧!
关于004080FF的转换,我瞎弄的。
$sCr = '4080FF'
MsgBox(0, 0, '0x' & StringMid($sCr, 5, 2) & StringMid($sCr, 3, 2) & StringMid($sCr, 1, 2))
MsgBox(0, 0, '0x' & StringRegExpReplace($sCr, '(\w{2})(\w{2})(\w{2})', '\3\2\1')) 回复cashiba
Hex是针对数值型,_StringToHex是作用于字符型,我想应该是这样的吧!
水木子 发表于 2017-2-6 09:57 http://www.autoitx.com/images/common/back.gif
谢谢!我也是这样理解的....
{:face (332):}
十六进制数字高位和低位翻转,看样子用字符截取是简单可行的。上次望文生义,以为BitRotate、BitShift就是干这个的呢 $sCr = '4080FF'
MsgBox(0, 0, '0x' & StringMid($sCr, 5, 2) & StringMid($sCr, 3, 2) & StringMid($sCr, 1, 2))
MsgBox(0, 0, '0x' & StringRegExpReplace($sCr, '(\w{2})(\w{2})(\w{2})', '\3\2\1'))这段代码挺好的,这两天正好看了一点正则,对组捕获和后向引用有那么点印象,不然还真看不懂。很好的示例....
{:face (88):}
页:
[1]