找回密码
 加入
搜索
查看: 9134|回复: 29

[系统综合] 求方法去除Combo右边的三角块区域

 火... [复制链接]
发表于 2011-11-25 09:53:42 | 显示全部楼层 |阅读模式
本帖最后由 网络小僧 于 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[0][0]
  GUICtrlSetData(-1, $var[$i][1],$var[1][1])
    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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-11-25 09:57:32 | 显示全部楼层
何必搞得这么麻烦呢? 直接用 $CBS_DROPDOWNLIST 样色就可以啦!
 楼主| 发表于 2011-11-25 09:58:00 | 显示全部楼层
这个样式 后 无法点击出现下拉啊
发表于 2011-11-25 10:05:40 | 显示全部楼层
回复 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
 楼主| 发表于 2011-11-25 10:13:44 | 显示全部楼层
水木子 兄弟  你没看清楚我的要求啊 呵呵 我要的是把那个三角形隐藏掉

代码我更新了直接读取INI的 你看看
发表于 2011-11-25 13:01:28 | 显示全部楼层
我的想法:

【方法一】
上面用一个 edit 控件,点击 button 后在其下面创建一个 list 控件。鼠标选择 list 中的一个item后,删除 list 控件,并将此 item 内容写入 edit 控件。
如果要让list控件中随鼠标移动而变化item高亮并同步更新到edit控件,可能需要捕获WM_MOUSEMOVE消息并判断鼠标位置,稍微复杂点。

【方法二】
画个白色矩形区域覆盖三角块区域,并做到始终在最上层显示。
发表于 2011-11-25 13:02:08 | 显示全部楼层
没有3角你打算怎么谈出下拉呢
发表于 2011-11-25 13:30:20 | 显示全部楼层
本帖最后由 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[1][1])
$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][0] <> 0 Then
                                $list = GUICtrlCreateList("", 24, 65, 153, 18*$var[0][0], -1, $WS_EX_STATICEDGE)
                                GUICtrlSetBkColor(-1, 0xffffff)
                                $data = ""
                                For $i = 1 To $var[0][0]
                                                $data &= $var[$i][1] & '|'
                                Next
                                If $index = -1 Then
                                                GUICtrlSetData(-1, $data, $var[1][1])
                                Else
                                                GUICtrlSetData(-1, $data, $var[$index+1][1])
                                EndIf
                        EndIf
                Case $GUI_EVENT_PRIMARYDOWN
                        If $list <> -1 Then
                                $Pos = GUIGetCursorInfo($Form1)
                                If $Pos[4] = $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
【方法二】
我暂时还不会。
发表于 2011-11-25 15:16:10 | 显示全部楼层

GUICtrlCreateCombo("text ",5,5,80,30,$WS_TABSTOP)
GUICtrlSetData(-1, "item2|item3")


去除了右边三角图,但是也去除了下拉表,但不影响数据使用,按方向键显示
发表于 2011-11-25 16:35:09 | 显示全部楼层
回复 8# xiehuahere
样子有点丑,呵呵!
发表于 2011-11-25 16:49:47 | 显示全部楼层
回复 10# xms77


    显示风格可以自己设置的嘛。
   来,listbox 控件加个细黑框。
$list = GUICtrlCreateList("", 24, 65, 153, 16*$var[0][0], -1, $WS_EX_STATICEDGE)
 楼主| 发表于 2011-11-25 17:03:44 | 显示全部楼层
有什么方法可以把那个三角形挡住呢 比如用张图片
 楼主| 发表于 2011-11-25 17:04:23 | 显示全部楼层
挡住最好 直接用个图片 求方法 我直接放个图片上去 一会地步的COMBO又上来了 挡不住啊
发表于 2011-11-25 19:13:57 | 显示全部楼层
这个想法还真另类……
创建个Input框,弹出个List窗口~
发表于 2011-11-25 21:29:53 | 显示全部楼层
回复 13# 网络小僧


    这种方法我也试过,确实这样。
   同样求解,帮你顶!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 20:04 , Processed in 0.087070 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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