kk_lee69 发表于 2013-1-14 22:14:17

使用 GUICtrlSetLimit 来限制 Input 里面输入的位数,如何使汉字会被视为两个字符

使用 GUICtrlSetLimit 来限制 Input 里面输入的位数,如何使汉字会被视为两个字符

一般來說 漢字 通常都被視為 兩個字元在 但是在AU3裡面 卻被視為一個字元長度
所以當使用GUICtrlSetLimit 来限制 Input 里面输入的位数時,會被視為一個字元

但是 資料庫裡面卻把 英文字 視為一個字元 漢字 視為兩個字元.....

譬如 資料庫長度是50個字如果我限制 Input為 25那麼 如果全都輸入英文 就浪費了 25個資料庫空間

如果設為 50那麼如果全部打漢字那就超過了 資料庫允許的.....

有辦法讓漢字的長度 被視為 2個字元嗎??

ceoguang 发表于 2013-1-15 00:25:13

GUICtrlSetLimit 实际是发送EM_LIMITTEXT消息来操作
见http://msdn.microsoft.com/en-us/library/windows/desktop/bb761607(v=vs.85).aspx
The maximum number of TCHARs the user can enter. For ANSI text, this is the number of bytes; for Unicode text, this is the number of characters. This number does not include the terminating null character.
它限制的是字符数,而不是字节数

有辦法讓漢字的長度 被視為 2個字元嗎??
有,见_WinAPI_WideCharToMultiByte

hzxymkb 发表于 2013-1-15 00:30:33

回复 2# ceoguang


    HOOK这么晚还不睡?哇咔咔,你头像的妞是你新泡到的?

kk_lee69 发表于 2013-1-15 01:16:31

回复 2# ceoguang

版主 請教一下 使用 這個 _WinAPI_WideCharToMultiByte其實是在轉換字碼的

想請問的是 一般的 ERP 系統 通常 都可以做到這樣的限制.......就是 可以 做到輸入到某一定的位數之後 就不能輸入了.....

請問一下 原理也是 要先自己轉換後 在計算 然後才去限制的嗎??

kk_lee69 发表于 2013-1-15 01:17:00

真好 有妞泡 呵呵

gzh888666 发表于 2013-1-15 01:18:52

本帖最后由 gzh888666 于 2013-1-15 01:20 编辑

看来只有利用EM_LIMITTEXT,
重新封装一次_GUICtrlSetLimit 。别无他法!
谁封装好了通知一声呀!加分!呵呵

ceoguang 发表于 2013-1-15 03:58:52

回复 4# kk_lee69
翻开UDF看看你就知道了,关键是处理过程,而不_WinAPI_WideCharToMultiByte本身的反回值
问题二:可以自己捕捉WM_CHAR消息,消息返回前先发送WM_GETTEXT获取字符串,然后通过WideCharToMultiByte转换获得字节数,再决定是否放行当前消息

ceoguang 发表于 2013-1-15 04:09:28

看来只有利用EM_LIMITTEXT,
重新封装一次_GUICtrlSetLimit 。别无他法!
谁封装好了通知一声呀!加分!呵 ...
gzh888666 发表于 2013-1-15 01:18 http://www.autoitx.com/images/common/back.gif

GUICtrlSetLimit 就是使用EM_LIMITTEXT,你无需作任何修改
如果你实在无聊,可以翻翻GuiEdit.au3,里面有封装好的_GUICtrlEdit_SetLimitText
页: [1]
查看完整版本: 使用 GUICtrlSetLimit 来限制 Input 里面输入的位数,如何使汉字会被视为两个字符