2010-02-03 12 views
4

Mon application utilise des caractères unicode et j'ai plusieurs champs de texte où je veux limiter l'utilisateur de inputing caractères spéciaux comme : ' ";Comment identifier les clés Unicode à la pression d'une touche?

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

Donc, à ce stade, il permet des espaces ajouter un utilisateur et d'utiliser un backspace pour effacer, et bien sûr la touche Entrée pour comfirm.

Il y a quelques caractères unicode je veux laisser être inputed aussi. A, C, E, I, š, ú û, ž et leurs alternatives en majuscules , mais juste en les ajoutant à l'ensemble comme si ...

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

... ne fait rien et je ne peux toujours pas écrire ces symboles dans le champ de texte.

Je voudrais savoir, comment résoudre ce problème. Est-il possible de dire si la touche pressée est le caractère unicode que je cherche?

Merci

+2

Notez que vous devez généralement utiliser 'CharInSet' dans D2009. Le compilateur vous avertit à ce sujet. 'CharInSet' ne fonctionne que pour les jeux de caractères ANSI. utku_karatas réponses est le chemin à parcourir. – jpfollenius

+0

+1 @Smasher: faites-en une réponse. –

Répondre

7

Si vous êtes sur D2009 ou plus tard, il y a une unité nommée Caractère contenant des fonctions telles que IsLetterOrDigit, IsLetter, etc. toutes les manipulations précisément ce dont vous avez besoin.

+0

Merci, j'ai lu le fichier d'aide sur 'Caractère' et cela a résolu mon problème. J'ai changé mon instruction 'if' comme ceci: 'sinon IsLetterOrDigit (Key) et non CharInSet (Key, [# 8, # 13,' ']) alors'. – user1651105

4

Veuillez faire attention aux astuces et aux avertissements lorsque vous compilez vos applications. Les ignorer, c'est ignorer les problèmes potentiels.

Vous devriez être averti que "WideChar est réduit à octet char ...". Là réside le problème: le Key n'est plus Unicode dans votre opération de jeu!

L'avertissement vous conseille d'utiliser CharInSet; vous pouvez également regarder TCharacter (une classe spéciale avec des fonctions de classe pour identifier certaines catégories de caractères). Si aucune de ces conditions ne correspond à vos besoins, utilisez une constante de type chaîne avec tous les caractères valides et utilisez la fonction Pos pour déterminer si le Key est présent. Enfin, vous préférerez peut-être envisager d'exclure des caractères spécifiques plutôt que d'essayer de penser à tous les caractères spécifiques que vous voulez inclure.

+0

Réponse très utile aussi. Je vous remercie. Chaîne avec des caractères spécifiques et la fonction Pos est très pratique dans les cas où je veux laisser ou restreindre pour écrire certains caractères. – user1651105