怎么把键盘上的BacKspace退格键功能写到控件Button上(已解决)
本帖最后由 qsy666888 于 2018-3-6 14:52 编辑怎么把键盘上的BacKspace退格键功能写到控件Button上, 我试了几次没有弄得成功#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 316, 251)
$Group1 = GUICtrlCreateGroup("Group1", 8, 8, 297, 233)
$Input1 = GUICtrlCreateInput("123456789abcdefg", 48, 48, 233, 21)
$BacKspace = GUICtrlCreateButton("退格(BacKspace)", 104, 136, 130, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case$BacKspace
Sleep(100)
MouseUp("left")
EndSwitch
WEnd #include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 316, 251)
$Group1 = GUICtrlCreateGroup("Group1", 8, 8, 297, 233)
$Input1 = GUICtrlCreateInput("123456789abcdefg", 48, 48, 233, 21)
$BacKspace = GUICtrlCreateButton("退格(BacKspace)", 104, 136, 130, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $BacKspace
ControlFocus($Form1, "", $Input1)
;从后删除这个好
; GUICtrlSetState($Input1, $GUI_FOCUS)
;Send("{END}")
Send("{BACKSPACE}")
Sleep(100)
MouseUp("left")
EndSwitch
WEnd
回复 2# 志艺风云
谢谢谢谢 2楼的代码是个"伪退格"功能.
我这个才是真正的退格,可以直接发送退格键,也可以不发送任何按键.#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#region ### START Koda GUI section ### Form=
Global $bSel = False
$Form1 = GUICreate("Form1", 316, 220)
$Group1 = GUICtrlCreateGroup("Group1", 8, 8, 297, 200)
$Input1 = GUICtrlCreateInput("123456789abcdefg", 48, 48, 233, 21)
GUICtrlCreateInput("完全模拟按键:有输入焦点时,操作才有效", 48, 95, 233, 21)
$BacKspace = GUICtrlCreateButton("发送退格", 84, 150, 60, 25)
$BacKspace2 = GUICtrlCreateButton("模拟退格", 170, 150, 60, 25)
GUICtrlSetState(-1, $gui_focus)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_EVENT_PRIMARYUP, $GUI_EVENT_SECONDARYUP
_Sel_not()
Case $BacKspace
_BackSpace()
Case $BacKspace2
_BackSpace_2()
EndSwitch
WEnd
Func _Sel_not()
Local $aCur = GUIGetCursorInfo($Form1)
If IsArray($aCur) Then
If $aCur == $BacKspace Then Return
If $aCur == $BacKspace2 Then Return
If $aCur == $Input1 Then
$bSel = True
Else
$bSel =False
EndIf
EndIf
EndFunc ;==>MY_WM_COMMAND
Func _BackSpace_2()
If Not $bSel Then Return
; 有输入焦点时,才处理
Local $str = GUICtrlRead($Input1)
Local $iLen, $iCol
Local $sLeft, $sRight, $sSel
$sSel = ControlCommand($Form1, '', $Input1, 'GetSelected') ;选中的字符
$iCol = ControlCommand($Form1, '', $Input1, 'GetCurrentCol');插入点位置
If $sSel == 0 Then ;未选取字符
If $iCol > 1 Then ;输入焦点在第1个字符后面,只删除插入点前一字符.
$sLeft = StringMid($str, 1, $iCol - 2)
$sRight = StringMid($str, $iCol)
GUICtrlSetData($Input1, $sLeft & $sRight)
GUICtrlSendMsg($Input1, $EM_SETSEL, $iCol - 2, $iCol - 2)
EndIf
Else
$iLen = StringLen($sSel)
$sLeft = StringMid($str, 1, $iCol - 1)
$sRight = StringMid($str, $iCol + $iLen)
GUICtrlSetData($Input1, $sLeft & $sRight)
GUICtrlSendMsg($Input1, $EM_SETSEL, $iCol - 1, $iCol - 1)
EndIf
ControlFocus($Form1, '', $Input1)
EndFunc ;==>_BackSpace
Func _BackSpace()
If Not $bSel Then Return
; 有输入焦点时,才处理
ControlFocus($Form1, '', $Input1)
Send('{BACKSPACE}')
EndFunc
本帖最后由 Alam 于 2018-2-24 22:22 编辑
简化一下,上楼的关键函数.Func _BackSpace_2()
If Not $bSel Then Return
; 有输入焦点时,才处理
Local $str = GUICtrlRead($Input1)
Local $aR, $sLeft, $sRight
$aR = GUICtrlRecvMsg($Input1, $EM_GETSEL)
If Not IsArray($aR) Then Return
If $aR == 1 Then Return
$sLeft = StringMid($str, 1, $aR - 1)
$sRight = StringMid($str, $aR + 1)
GUICtrlSetData($Input1, $sLeft & $sRight)
GUICtrlSendMsg($Input1, $EM_SETSEL, $aR, $aR)
ControlFocus($Form1, '', $Input1)
EndFunc ;==>_BackSpace_2 回复 5# Alam
谢谢谢谢,高手在民间哈
不过遇到一个问题,#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 260, 188, 192, 124)
$Input1 = GUICtrlCreateInput("", 40, 24, 185, 40, $ES_MULTILINE);高度不变的情况下,现在有两行的限制,能否继续向下输入
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
页:
[1]