找回密码
 加入
搜索
查看: 7843|回复: 34

[GUI管理] 接上一次讨论,下拉框获取焦点问题[已解决]

[复制链接]
发表于 2017-6-4 10:33:03 | 显示全部楼层 |阅读模式
本帖最后由 heroxianf 于 2017-6-7 21:40 编辑

上次讨论如何鼠标悬停就激活下拉控件问题,但是遇到一个新的问题,如果两个下拉控件上下靠的太近如果展开菜单选区,鼠标滑过下面或是上面的下拉控件,就会自动缩回菜单,体验有点不好,有么有解决的办法?
或者采用鼠标右键点击控件才激活控件呢?



#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <GuiComboBox.au3>

Example()

Func Example()

        Local $hGUI = GUICreate("ComboBox", 300, 200)
        Local $idComboBox1 = GUICtrlCreateCombo("test1", 10, 10, 185, 20, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $CBS_DROPDOWNLIST))
        Local $idComboBox2 = GUICtrlCreateCombo("中文1", 10, 50, 185, 20, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $CBS_DROPDOWNLIST))
        Local $idClose = GUICtrlCreateButton("关闭", 210, 170, 85, 25)
        GUICtrlSetData($idComboBox1, "test2|test3|test4", "test4")
        GUICtrlSetData($idComboBox2, "中文2|中文3|中文4", "中文4")

        GUISetState(@SW_SHOW, $hGUI)

        While 1
                
                $Info = GUIGetCursorInfo($hGUI)
                If $Info[4] = $idComboBox1 Or $Info[4] = $idComboBox2 Then
                        GUICtrlSetState($Info[4], $GUI_FOCUS)
                EndIf
                
                Switch GUIGetMsg()
                        Case $GUI_EVENT_CLOSE, $idClose
                                ExitLoop
                        Case $idComboBox1

                        Case $idComboBox2


                EndSwitch
        WEnd
        GUIDelete($hGUI)
EndFunc   ;==>Example

本帖子中包含更多资源

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

×
发表于 2017-6-4 10:56:50 | 显示全部楼层
回复 1# heroxianf
把第一个下拉框的宽度比第二个下拉框宽度长一些,不知行不?
发表于 2017-6-4 11:02:20 | 显示全部楼层
上次讨论如何鼠标悬停就激活下拉控件问题,但是遇到一个新的问题,如果两个下拉控件上下靠的太近如果展开菜 ...
heroxianf 发表于 2017-6-4 10:33

让鼠标悬停的位置错开

本帖子中包含更多资源

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

×
 楼主| 发表于 2017-6-4 11:04:29 | 显示全部楼层
本帖最后由 heroxianf 于 2017-6-4 11:08 编辑

回复 3# chzj589

这样有点影响美观啊,   如果可以的话我更希望右键点击一下激活控件,然后滑动选取,或者下拉选取也不会冲突吧。  主要是界面里的  下拉控件有点多。
发表于 2017-6-4 11:23:22 | 显示全部楼层
回复  chzj589

这样有点影响美观啊,   如果可以的话我更希望右键点击一下激活控件,然后滑动选取,或者 ...
heroxianf 发表于 2017-6-4 11:04

下拉框没点击时与原来的还是一样

本帖子中包含更多资源

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

×
发表于 2017-6-4 11:56:48 | 显示全部楼层
本帖最后由 ura 于 2017-6-4 11:57 编辑
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <GuiComboBox.au3>
 
Example()
 
Func Example()
                Local $iClick = 1
        Local $hGUI = GUICreate("ComboBox", 300, 200)
        Local $idComboBox1 = GUICtrlCreateCombo("test1", 10, 10, 185, 20, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $CBS_DROPDOWNLIST))
        Local $idComboBox2 = GUICtrlCreateCombo("中文1", 10, 50, 185, 20, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $CBS_DROPDOWNLIST))
        Local $idClose = GUICtrlCreateButton("关闭", 210, 170, 85, 25)
        GUICtrlSetData($idComboBox1, "test2|test3|test4", "test4")
        GUICtrlSetData($idComboBox2, "中文2|中文3|中文4", "中文4")
 
        GUISetState(@SW_SHOW, $hGUI)
 
        While 1
                
                Dim $Info = GUIGetCursorInfo($hGUI)
                                Switch $Info[4]
                                
                                        Case $idComboBox1
                                                GUICtrlSetState($Info[4], $GUI_FOCUS)
                                        
                                        Case $idComboBox2
                                                If $iClick <> 1 Then
                                                        GUICtrlSetState($idComboBox2, $GUI_FOCUS)
                                                EndIf
                                                
                                        Case Else
                                        
                                EndSwitch
                                
                Switch GUIGetMsg()
                        Case $GUI_EVENT_CLOSE, $idClose
                                ExitLoop
                                                                
                        Case $idComboBox1
                                                        $iClick = 1
                                                        
                        Case $idComboBox2

                                                        ;Todo...
                EndSwitch
        WEnd
        GUIDelete($hGUI)
EndFunc   ;==>Example
 楼主| 发表于 2017-6-4 11:58:19 | 显示全部楼层
回复 5# chzj589

下来思考一下,应该可以解决
 楼主| 发表于 2017-6-4 14:09:16 | 显示全部楼层
回复 6# ura

QQQ,你能做一个右键激活控件的示例吗?
发表于 2017-6-4 19:22:26 | 显示全部楼层
回复 8# heroxianf


处理 WM_RBUTTONDOWN 和 WM_RBUTTONUP

或GUI_EVENT_SECONDARYDOWN
发表于 2017-6-5 01:07:04 | 显示全部楼层
回复 8# heroxianf

搜尋一下 有這樣的案例的
 楼主| 发表于 2017-6-5 10:22:28 | 显示全部楼层
回复 10# kk_lee69


    嗯,就是还没改成功,不太清楚原理。
发表于 2017-6-5 10:29:23 | 显示全部楼层
回复 11# heroxianf

你找到的案例是哪個??
 楼主| 发表于 2017-6-5 12:46:35 | 显示全部楼层
回复 12# kk_lee69

http://www.autoitx.com/forum.php ... hlight=%D0%FC%CD%A3

主要是这个,还看到你提的那个问题,监控GUI事件,我添加一个空间设置 就直接卡死了 没有提示报错。
发表于 2017-6-5 20:31:50 | 显示全部楼层
回复 13# heroxianf

甚麼叫做右鍵 激活控件??

一般來說  不是 按下左健  就可以下拉嗎??

你是要改成  右鍵 下拉 嗎??

那左健 要幹嘛??

我看不太懂你們的用詞用語.....只能大概猜意思??

滑动选取???
下拉选取??
 楼主| 发表于 2017-6-5 21:49:41 | 显示全部楼层
回复 14# kk_lee69

我想实现的是 右键单击激活控件不用下拉就滑动选取;
左键单击下拉默认不变;
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-3-29 00:17 , Processed in 0.082313 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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