heroxianf 发表于 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 = $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

chzj589 发表于 2017-6-4 10:56:50

回复 1# heroxianf
把第一个下拉框的宽度比第二个下拉框宽度长一些,不知行不?

chzj589 发表于 2017-6-4 11:02:20

上次讨论如何鼠标悬停就激活下拉控件问题,但是遇到一个新的问题,如果两个下拉控件上下靠的太近如果展开菜 ...
heroxianf 发表于 2017-6-4 10:33 http://www.autoitx.com/images/common/back.gif
让鼠标悬停的位置错开

heroxianf 发表于 2017-6-4 11:04:29

本帖最后由 heroxianf 于 2017-6-4 11:08 编辑

回复 3# chzj589

这样有点影响美观啊,   如果可以的话我更希望右键点击一下激活控件,然后滑动选取,或者下拉选取也不会冲突吧。主要是界面里的下拉控件有点多。

chzj589 发表于 2017-6-4 11:23:22

回复chzj589

这样有点影响美观啊,   如果可以的话我更希望右键点击一下激活控件,然后滑动选取,或者 ...
heroxianf 发表于 2017-6-4 11:04 http://www.autoitx.com/images/common/back.gif
下拉框没点击时与原来的还是一样

ura 发表于 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
                               
                                        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

heroxianf 发表于 2017-6-4 11:58:19

回复 5# chzj589

下来思考一下,应该可以解决

heroxianf 发表于 2017-6-4 14:09:16

回复 6# ura

QQQ,你能做一个右键激活控件的示例吗?

ura 发表于 2017-6-4 19:22:26

回复 8# heroxianf


处理 WM_RBUTTONDOWN 和 WM_RBUTTONUP

或GUI_EVENT_SECONDARYDOWN

kk_lee69 发表于 2017-6-5 01:07:04

回复 8# heroxianf

搜尋一下 有這樣的案例的

heroxianf 发表于 2017-6-5 10:22:28

回复 10# kk_lee69


    嗯,就是还没改成功,不太清楚原理。

kk_lee69 发表于 2017-6-5 10:29:23

回复 11# heroxianf

你找到的案例是哪個??

heroxianf 发表于 2017-6-5 12:46:35

回复 12# kk_lee69

http://www.autoitx.com/forum.php?mod=viewthread&tid=50734&highlight=%D0%FC%CD%A3

主要是这个,还看到你提的那个问题,监控GUI事件,我添加一个空间设置 就直接卡死了 没有提示报错。

kk_lee69 发表于 2017-6-5 20:31:50

回复 13# heroxianf

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

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

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

那左健 要幹嘛??

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

滑动选取???
下拉选取??

heroxianf 发表于 2017-6-5 21:49:41

回复 14# kk_lee69

我想实现的是 右键单击激活控件不用下拉就滑动选取;
左键单击下拉默认不变;
页: [1] 2 3
查看完整版本: 接上一次讨论,下拉框获取焦点问题[已解决]