kk_lee69 发表于 2016-4-15 00:37:36

如何 捕获 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

水木子 发表于 2016-4-15 10:29:12

回复 1# kk_lee69

进入论坛“搜索”页面,搜索关键词“回车”,里面有你想要的答案。

kk_lee69 发表于 2016-4-15 10:35:28

本帖最后由 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 的功能有個特點是要有打新的 資料 回車 才有用一次意思是資料要有改變 回車才有用

我希望保留這個功能又可以單純的超過寬度換行顯示而已

題外話 考慮改頭像鳴人跟佐助 呵呵

水木子 发表于 2016-4-15 10:46:48

目前能够想到的其他办法就是注册消息。

话说你是台湾人吗?怎么用的都是繁体字呢!

kk_lee69 发表于 2016-4-15 10:54:15

回复 4# 水木子

是的 我是台灣的 所以用繁體字用詞用語 也會跟你們不太一樣
如果吃力還請見諒

水木子 发表于 2016-4-15 11:02:23

回复 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

kk_lee69 发表于 2016-4-15 11:15:44

回复 6# 水木子

看來是沒有其他 方法了
你之前的方法是 利用快捷鍵的 方式也有點算熱鍵然後再去判斷 目前的 焦點在哪邊
如果要目標控件上的話 就 反應   
看來目前也只有這個方法至於 控件 內容有更新 才變動
剛剛想到的是在賦值的時候 先記錄長度 判斷的時候 再比對 長度長度有變動 就認定有更新過

但是 總覺得這是土法煉鋼的 方法呵呵 但是   好像是目前唯一的方法

水木子 发表于 2016-4-15 11:17:47

回复 7# kk_lee69

嗯!我也是这么想的。

zldfsz 发表于 2016-4-15 13:00:28

本帖最后由 zldfsz 于 2016-4-16 01:52 编辑

用风行者的“ComboBox响应回车事件”例子稍加修改就能得到EDIT的回车事件,至于你说的資料要有改變 回車才有用,可以用一个变量记录上一次回车时读取到的内容,和本次回车时读取到的内容做比较,如果相同,就不执行指定代码,不相同则更新变量并执行相应代码

zldfsz 发表于 2016-4-16 01:53:42

#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

afan 发表于 2016-4-16 18:55:39


zldfsz 发表于 2016-4-16 01:53 http://www.autoitx.com/images/common/back.gif


    折腾啥 没人鸟~

zldfsz 发表于 2016-4-16 21:39:16

回复 11# afan


    哈哈,也是~

kk_lee69 发表于 2016-4-17 15:14:39

本帖最后由 kk_lee69 于 2016-4-17 15:32 编辑

回复 11# afan

哪有呀 這話可折煞小弟了

忙著 處理一個客製的問題   東西看了   還沒時間測試 所以沒回

真不好意思~~~ 請多見諒

kk_lee69 发表于 2016-4-17 15:14:55

本帖最后由 kk_lee69 于 2016-4-17 15:32 编辑

回复 12# zldfsz

哪有呀 這話可折煞小弟了

忙著 處理一個客製的問題   東西看了還沒時間測試 所以沒回

真不好意思~~~ 請多見諒

kk_lee69 发表于 2016-4-17 15:31:33

回复 10# zldfsz
不是科班出身的 ,也不會其他程式
總是搞不懂 DLL的相關寫法

不過 大概可以看出 是 用自訂DLL呼叫函數的方法
只是完全不知道為何要這樣寫

真不知道這些知識 要去哪學習???
方便講解一下
$Edit = GUICtrlGetHandle($Input2)
$wProcNew = DllCallbackRegister("_MyWindowProc", "ptr", "hwnd;uint;long;ptr")
$wProcOld = _WinAPI_SetWindowLong($Edit, -4, DllCallbackGetPtr($wProcNew))
這幾行的意思嗎??

或者 這個可以看哪邊的資料 可以了解呢??
页: [1] 2
查看完整版本: 如何 捕获 EDIT 控件里的 回车事件???[已解决]