求方法去除Combo右边的三角块区域
本帖最后由 网络小僧 于 2011-11-25 10:12 编辑想实现一个Combo的特殊效果,如下图:
如何把Combo1的右边的三角形区域这个点击的去掉,就是变成一个Input一样的输入框
(但不可输入,只能读取下拉菜单,且下来菜单可直接读取INI里的配置信息。)
同时点击Button1的时候Combo1就会下拉,需实现的PS效果图如下:
求高人解答下
帖上这个代码,方便大家实践操作,呵呵~
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$sIni=@TempDir&"\temp.ini"
$sData = "Key1=下拉A" & @LF & "Key2=下拉B" & @LF & "Key3=下拉C"
If Not FileExists(@TempDir&"\temp.ini") Then IniWriteSection($sIni, "Section", $sData)
$Form1 = GUICreate("Form1", 280, 134, 192, 124)
$combo1 = GUICtrlCreateCombo("", 24, 40, 153, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$var = IniReadSection($sIni, "section")
If @error Then
MsgBox(4096, "", "错误, 读取INI文件失败.")
Else
For $i = 1 To $var
GUICtrlSetData(-1, $var[$i],$var)
Next
EndIf
$Button1 = GUICtrlCreateButton("Button1", 192, 38, 57, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
;Case $Button1
;此处实现显示下拉效果,同时MSGBOX提示所选的值
EndSwitch
WEnd
何必搞得这么麻烦呢? 直接用 $CBS_DROPDOWNLIST 样色就可以啦! 这个样式 后 无法点击出现下拉啊 回复 3# 网络小僧
#include <GuiComboBox.au3>
#include <WindowsConstants.au3>
GUICreate('', 300, 150)
$combo1 = GUICtrlCreateCombo("", 30, 50, 150, 25, $CBS_DROPDOWNLIST)
GUICtrlSetData(-1, "下拉A|下拉B|下拉C", "下拉A")
$Button1 = GUICtrlCreateButton("Button1", 180, 48, 80, 25)
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
Exit
Case $Button1
_GUICtrlComboBox_ShowDropDown($combo1, True)
EndSwitch
WEnd 水木子 兄弟你没看清楚我的要求啊 呵呵 我要的是把那个三角形隐藏掉
代码我更新了直接读取INI的 你看看 我的想法:
【方法一】
上面用一个 edit 控件,点击 button 后在其下面创建一个 list 控件。鼠标选择 list 中的一个item后,删除 list 控件,并将此 item 内容写入 edit 控件。
如果要让list控件中随鼠标移动而变化item高亮并同步更新到edit控件,可能需要捕获WM_MOUSEMOVE消息并判断鼠标位置,稍微复杂点。
【方法二】
画个白色矩形区域覆盖三角块区域,并做到始终在最上层显示。 没有3角你打算怎么谈出下拉呢 本帖最后由 xiehuahere 于 2011-11-25 21:28 编辑
回复 1# 网络小僧
可能丑陋一点,仅供参考:#Include <GuiEdit.au3>
#Include <GuiListBox.au3>
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$sIni=@TempDir&"\temp.ini"
$sData = "Key1=下拉A" & @LF & "Key2=下拉B" & @LF & "Key3=下拉C"
If Not FileExists(@TempDir&"\temp.ini") Then IniWriteSection($sIni, "Section", $sData)
$Form1 = GUICreate("Form1", 280, 134, 192, 124)
$Edit1 = GUICtrlCreateEdit("", 24, 40, 153, 25, $ES_READONLY)
GUICtrlSetBkColor(-1, 0xffffff)
$var = IniReadSection($sIni, "section")
If @error Then MsgBox(4096, "", "错误, 读取INI文件失败.")
GUICtrlSetData(-1, $var)
$Button1 = GUICtrlCreateButton("Button1", 192, 38, 57, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$list = -1
$isSelected = 0
$index = -1
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
GUICtrlSetState($Button1, $GUI_DISABLE)
If $var <> 0 Then
$list = GUICtrlCreateList("", 24, 65, 153, 18*$var, -1, $WS_EX_STATICEDGE)
GUICtrlSetBkColor(-1, 0xffffff)
$data = ""
For $i = 1 To $var
$data &= $var[$i] & '|'
Next
If $index = -1 Then
GUICtrlSetData(-1, $data, $var)
Else
GUICtrlSetData(-1, $data, $var[$index+1])
EndIf
EndIf
Case $GUI_EVENT_PRIMARYDOWN
If $list <> -1 Then
$Pos = GUIGetCursorInfo($Form1)
If $Pos = $list Then
$isSelected = 1
$index = _GUICtrlListBox_GetCurSel($list)
GUICtrlSetData($Edit1, _GUICtrlListBox_GetText(GUICtrlGetHandle($list), $index))
EndIf
EndIf
Case $GUI_EVENT_PRIMARYUP
If $list <> -1 And $isSelected Then
$index = _GUICtrlListBox_GetCurSel($list)
GUICtrlSetData($Edit1, _GUICtrlListBox_GetText(GUICtrlGetHandle($list), $index))
GUICtrlDelete($list)
$list = -1
$isSelected = 0
GUICtrlSetState($Button1, $GUI_ENABLE)
EndIf
EndSwitch
WEnd【方法二】
我暂时还不会。
GUICtrlCreateCombo("text ",5,5,80,30,$WS_TABSTOP)
GUICtrlSetData(-1, "item2|item3")
去除了右边三角图,但是也去除了下拉表,但不影响数据使用,按方向键显示 回复 8# xiehuahere
样子有点丑,呵呵! 回复 10# xms77
显示风格可以自己设置的嘛。
来,listbox 控件加个细黑框。$list = GUICtrlCreateList("", 24, 65, 153, 16*$var, -1, $WS_EX_STATICEDGE) 有什么方法可以把那个三角形挡住呢 比如用张图片 挡住最好 直接用个图片 求方法 我直接放个图片上去 一会地步的COMBO又上来了 挡不住啊 这个想法还真另类……
创建个Input框,弹出个List窗口~ 回复 13# 网络小僧
这种方法我也试过,确实这样。
同样求解,帮你顶!
页:
[1]
2