如何 捕获 EDIT 控件里的 回车事件???[已解决]
本帖最后由 kk_lee69 于 2016-4-21 10:18 编辑如下测试 语法
INPUT 的回车可以得到 A
可是 EDIT 的 无法 秀出 B
求解
#include <ComboConstants.au3>
#include <WindowsConstants.au3>
$hGui = GUICreate("Form1", 250, 150)
$Input1 = GUICtrlCreateInput("", 20, 20, 200, 21)
$Input2 = GUICtrlCreateEdit("", 20, 50, 200, 40,$WS_VSCROLL)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case - 3
Exit
Case $Input1
MsgBox(0,"A","A")
Case $Input2
MsgBox(0,"B","B")
EndSwitch
WEnd 回复 1# kk_lee69
进入论坛“搜索”页面,搜索关键词“回车”,里面有你想要的答案。 本帖最后由 kk_lee69 于 2016-4-15 10:36 编辑
回复 2# 水木子
那篇 好像是您的文章關於 COMBO 的回車事件那個方法 我了解 昨天發文後
在研究了一下理解了但是我想知道的是難道 EDIT 裡面無法像 INPUT 這樣簡單的處理嗎??
或者 我需要的是 INPUT 的功能 但是 需要多行顯示
我試著 將 INPUT1 改成下面 結果 跟EDIT 一樣回車功能 失效了
$Input1 = GUICtrlCreateInput("", 20, 20, 200, 40,$ES_MULTILINE+$WS_VSCROLL)
INPUT 的功能有個特點是要有打新的 資料 回車 才有用一次意思是資料要有改變 回車才有用
我希望保留這個功能又可以單純的超過寬度換行顯示而已
題外話 考慮改頭像鳴人跟佐助 呵呵 目前能够想到的其他办法就是注册消息。
话说你是台湾人吗?怎么用的都是繁体字呢! 回复 4# 水木子
是的 我是台灣的 所以用繁體字用詞用語 也會跟你們不太一樣
如果吃力還請見諒 回复 5# kk_lee69
光是控件样式的话,目前想到的只有这些,至于你说的内容有更新,回车键才起作用,暂时没想到比较好的办法解决。
要不然就截取回车键的消息。
#include <GuiEdit.au3>
#include <WindowsConstants.au3>
GUICreate('', 400, 300)
$Edit1 = GUICtrlCreateEdit('', 2, 2, 394, 268, $WS_VSCROLL + $ES_MULTILINE + $ES_WANTRETURN + $ES_AUTOVSCROLL)
GUISetState()
Do
Until GUIGetMsg() = - 3 回复 6# 水木子
看來是沒有其他 方法了
你之前的方法是 利用快捷鍵的 方式也有點算熱鍵然後再去判斷 目前的 焦點在哪邊
如果要目標控件上的話 就 反應
看來目前也只有這個方法至於 控件 內容有更新 才變動
剛剛想到的是在賦值的時候 先記錄長度 判斷的時候 再比對 長度長度有變動 就認定有更新過
但是 總覺得這是土法煉鋼的 方法呵呵 但是 好像是目前唯一的方法 回复 7# kk_lee69
嗯!我也是这么想的。 本帖最后由 zldfsz 于 2016-4-16 01:52 编辑
用风行者的“ComboBox响应回车事件”例子稍加修改就能得到EDIT的回车事件,至于你说的資料要有改變 回車才有用,可以用一个变量记录上一次回车时读取到的内容,和本次回车时读取到的内容做比较,如果相同,就不执行指定代码,不相同则更新变量并执行相应代码 #PRE_UseX64=n
#include <Winapi.au3>
#include <ComboConstants.au3>
#include <WindowsConstants.au3>
Global Const $VK_RETURN = 0x0D
$hGui = GUICreate("Form1", 250, 150)
$Input1 = GUICtrlCreateInput("", 20, 20, 200, 21)
$Input2 = GUICtrlCreateEdit("", 20, 50, 200, 40, $WS_VSCROLL)
$Edit = GUICtrlGetHandle($Input2)
$wProcNew = DllCallbackRegister("_MyWindowProc", "ptr", "hwnd;uint;long;ptr")
$wProcOld = _WinAPI_SetWindowLong($Edit, -4, DllCallbackGetPtr($wProcNew))
GUISetState(@SW_SHOW)
$read = GUICtrlRead($Input2)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
DllCallbackFree($wProcNew)
Exit
Case $Input1
MsgBox(0, "A", "A")
;Case $Input2
;MsgBox(0,"B","B")
EndSwitch
WEnd
Func _MyWindowProc($hWnd, $uiMsg, $wParam, $lParam)
Switch $uiMsg
Case $WM_KEYUP
Switch $wParam
Case $VK_RETURN
If GUICtrlRead($Input2) <> "" And GUICtrlRead($Input2) <> $read Then
$read = GUICtrlRead($Input2)
MsgBox(0, "B", "B")
EndIf
EndSwitch
EndSwitch
Return _WinAPI_CallWindowProc($wProcOld, $hWnd, $uiMsg, $wParam, $lParam)
EndFunc ;==>_MyWindowProc
zldfsz 发表于 2016-4-16 01:53 http://www.autoitx.com/images/common/back.gif
折腾啥 没人鸟~ 回复 11# afan
哈哈,也是~ 本帖最后由 kk_lee69 于 2016-4-17 15:32 编辑
回复 11# afan
哪有呀 這話可折煞小弟了
忙著 處理一個客製的問題 東西看了 還沒時間測試 所以沒回
真不好意思~~~ 請多見諒 本帖最后由 kk_lee69 于 2016-4-17 15:32 编辑
回复 12# zldfsz
哪有呀 這話可折煞小弟了
忙著 處理一個客製的問題 東西看了還沒時間測試 所以沒回
真不好意思~~~ 請多見諒 回复 10# zldfsz
不是科班出身的 ,也不會其他程式
總是搞不懂 DLL的相關寫法
不過 大概可以看出 是 用自訂DLL呼叫函數的方法
只是完全不知道為何要這樣寫
真不知道這些知識 要去哪學習???
方便講解一下
$Edit = GUICtrlGetHandle($Input2)
$wProcNew = DllCallbackRegister("_MyWindowProc", "ptr", "hwnd;uint;long;ptr")
$wProcOld = _WinAPI_SetWindowLong($Edit, -4, DllCallbackGetPtr($wProcNew))
這幾行的意思嗎??
或者 這個可以看哪邊的資料 可以了解呢??
页:
[1]
2