2010-02-03 77 views
4

我的應用程序使用Unicode字符和我有,我想從輸入查詢的特殊字符,如限制用戶數的文本字段:'「;如何識別按鍵上的unicode鍵?

begin 
    if not (Key in ['a'..'z','A'..'Z',' ','0'..'9',#13,#8]) then 
     Key := #0; 
    if Key = #13 then 
     bOk.Click; 
end; 

所以在這一點上,可以讓用戶添加空格和使用退格鍵刪除,當然Enter鍵comfirm。

很少有Unicode字符我希望讓也正在inputed。 A,C,E,I,S,U,U,Z 及其大寫的替代品,但只是將它們添加到設置像這樣...

Key in ['a'..'z','A'..'Z',' ','0'..'9',#13,#8,'ą'..'ž','Ą'..'Ž'] 

......什麼都不做,我仍然無法在文本字段中寫入這些符號。

我想知道,如何解決這個問題。有沒有辦法判斷按下的鍵是否是我要查找的Unicode字符?

謝謝

+2

請注意,您通常應該在D2009中使用'CharInSet'。編譯器警告你。儘管CharInSet只適用於ANSI字符集。 utku_karatas的答案是要走的路。 – jpfollenius 2010-02-03 09:59:35

+0

+1 @Smasher:只是做出答案。 – 2010-02-03 10:24:02

回答

7

如果你在D2009或更高版本有一個名爲含有像IsLetterOrDigitIsLetter等所有具體操作你需要什麼功能的單元。

+0

謝謝,我已閱讀'人物'上的幫助文件,它解決了我的問題。我已經改變了我的 '如果' 語句就像這樣: '如果不是IsLetterOrDigit(關鍵),而不是CharInSet(鍵,[#8,#13,' ']),那麼'。 – user1651105 2010-02-03 10:43:51

4

編譯應用程序時請注意提示和警告。忽略它們就是忽略潛在的問題

您應該會收到警告:「WideChar被減少爲字節字符...」。其中存在這樣的問題:Key在設置操作中不再是Unicode!

該警告建議您使用CharInSet;你也可以看看TCharacter(具有類功能的特殊類來識別某些類別的字符)。如果這些都不滿足您的要求,然後使用一個字符串的所有有效字符不變,並使用Pos功能,以確定是否Key存在。

最後,你可能反而要考慮排除特定字符,而不是試圖去思考要包括每一個特定的性格。

+0

也很有幫助的答案。謝謝。具有特定字符和Pos函數的字符串在我想讓或限制寫入某些字符的情況下非常方便。 – user1651105 2010-02-03 10:56:22