cashiba 发表于 2019-9-20 14:24:12

文本框如何感知识别键盘动作?[已解决]

本帖最后由 cashiba 于 2019-9-20 22:00 编辑

#include <EditConstants.au3>
#include <GUIEdit.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3
_Example()
Func _Example()
GUICreate("MyGUIedit")
Local $idMyedit = GUICtrlCreateEdit("", 5, 5, 390, 320, $ES_AUTOVSCROLL + $WS_VSCROLL)
GUICtrlSetData(-1, "伤情最是晚凉天,憔悴斯人不堪怜。邀酒摧肠三杯醉,寻香惊梦五更寒。钗头凤斜卿有泪,荼靡花了我无缘。小楼寂寞新雨月,也难如钩也难圆。")
Local $Dummy = GUICtrlCreateDummy()
GUISetState(@SW_SHOW)
Send("{END}")
GUICtrlSetData($idMyedit, @CRLF & "同样的事情,同样的地方,同样的人物,但你若从不同的角度,不同的观点,不同的心情去看,便会得到不同的结论。", 1)
Local $Key = [["^a", $Dummy]]
GUISetAccelerators($Key)
_GUICtrlEdit_SetSel($idMyedit, 0, 0)
While 1
Switch GUIGetMsg()
   Case $GUI_EVENT_CLOSE
    ExitLoop
   Case $Dummy
    Local $aResult = DllCall("user32.dll", "hwnd", "GetFocus")
    Switch $aResult
   Case $idMyedit
      _GUICtrlEdit_SetSel($idMyedit, 0, -1)
    EndSwitch
EndSwitch
WEnd
GUIDelete()
EndFunc   ;==>_Example如上示例文本框代码。
1、如何感知并识别Ctrl+A键盘动作?
2、手工选定文本框中的部分字符串时,会高亮或反白显示
    如何用代码实现这一效果?

搜索发现有用GUICtrlCreateDummy实现Ctrl+A效果的,实践中好像有时会失灵....
没发现简捷完美的解决办法
是不是关键词没选对,以至于没搜索到匹配的帖子呢?

afan 发表于 2019-9-20 15:37:42

用 GUISetAccelerators() 设置窗口快捷键是最简单且有效的。“好像会失灵”应该是焦点没有在编辑框。你可以设置快捷键,加一个先将编辑框激活的动作

cashiba 发表于 2019-9-20 15:52:44

afan 发表于 2019-9-20 15:37
用 GUISetAccelerators() 设置窗口快捷键是最简单且有效的。“好像会失灵”应该是焦点没有在编辑框。你可以 ...

明白了,A大一眼就看出问题所在了
{:1_206:}
没注意到原帖是使用_GUICtrlEdit_Create创建的编辑框,所以DllCall("user32.dll", "hwnd", "GetFocus")检索当前焦点有用。用GUICtrlCreateEdit创建的编辑框就没气作用。

afan 发表于 2019-9-20 15:58:15

cashiba 发表于 2019-9-20 15:52
明白了,A大一眼就看出问题所在了

没注意到原帖是使用_GUICtrlEdit_Create创建的编辑框,所 ...

第24行改成 Case GUICtrlGetHandle($idMyedit) 就行了

cashiba 发表于 2019-9-20 16:01:25

再请教一下A大,如果要用代码高亮选定或标记文本框中的某个字符串,能实现吗?
比喻查找到文本框中某个字符串的位置(距起点字符的偏移量),然后抹黑,理论上似乎可以,但是基础太差,抹黑这一动作不知道怎么实现....
更不用说进一步改抹黑为抹红(改变颜色)了
是不是要用富文本框才行?

cashiba 发表于 2019-9-20 16:13:03

afan 发表于 2019-9-20 15:58
第24行改成 Case GUICtrlGetHandle($idMyedit) 就行了

对哦,DllCall要求的参数是句柄,转换成句柄就ok了
斩鬼啊,对DllCall、APi、struct之类的一直绕开没深入了解,导致代码都看不透彻
{:1_201:}

afan 发表于 2019-9-20 16:13:25

用富文本可以变色,不过很少人用,小题大做的事
EDIT编辑框很简单
#include <EditConstants.au3>
#include <GUIEdit.au3>
#include <WindowsConstants.au3>

_Example()

Func _Example()
        GUICreate("MyGUIedit")
        Local $idMyedit = GUICtrlCreateEdit("", 5, 5, 390, 320, $ES_AUTOVSCROLL + $WS_VSCROLL)
        GUICtrlSetData(-1, "伤情最是晚凉天,憔悴斯人不堪怜。邀酒摧肠三杯醉,寻香惊梦五更寒。钗头凤斜卿有泪,荼靡花了我无缘。小楼寂寞新雨月,也难如钩也难圆。")
        Local $iBtn = GUICtrlCreateButton('选择"晚凉天"', 5, 330)
        Local $Dummy = GUICtrlCreateDummy()
        GUISetState(@SW_SHOW)
        Send("{END}")
        GUICtrlSetData($idMyedit, @CRLF & "同样的事情,同样的地方,同样的人物,但你若从不同的角度,不同的观点,不同的心情去看,便会得到不同的结论。", 1)
        Local $Key = [["^a", $Dummy]]
        GUISetAccelerators($Key)
        _GUICtrlEdit_SetSel($idMyedit, 0, 0)
        While 1
                Switch GUIGetMsg()
                        Case -3
                                ExitLoop
                        Case $Dummy
                                GUICtrlSetState($idMyedit, 256)
                                _GUICtrlEdit_SetSel($idMyedit, 0, -1)
                        Case $iBtn
                                GUICtrlSetState($idMyedit, 256)
                                _GUICtrlEdit_SetSel($idMyedit, 4, 4 + 3)
                EndSwitch
        WEnd
        GUIDelete()
EndFunc   ;==>_Example

cashiba 发表于 2019-9-20 21:52:47

谢谢A大!
终于知道_GUICtrlEdit_SetSel派啥用场了,没有具体实践场景就是印象不深...
A大还顺便把代码化繁为简了,精通Au3果然能达到信手拈来的境界阿
{:1_206:}
页: [1]
查看完整版本: 文本框如何感知识别键盘动作?[已解决]