找回密码
 加入
搜索
查看: 6188|回复: 18

[AU3基础] 如何 捕获 EDIT 控件里的 回车事件???[已解决]

 火.. [复制链接]
发表于 2016-4-15 00:37:36 | 显示全部楼层 |阅读模式
本帖最后由 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

进入论坛“搜索”页面,搜索关键词“回车”,里面有你想要的答案。
 楼主| 发表于 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 | 显示全部楼层
目前能够想到的其他办法就是注册消息。

话说你是台湾人吗?怎么用的都是繁体字呢!
 楼主| 发表于 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
 楼主| 发表于 2016-4-15 11:15:44 | 显示全部楼层
回复 6# 水木子

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

但是 總覺得這是土法煉鋼的 方法  呵呵 但是   好像是目前唯一的方法
发表于 2016-4-15 11:17:47 | 显示全部楼层
回复 7# kk_lee69

嗯!我也是这么想的。
发表于 2016-4-15 13:00:28 | 显示全部楼层
本帖最后由 zldfsz 于 2016-4-16 01:52 编辑

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

评分

参与人数 1金钱 +30 贡献 +20 收起 理由
kk_lee69 + 30 + 20 感謝回復

查看全部评分

发表于 2016-4-16 18:55:39 | 显示全部楼层
zldfsz 发表于 2016-4-16 01:53



    折腾啥 没人鸟~
发表于 2016-4-16 21:39:16 | 显示全部楼层
回复 11# afan


    哈哈,也是~
 楼主| 发表于 2016-4-17 15:14:39 | 显示全部楼层
本帖最后由 kk_lee69 于 2016-4-17 15:32 编辑

回复 11# afan

哪有呀 這話可折煞小弟了

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

真不好意思~~~ 請多見諒
 楼主| 发表于 2016-4-17 15:14:55 | 显示全部楼层
本帖最后由 kk_lee69 于 2016-4-17 15:32 编辑

回复 12# zldfsz

哪有呀 這話可折煞小弟了

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

真不好意思~~~ 請多見諒
 楼主| 发表于 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))
這幾行的意思嗎??

或者 這個可以看哪邊的資料 可以了解呢??
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-26 09:36 , Processed in 0.112846 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表