procedure TFMain.eNoKeyPress(Sender: TObject; var Key: Char);
var Msg:TMsg;
begin
// 限制輸入的資料為數字
if not (key in['0'..'9',#13,#8,#46]) then
begin
key:=#0;
While Windows.PeekMessage(Msg,Self.eNo.Handle,WM_KEYFIRST,WM_KEYLAST,PM_REMOVE) do
key:=#0;
end;
{ PeekMessage是WINAPI也就是直接從應用程式的訊息佇列(Applicaton que)存取訊息後存入TMsg的結構中。
參數 WM_KEYFIRST 及 WM_KEYLAST 常數用來取出鍵盤緩衝的所有訊息,因此在發生KeyPress後如果Key值不是所要的值就將鍵盤緩衝區清乾淨。
另外多加一個Key := #0的原因是為確保Winapi將緩衝清乾淨多加上的 }
參數 WM_KEYFIRST 及 WM_KEYLAST 常數用來取出鍵盤緩衝的所有訊息,因此在發生KeyPress後如果Key值不是所要的值就將鍵盤緩衝區清乾淨。
另外多加一個Key := #0的原因是為確保Winapi將緩衝清乾淨多加上的 }
end;
沒有留言:
張貼留言