Как определить юникодные клавиши при нажатии клавиш? - PullRequest
4 голосов
/ 03 февраля 2010

Мое приложение использует символы Юникода, и у меня есть несколько текстовых полей, где я хочу запретить пользователю вводить специальные символы, такие как : '";

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

Так что на данный момент это позволяетпользователь добавляет пробелы и использует клавишу возврата, чтобы стереть, и, конечно же, клавишу ввода, чтобы подтвердить.

Есть несколько символов Юникода, которые я хочу разрешить вводить также.ū, ž и их заглавные альтернативы, но просто добавление их в набор следующим образом ...

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

... ничего не делает, и я до сих пор не могу написать эти символы в текстовом поле.

Я хотел бы знать, как решить эту проблему. Есть ли способ узнать, является ли нажатая клавиша нужным мне символом юникода?

Спасибо

Ответы [ 2 ]

7 голосов
/ 03 февраля 2010

Если вы используете D2009 или более позднюю версию, есть модуль с именем Символ , содержащий такие функции, как IsLetterOrDigit , IsLetter и т. Д., Все они обрабатывают именно то, что вам нужно.

4 голосов
/ 03 февраля 2010

Обратите внимание на подсказки и предупреждения при компиляции приложений. Игнорировать их - значит игнорировать потенциальные проблемы .

Вы должны получить предупреждение, что "WideChar сокращен до байтового символа ...". В этом и заключается проблема: Key больше не является Unicode в вашей операции набора!

Предупреждение советует использовать CharInSet; Вы также можете посмотреть на TCharacter (специальный класс с функциями класса для определения определенных категорий символов). Если ни один из них не соответствует вашим требованиям, то используйте строковую константу со всеми действительными символами и используйте функцию Pos, чтобы определить, присутствует ли Key.

Наконец, вы можете предпочесть исключить определенные символы, а не пытаться придумать каждый конкретный символ, который вы хотите включить.

...