信息处理问题。

djchao 2004-08-10 01:45:19
我用cb6编写程序。
先屏蔽了某信息的处理函数。如OnResize=NULL. 本人忘记了不知怎样恢复它的处理,请各位帮忙。
还有一个问题就是,我在使用Edit控件时,获取输入键的信息。好像怎样也
获取不了回车键。我的代码如下:
在keypress处理过程中
if(Key<'0'||Key>'9')
if(Key<'A'||Key>'Z')
if(Key!='-')
if(Key!=VK_BACK)
if(Key==VK_RETURN)
{
Key=0;
ShowMessage("dfdsfss");
}
else
{
Key=0;
}

按回车总没有反应。????

...全文
84 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
3996906 2004-08-12
这样可以吗?

鍵盤掃描碼處理
在鍵盤按鍵被押下時,第一個會產生的是所謂的掃描碼(Scan Code),也就是硬體直接傳回的按鍵代碼,然後作業系統會把它轉換為虛擬碼(Virtual Key ),也就是用一些有意義的符號或代碼來代替之,以便應用程式能夠處理;例如一般鍵盤上都有兩個「Enter」鍵(第二個在鍵盤最右下角),它們在硬體上的掃描碼(Scan Code)一定不同,但虛擬碼(Virtual Key)都是 VK_RETURN (CharCode=13),一般在高階的程式應用中,大部分都只會針對虛擬碼(Virtual Key)做處理,這樣做的好處是可以將硬體隔離於應用程式之外。

在一個 Windows 程式裡,若有某鍵被按下,會有兩個訊息送到程式本身,一個稱之為 WM_KEYDOWN,幾乎鍵盤任何按鍵都會送出;而另一個訊息稱之為 WM_CHAR,只有在數值或字母按鍵被按下時才會送出;換句話說,若是按下了 「A」鍵,會同時得到 WM_KEYDOWN 及 WM_CHAR 兩個訊息,按下了 「F1」卻只會得到 WM_KEYDOWN 訊息。

OnKeyDown事件處理程序對應於 WM_KeyDown 訊息, OnKeyPress事件處理程序則對應於 WM_CHAR訊息 (OnKeyPress事件乾脆改名叫 OnChar 事件比較容易讓人理解),所以 OnKeyDown事件處理程序傳入的 key 變數是 WORD 型態,而 OnKeyPress 事件處理程序傳入的 key 變數是 char 型態。

由上面的介紹可以知道,要偵測所有的按鍵(包含文數字及所有功能鍵)要用OnKeyDown事件處理程序來做,偵測範圍會比較廣,但有個鍵例外,那就是「Tab」鍵;按下 Tab 鍵會轉移元件焦點(Focus),且不會觸發 OnKeyDown及OnKeyPress 事件;另外,OnKeyDown事件也只能偵測到鍵盤虛擬碼(Virtual Key)層級,它雖幾乎可偵測所有的按鍵,但它無法分辨按下的是左邊的 Shift或是右邊的Shift?或按下的是兩個 Enter 鍵中的哪一個?所以,要能分辨所有按鍵個體,必須能夠偵測到鍵盤的硬體掃描碼(Scan Code)層級。

■ 偵測鍵盤上所有按鍵個體

在 Form 中有個 OnShortCut 事件處理程序,抓取其傳入的 Msg 變數就可以完全偵測所有按鍵個體,更令人興奮的是它連 Tab 鍵都能抓得到,原因是從 Msg 變數中可以直接抓出鍵盤的硬體掃描碼(Scan Code);如欲抓取掃描碼可讀出 Msg.KeyData值,抓取虛擬碼(Virtual Key) 則可讀出 Msg.CharCode 值。以下整理出跟按鍵偵測有關的事件處理程序及其偵測範圍:

OnKeyPress 只能抓到數值或字母按鍵及 Esc鍵、空白鍵,但不含功能鍵(F1-F12)
OnKeyDown 能抓到所有的鍵(除 Tab 鍵)但不能分辨「對稱鍵」的不同
OnShortCut 能抓到所有的鍵(含 Tab 鍵)且能分辨「對稱鍵」的不同

註:「對稱鍵」指的是左右兩邊皆有的鍵,如「Enter」、「Shift」、「Ctrl」、「Alt」等等
回复
djchao 2004-08-12
我写这么长,为了保证我输入的是数字,大写字母和“-”,但就是检测不了回车键。
回复
djchao 2004-08-12
答非所问。
回复
CACACACACA 2004-08-10
再把onresize事件指向一个函数。
回复
ralpha08 2004-08-10
你写这一长串好像就是要获取回车键啊!
直接
if(Key==VK_RETURN)
{
ShowMessage("dfdsfss");
}
好像跟你的函数效果一致?
回复
相关推荐
发帖
VCL组件使用和开发
创建于2007-08-02

586

社区成员

C++ Builder VCL组件使用和开发
申请成为版主
帖子事件
创建了帖子
2004-08-10 01:45
社区公告
暂无公告