經常某些輸入的文字要求只能是數字等,比如qq登陸框上的qq帳號,如果按鍵不是數字,則沒有反應。原理當然是很簡單的,只需要在相應訊息到來時阻止控制項去處理訊息即可。
這種例子很多,當然可以override keypress事件。也可以從textbox繼承乙個類,然後重寫wndpro,從而無視某些訊息。
最重要的訊息是wm_char。此外,還有幾個特殊按鍵是永遠不能遮蔽的,分別是backspace, delete,此外還有快捷鍵,ctrl-a,
ctrl-c,ctrl-x,ctrl-v.再此外,我們還要在執行貼上時對文字做一次判斷,不合法文字則被忽略。
可以用乙個filterstring的string來記錄合法字元,不在此字串中認為是不接受的字元,
//////覆蓋視窗過程!處理wm_char訊息!
///
///
protected
override
void
wndproc(
refmessage m)
break
;case
wm_paste:
//貼上訊息
idataobject obj
=clipboard.getdataobject();
if(obj
==null
)return;if
(obj.getdatapresent(dataformats.text))
}break
;}
//處理訊息
base
.wndproc(
refm);}
今天有些迷糊,主要是發現只處理wm_char時,ctrl-a快捷鍵失效了,於是在keydown裡面手工實現了全選。具體原因也沒認真去研究,另外乙個問題是發現對小數點的遮蔽『.』無效,原因也不詳,好像按'.'的時候沒產生wm_char訊息就直接被處理掉了。鬱悶。先就這樣吧,不是很優美。
關於STM32串列埠接收中斷中只能接收乙個位元組
最近除錯stm32的串列埠接收時發現例程中只能接收乙個位元組 例程如下 1 初始化串列埠1 2 void uart init u32 bound 43 void usart1 irqhandler void 串列埠1中斷服務程式 44 53 54 55 56 57這是較為普遍的原始碼例程的寫法,用原...
關於STM32串列埠接收中斷中只能接收乙個位元組
最近除錯stm32的串列埠接收時發現例程中只能接收乙個位元組 例程如下 1 初始化串列埠1 2void uart init u32 bound 43void usart1 irqhandler void 串列埠1中斷服務程式44 5354 55 5657 這是較為普遍的原始碼例程的寫法,用原子的版本...
C 乙個串列埠接收思路
void uart rx isr void 接收中斷函式 else recv state 0 回到初始狀態 break case1 if c 0xff 是陣列第二位元組 攏共 3位資料 中間這位 為資料位 就不進行校驗判斷了 else break case2 if c 0x03 是陣列第三位元組 e...