duxing 发表于 2020-4-18 14:24:47

输入框响应输入问题【已解决】

本帖最后由 duxing 于 2020-4-20 08:54 编辑

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
      Local $hWndFrom, $iIDFrom, $iCode, $hWndCombo,$hWndCombo1
      If Not IsHWnd($Input24) Then $hWndCombo = GUICtrlGetHandle($Input24)
                ;If Not IsHWnd($Input25) Then $hWndCombo1 = GUICtrlGetHandle($Input25)
      $hWndFrom = $ilParam
      $iIDFrom = BitAND($iwParam, 0xFFFF)
      $iCode = BitShift($iwParam, 16)
      Switch $hWndFrom
                Case $Input24, $hWndCombo
                        Switch $iCode
                                                      Case $CBN_EDITUPDATE
                                                               
                                                Local $sQueryText = ''
                        Local $sCondition, $hQuery, $aRow
                        $sColumn_Name = GUICtrlRead($Combo12)
                                                if $sColumn_Name ="编码" then $sColumn_Name ="column1"
                                                if $sColumn_Name ="描述" then $sColumn_Name ="column2"
                                                if $sColumn_Name ="简称" then $sColumn_Name ="column3"
                                                if $sColumn_Name ="分类" then $sColumn_Name ="column4"

                     $sCondition = $sColumn_Name & ' LIKE "%' & _GUICtrlComboBox_GetEditText ( $Input24) & '%"'

                        GUICtrlSendMsg($ListView1, 4105, 0, 0)
                        _SQLite_Open($sSQLite_DB_Path)

                  _SQLite_Query(-1, 'SELECT * FROM TestTable WHERE ' & $sCondition, $hQuery)
                                                ;GUICtrlCreateListViewItem($sQueryText, $ListView1)
                        While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK
                              $sQueryText = $aRow & '|' & $aRow & '|' & $aRow & '|' & $aRow & '|' & $aRow & '|' & $aRow

                              GUICtrlCreateListViewItem($sQueryText, $ListView1)

                        WEnd
                        _SQLite_Close()
                                       

EndSwitch

输入框输入字符,自动SQLITE查询列出,不知道会不会因为过快经常会列出很多无用结果,可有人遇到过?

duxing 发表于 2020-4-18 16:07:34

floor6ggg 发表于 2020-4-18 15:49
无法进行调试,猜测。。。。。。。。。。。。

1.在上面贴出的代码的20行,对21行用到的_GUICtrlComboBox ...

01.consolewrite(_GUICtrlComboBox_GetEditText ( $Input24) & @CRLF) 这个测试过,是我需要的数值,而且查询结果前面部分也是无误的。
我觉得可能问题是出在SQLITE查询状态没结束,又重复打开再查询

floor6ggg 发表于 2020-4-18 15:49:22

本帖最后由 floor6ggg 于 2020-4-18 15:52 编辑

无法进行调试,猜测。。。。。。。。。。。。

1.在上面贴出的代码的20行,对21行用到的_GUICtrlComboBox_GetEditText ( $Input24)这一个指标consolewrite,然后自己进行监测,看看每一次取得的数值是不是自己需要的:consolewrite(_GUICtrlComboBox_GetEditText ( $Input24) & @CRLF)
2.实在不行的话,对21行用到的_GUICtrlComboBox_GetEditText ( $Input24)进行限定和判断,只有当stringlen(_GUICtrlComboBox_GetEditText ( $Input24))>2的时候才触发下一步动作:if stringlen(_GUICtrlComboBox_GetEditText ( $Input24))>2 then
。。。。。。。。。。。。。。。。。。根据自己的需要调整字符长度………………

floor6ggg 发表于 2020-4-18 16:33:43

数据库查询这块不熟,坐等高人出手。。。。
没得调试,只能凭感觉。。。个人感觉,试一下第23行的注销一下看看。。。?我能想到的最后一个怀疑对象。。。。

duxing 发表于 2020-4-18 16:49:34

我要是在$Input24 中输入字符慢慢打,结果就是正常的,一打快就不行,咋样才能限制下增加个查询延迟?

floor6ggg 发表于 2020-4-18 21:22:15

输入框是input控件而不是combo控件?试试:
第11行的: Case $CBN_EDITUPDATE更改为Case $EN_CHANGE

还不行的话,真得撤了^^^^^^^

chzj589 发表于 2020-4-19 10:00:43

本帖最后由 chzj589 于 2020-4-19 10:08 编辑

duxing 发表于 2020-4-18 16:49
我要是在$Input24 中输入字符慢慢打,结果就是正常的,一打快就不行,咋样才能限制下增加个查询延迟?
这样试试看

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
      #forceref $hWnd, $iMsg
      Local $hWndFrom, $iIDFrom, $iCode
      $hWndFrom = $ilParam
      $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
      $iCode = BitShift($iwParam, 16) ; Hi Word
      $a = GUIGetCursorInfo($WinMainSub2)
      Switch $iIDFrom
                Case $Input24
                        If $a = 0 Then
                        _XRichEditxaD()
                        ;Else
                        EndIf
      EndSwitch
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

Func _XRichEditxaD();搜索信息查询
      Local $sQueryText = ''
      Local $sCondition, $hQuery, $aRow
      $sColumn_Name = GUICtrlRead($Combo12)
      If $sColumn_Name = "编码" Then $sColumn_Name = "column1"
      If $sColumn_Name = "描述" Then $sColumn_Name = "column2"
      If $sColumn_Name = "简称" Then $sColumn_Name = "column3"
      If $sColumn_Name = "分类" Then $sColumn_Name = "column4"
      $sCondition = $sColumn_Name & ' LIKE "%' & _GUICtrlComboBox_GetEditText($Input24) & '%"'
      GUICtrlSendMsg($ListView1, 4105, 0, 0)
      _SQLite_Open($sSQLite_DB_Path)
      _SQLite_Query(-1, 'SELECT * FROM TestTable WHERE ' & $sCondition, $hQuery)
      ;GUICtrlCreateListViewItem($sQueryText, $ListView1)
      While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK
                $sQueryText = $aRow & '|' & $aRow & '|' & $aRow & '|' & $aRow & '|' & $aRow & '|' & $aRow
                GUICtrlCreateListViewItem($sQueryText, $ListView1)
      WEnd
      _SQLite_Close()
EndFunc   ;==>_XRichEditxaD






duxing 发表于 2020-4-20 08:39:02

floor6ggg 发表于 2020-4-18 21:22
输入框是input控件而不是combo控件?试试:
第11行的: Case $CBN_EDITUPDATE更改为



是combo控件
不能替换,替换就没响应了

duxing 发表于 2020-4-20 08:45:04

本帖最后由 duxing 于 2020-4-20 09:03 编辑

chzj589 发表于 2020-4-19 10:00
这样试试看

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)

已解决,就是还没搞懂原理,$a = GUIGetCursorInfo($hGui1)?实际作用是不是就是加个延迟?Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
      Local $hWndFrom, $iIDFrom, $iCode, $hWndCombo,$hWndCombo1
      If Not IsHWnd($Input24) Then $hWndCombo = GUICtrlGetHandle($Input24)
                ;If Not IsHWnd($Input25) Then $hWndCombo1 = GUICtrlGetHandle($Input25)
      $hWndFrom = $ilParam
      $iIDFrom = BitAND($iwParam, 0xFFFF)
      $iCode = BitShift($iwParam, 16)
               $a = GUIGetCursorInfo($hGui1)
      Switch $hWndFrom
                Case $Input24, $hWndCombo
                     
                                                If $a = 0 Then _XRichEditxaD()

          EndSwitch
      Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND
页: [1]
查看完整版本: 输入框响应输入问题【已解决】