文本框如何感知识别键盘动作?[已解决]
本帖最后由 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效果的,实践中好像有时会失灵....
没发现简捷完美的解决办法
是不是关键词没选对,以至于没搜索到匹配的帖子呢?
用 GUISetAccelerators() 设置窗口快捷键是最简单且有效的。“好像会失灵”应该是焦点没有在编辑框。你可以设置快捷键,加一个先将编辑框激活的动作 afan 发表于 2019-9-20 15:37
用 GUISetAccelerators() 设置窗口快捷键是最简单且有效的。“好像会失灵”应该是焦点没有在编辑框。你可以 ...
明白了,A大一眼就看出问题所在了
{:1_206:}
没注意到原帖是使用_GUICtrlEdit_Create创建的编辑框,所以DllCall("user32.dll", "hwnd", "GetFocus")检索当前焦点有用。用GUICtrlCreateEdit创建的编辑框就没气作用。 cashiba 发表于 2019-9-20 15:52
明白了,A大一眼就看出问题所在了
没注意到原帖是使用_GUICtrlEdit_Create创建的编辑框,所 ...
第24行改成 Case GUICtrlGetHandle($idMyedit) 就行了 再请教一下A大,如果要用代码高亮选定或标记文本框中的某个字符串,能实现吗?
比喻查找到文本框中某个字符串的位置(距起点字符的偏移量),然后抹黑,理论上似乎可以,但是基础太差,抹黑这一动作不知道怎么实现....
更不用说进一步改抹黑为抹红(改变颜色)了
是不是要用富文本框才行? afan 发表于 2019-9-20 15:58
第24行改成 Case GUICtrlGetHandle($idMyedit) 就行了
对哦,DllCall要求的参数是句柄,转换成句柄就ok了
斩鬼啊,对DllCall、APi、struct之类的一直绕开没深入了解,导致代码都看不透彻
{:1_201:} 用富文本可以变色,不过很少人用,小题大做的事
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 谢谢A大!
终于知道_GUICtrlEdit_SetSel派啥用场了,没有具体实践场景就是印象不深...
A大还顺便把代码化繁为简了,精通Au3果然能达到信手拈来的境界阿
{:1_206:}
页:
[1]