接上一次讨论,下拉框获取焦点问题[已解决]
本帖最后由 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 = $idComboBox1 Or $Info = $idComboBox2 Then
GUICtrlSetState($Info, $GUI_FOCUS)
EndIf
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $idClose
ExitLoop
Case $idComboBox1
Case $idComboBox2
EndSwitch
WEnd
GUIDelete($hGUI)
EndFunc ;==>Example
回复 1# heroxianf
把第一个下拉框的宽度比第二个下拉框宽度长一些,不知行不? 上次讨论如何鼠标悬停就激活下拉控件问题,但是遇到一个新的问题,如果两个下拉控件上下靠的太近如果展开菜 ...
heroxianf 发表于 2017-6-4 10:33 http://www.autoitx.com/images/common/back.gif
让鼠标悬停的位置错开
本帖最后由 heroxianf 于 2017-6-4 11:08 编辑
回复 3# chzj589
这样有点影响美观啊, 如果可以的话我更希望右键点击一下激活控件,然后滑动选取,或者下拉选取也不会冲突吧。主要是界面里的下拉控件有点多。 回复chzj589
这样有点影响美观啊, 如果可以的话我更希望右键点击一下激活控件,然后滑动选取,或者 ...
heroxianf 发表于 2017-6-4 11:04 http://www.autoitx.com/images/common/back.gif
下拉框没点击时与原来的还是一样
本帖最后由 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
Case $idComboBox1
GUICtrlSetState($Info, $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
回复 5# chzj589
下来思考一下,应该可以解决 回复 6# ura
QQQ,你能做一个右键激活控件的示例吗? 回复 8# heroxianf
处理 WM_RBUTTONDOWN 和 WM_RBUTTONUP
或GUI_EVENT_SECONDARYDOWN 回复 8# heroxianf
搜尋一下 有這樣的案例的 回复 10# kk_lee69
嗯,就是还没改成功,不太清楚原理。 回复 11# heroxianf
你找到的案例是哪個?? 回复 12# kk_lee69
http://www.autoitx.com/forum.php?mod=viewthread&tid=50734&highlight=%D0%FC%CD%A3
主要是这个,还看到你提的那个问题,监控GUI事件,我添加一个空间设置 就直接卡死了 没有提示报错。 回复 13# heroxianf
甚麼叫做右鍵 激活控件??
一般來說不是 按下左健就可以下拉嗎??
你是要改成右鍵 下拉 嗎??
那左健 要幹嘛??
我看不太懂你們的用詞用語.....只能大概猜意思??
滑动选取???
下拉选取?? 回复 14# kk_lee69
我想实现的是 右键单击激活控件不用下拉就滑动选取;
左键单击下拉默认不变;