ord('.')
Модератор: Модераторы
ord('.')
Уважаемые форумчане. Отпишитесь, пожалуйста, у кого какой код выдает "точка".
У меня 46, а это VK_DELETE. В багтрекер уже отписал.
P.S. Укажите ОС и локаль. Пжлст.
У меня 46, а это VK_DELETE. В багтрекер уже отписал.
P.S. Укажите ОС и локаль. Пжлст.
У меня тоже 46. Судя по списку символов, этот номер как раз и есть точка.
Винда ХР.
Добавлено спустя 2 минуты 54 секунды:
В дельфях VK_DELETE тоже имеет номер 46.
Винда ХР.
Добавлено спустя 2 минуты 54 секунды:
В дельфях VK_DELETE тоже имеет номер 46.
Афигеть. И как быть? Как узнать, что нажата точка, а не Del?
P.S. У меня openSuSE 11.3
P.S. У меня openSuSE 11.3
Не знаю, будет ли работать в Linux, но в Windows можно так, наверное...
У формы делаем:
И обрабатываем у ней OnKeyPress:
Все работает (Win7 RU)
P.S. Пардон, вы с чистым FPC работаете? Тогда мой пример не пойдет..
У формы делаем:
Код: Выделить всё
KeyPreview:=True;
И обрабатываем у ней OnKeyPress:
Код: Выделить всё
procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
begin
if Key='.' then
ShowMessage('Точка');
end;
Все работает (Win7 RU)
P.S. Пардон, вы с чистым FPC работаете? Тогда мой пример не пойдет..
VirtUX
Дело в том, что если нажать кнопку DEL на цифровой клавиатуре, у неё тоже будет номер 46, т.к. её вторая ипостась - точка.
У DELETE, которая между клавиатурами, номер 83 или буква S...
Дело в том, что если нажать кнопку DEL на цифровой клавиатуре, у неё тоже будет номер 46, т.к. её вторая ипостась - точка.
У DELETE, которая между клавиатурами, номер 83 или буква S...
Последний раз редактировалось Vadim 25.09.2010 13:20:24, всего редактировалось 1 раз.
Еще одна просьба. У кого какой код в OnUTF8KeyPress и в OnKeyPress на нажатие Delete?
У меня 127.
Добавлено спустя 1 минуту 25 секунд:
У меня ноут. И только один Del = 127.
У меня 127.
Добавлено спустя 1 минуту 25 секунд:
Vadim писал(а):Дело в том, что если нажать кнопку DEL на цифровой клавиатуре, у неё тоже будет номер 46, т.к. её вторая ипостась - точка.
У меня ноут. И только один Del = 127.
VirtUX писал(а):У меня ноут. И только один Del = 127.
Дома проверю, т.к. сейчас ноута под рукой нет.
А так, то цифровая клава выдаёт 46, а междуклавная DELETE вообще не реагирует на OnKeyPress.
А шорткат не пробовали использовать в акшонах например?
VirtUX писал(а):Афигеть. И как быть? Как узнать, что нажата точка, а не Del?
P.S. У меня openSuSE 11.3
Если включён Num Lock, нажатие Del на цифровой клаве можно уловить в обработчике onKeyPress, Key='.'.
Если же Num Lock выключен, то в обработчике onKeyDown, Key=VK_Delete.
Клава при этом генерирует разные сканкоды.
В общем решил делать так:
К бинарнику будет прилагаться conf-файл с перечисленными кодами Delete, для конкретной машины. И в обработчике нажатия уже проверка на принадлежность к массиву указанных кодов.
Никогда не думал, что существует такая ситуация с Del...
К бинарнику будет прилагаться conf-файл с перечисленными кодами Delete, для конкретной машины. И в обработчике нажатия уже проверка на принадлежность к массиву указанных кодов.
Никогда не думал, что существует такая ситуация с Del...
VirtUX писал(а):У меня ноут. И только один Del = 127.
Вам пора менять клавиатуру.
Коды клавиш
http://hotwebpro.narod.ru/info/programm ... a/kod.html
Точка 109 код. Точка на клавише с ">" 190.
П.С.: Сам не пробовал
http://hotwebpro.narod.ru/info/programm ... a/kod.html
Точка 109 код. Точка на клавише с ">" 190.
П.С.: Сам не пробовал
Vadim писал(а):Вам пора менять клавиатуру.
Клава новая. Уже третья на моем ноуте. Посоветовался с другом - оказалось, что коды, часто, не стандартизированы и зависят от препочтений самих пороизводителей оборудки. Т.ч. гарантированными могут быть только коды латинских символов, пробел, цифры и (не все) F-клавиши.
-
SAK
- постоялец
- Сообщения: 158
- Зарегистрирован: 17.02.2006 23:45:14
- Откуда: Тим
- Контактная информация:
Специальные клавиши дают двойные коды: сначала приходит символ #0, а за ним код клавиши (не символ!). Поэтому обработка должна быть соответствующей:
Код: Выделить всё
uses crt;
var c: char;
begin
repeat
c:=readkey;
case c of
#27: exit; // ESC - выход
#0: writeln('0 ', ord(readkey)); // читаем код клавиши из буфера
else writeln(c)
end
until false
end.
SAK писал(а):Специальные клавиши дают двойные коды: сначала приходит символ #0, а за ним код клавиши (не символ!)
Это все знают. Проблема в том, что у человека клавиша DELETE выдаёт 127, а такого ни в первом, ни во втором байте быть не может.
