關於edit的限制輸入,還有key的問題 |
尚未結案
|
elctppo
一般會員 發表:28 回覆:22 積分:10 註冊:2005-04-01 發送簡訊給我 |
|
pillar62
資深會員 發表:9 回覆:324 積分:271 註冊:2002-04-15 發送簡訊給我 |
|
elctppo
一般會員 發表:28 回覆:22 積分:10 註冊:2005-04-01 發送簡訊給我 |
|
jimmy_wei
高階會員 發表:9 回覆:176 積分:147 註冊:2003-08-28 發送簡訊給我 |
|
elctppo
一般會員 發表:28 回覆:22 積分:10 註冊:2005-04-01 發送簡訊給我 |
引言: elctppo你好:謝謝你~我已經解決了我的問題,但是如果key := #0;的話,edit本身的其他功能鍵就會失效,所以我甘脆用readonly只是不讓有文字在edit顯示出來~不會像#0把所有鍵都吞了~~但是有一點我想問的是,我用chr(8),看到backspace的字元是keyboard上沒有的,如果我想查上下左右方向鍵的內碼又如何查呢?用ord()的話,又不知道它們的字元~按它們是不會有字元出現的呀~最後還是謝謝你幫我解決了我的問題~ShowMessage(IntToStr(Ord(Key))); //這可以show出你按的每一個鍵的ascii碼,所以想要什麼自己加了,如下#8是backspace if (not (Key in [#48..#57, #8])) then Key := #0;還有你問的CHAR和WORD其他們是不同的資料型態, 你可以按F1打CHAR和WORD去查就知道了 |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 因為鍵盤事件中有OnKeyDown&OnKeyUp這一組和OnKeyPress這一組﹐兩者的區別在于前者接受ASCII鍵和非ASCII鍵﹐Key的形態為Integer﹐而后者只接受ASCII鍵﹐Key的形態為Char(字元)﹐您可在OnKeyDown事件中取出所按鍵的十進位Key值和十六進位Key值﹐範例如下﹕
begin ShowMessage('十進位的Key值為﹕' + IntToStr(Key) + #10#13 + '十六進位的Key值為﹕' + IntToHex(Key, 4)); end;在上述範例程式碼所取得的十進位Key值中﹐其和OnKeyPress事件中對應的的有些字元是相同的﹐只是表達的方法和形態不同﹐因為OnKeyDown事件中﹐輸入值Key的形態為Integer﹐而OnKeyPress事件中﹐輸入值Key的形態為字元﹐所以可以用Chr來表示﹐也可在值前加上#符號來表示﹐如﹕ 所按鍵 OnKeyDown值 OnKeyPress值 Enter 013 #13 BackSpace鍵 008 #8從以上的結果可以看出兩者之間的部分相似性﹐當然這不是絕對的﹐畢竟OnKeyDown&OnKeyUp所接受的是所有ASCII鍵和非ASCII鍵﹐而OnKeyPress只接受ASCII鍵﹒ 個人意見﹐歡迎指正﹒ ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================ 發表人 - cashxin2002 於 2005/04/02 12:38:14
------
忻晟 |
elctppo
一般會員 發表:28 回覆:22 積分:10 註冊:2005-04-01 發送簡訊給我 |
引言: 您好﹗ 因為鍵盤事件中有OnKeyDown&OnKeyUp這一組和OnKeyPress這一組﹐兩者的區別在于前者接受ASCII鍵和非ASCII鍵﹐Key的形態為Integer﹐而后者只接受非ASCII鍵﹐Key的形態為Char(字元)﹐您可在OnKeyDown事件中取出所按鍵的十進位Key值和十六進位Key值﹐範例如下﹕OnKeyPress的KEY不是ASCII鍵嗎?begin ShowMessage('十進位的Key值為﹕' + IntToStr(Key) + #10#13 + '十六進位的Key值為﹕' + IntToHex(Key, 4)); end;在上述範例程式碼所取得的十進位Key值中﹐其和OnKeyPress事件中對應的的有些字元是相同的﹐只是表達的方法和形態不同﹐因為OnKeyDown事件中﹐輸入值Key的形態為Integer﹐而OnKeyPress事件中﹐輸入值Key的形態為字元﹐所以可以用Chr來表示﹐也可在值前加上#符號來表示﹐如﹕所按鍵 OnKeyDown值 OnKeyPress值 Enter 013 #13 BackSpace鍵 008 #8從以上的結果可以看出兩者之間的部分相似性﹐當然這不是絕對的﹐畢竟OnKeyDown&OnKeyUp所接受的是所有ASCII鍵和非ASCII鍵﹐而OnKeyPress接受的是非ASCII鍵﹒ 個人意見﹐歡迎指正﹒ ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================ |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
cancer
高階會員 發表:58 回覆:319 積分:190 註冊:2004-07-31 發送簡訊給我 |
大家好, 我想不可能把 TEdit 的其中一個字元改為 #0 吧?
因為,如果使用者輸入了 9a99,就應該把 a 踢掉,成為999,
但強行把 a 改為 #0,那麼原本應該是三個字元的字串,卻變成四個字元了。
雖然顯示出來是 999 沒有錯,但如果拿這個字串來跟一堆字串比對,那肯定會產生錯誤結果。 我想,補救的辦法是,在 OnKeyDown 一開始就檢查 TEdit 的 Text 的最後一個字元是不是數字,如果不是,就把它刪除掉。然後再在 OnKeyUp 裡檢查Text最後一個字元是不是數字,如果不是,也刪除掉。 原理是,按住同一個按鍵不放,就一直產生 OnKeyDown ,OnKeyUp 根本沒有機會消除先前 OnKeyDown 產生的非數字字元,所以就必須在下一個 OnKeyDown 一開始的地方就檢查前一個 OnKeyDown 是否在 Text 的尾巴補上了一個非數字字元,有則刪除之。等使用者完全放開按鍵後,則由 OnKeyUp 來清除最後一個非數字字元,因為 OnKeyDown 不會再發生了。 這樣可以嗎?
|
elctppo
一般會員 發表:28 回覆:22 積分:10 註冊:2005-04-01 發送簡訊給我 |
引言: 大家好, 我想不可能把 TEdit 的其中一個字元改為 #0 吧? 因為,如果使用者輸入了 9a99,就應該把 a 踢掉,成為999, 但強行把 a 改為 #0,那麼原本應該是三個字元的字串,卻變成四個字元了。 雖然顯示出來是 999 沒有錯,但如果拿這個字串來跟一堆字串比對,那肯定會產生錯誤結果。 我想,補救的辦法是,在 OnKeyDown 一開始就檢查 TEdit 的 Text 的最後一個字元是不是數字,如果不是,就把它刪除掉。然後再在 OnKeyUp 裡檢查Text最後一個字元是不是數字,如果不是,也刪除掉。 原理是,按住同一個按鍵不放,就一直產生 OnKeyDown ,OnKeyUp 根本沒有機會消除先前 OnKeyDown 產生的非數字字元,所以就必須在下一個 OnKeyDown 一開始的地方就檢查前一個 OnKeyDown 是否在 Text 的尾巴補上了一個非數字字元,有則刪除之。等使用者完全放開按鍵後,則由 OnKeyUp 來清除最後一個非數字字元,因為 OnKeyDown 不會再發生了。 這樣可以嗎?你好!你所說的問題我已經試過了!沒錯#0的lenght的確是1,但是edit的text所顯示的string,是當觸發key事件,然後把key傳到edit的text,在觸發key事件時用#0,但是key也是存在的,這是你說的lenght會等於1的原因,但是並不會傳到edit的text裏,這點是可以確定的,我已試過了,我在onkeypress事件裏,先把key :=#0;然後showmessge(IntToString(key.lenght)),顯示,然後再看edit.text的lenght卻是0~~~~~~~~~謝謝! |
cancer
高階會員 發表:58 回覆:319 積分:190 註冊:2004-07-31 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |