ord('.')

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

ord('.')

Сообщение VirtUX » 25.09.2010 09:13:52

Уважаемые форумчане. Отпишитесь, пожалуйста, у кого какой код выдает "точка".
У меня 46, а это VK_DELETE. В багтрекер уже отписал.
P.S. Укажите ОС и локаль. Пжлст.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: ord('.')

Сообщение Vadim » 25.09.2010 09:58:35

У меня тоже 46. Судя по списку символов, этот номер как раз и есть точка.
Винда ХР.

Добавлено спустя 2 минуты 54 секунды:
В дельфях VK_DELETE тоже имеет номер 46.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: ord('.')

Сообщение VirtUX » 25.09.2010 13:00:27

Афигеть. И как быть? Как узнать, что нажата точка, а не Del?
P.S. У меня openSuSE 11.3
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: ord('.')

Сообщение m_guest » 25.09.2010 13:14:01

Не знаю, будет ли работать в Linux, но в Windows можно так, наверное...

У формы делаем:
Код: Выделить всё
KeyPreview:=True;



И обрабатываем у ней OnKeyPress:
Код: Выделить всё
procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
begin
  if Key='.' then
    ShowMessage('Точка');
end;   


Все работает (Win7 RU)

P.S. Пардон, вы с чистым FPC работаете? Тогда мой пример не пойдет..:(
m_guest
постоялец
 
Сообщения: 193
Зарегистрирован: 14.08.2005 15:10:21

Re: ord('.')

Сообщение Vadim » 25.09.2010 13:17:47

VirtUX
Дело в том, что если нажать кнопку DEL на цифровой клавиатуре, у неё тоже будет номер 46, т.к. её вторая ипостась - точка. :)
У DELETE, которая между клавиатурами, номер 83 или буква S... :D
Последний раз редактировалось Vadim 25.09.2010 13:20:24, всего редактировалось 1 раз.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: ord('.')

Сообщение VirtUX » 25.09.2010 13:19:41

Еще одна просьба. У кого какой код в OnUTF8KeyPress и в OnKeyPress на нажатие Delete?
У меня 127.

Добавлено спустя 1 минуту 25 секунд:
Vadim писал(а):Дело в том, что если нажать кнопку DEL на цифровой клавиатуре, у неё тоже будет номер 46, т.к. её вторая ипостась - точка. :)

У меня ноут. И только один Del = 127.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: ord('.')

Сообщение Vadim » 25.09.2010 13:28:05

VirtUX писал(а):У меня ноут. И только один Del = 127.

Дома проверю, т.к. сейчас ноута под рукой нет.
А так, то цифровая клава выдаёт 46, а междуклавная DELETE вообще не реагирует на OnKeyPress.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: ord('.')

Сообщение .wOvAN » 25.09.2010 18:56:16

А шорткат не пробовали использовать в акшонах например?
.wOvAN
постоялец
 
Сообщения: 118
Зарегистрирован: 16.04.2010 06:36:12

Re: ord('.')

Сообщение svk12 » 26.09.2010 00:33:07

VirtUX писал(а):Афигеть. И как быть? Как узнать, что нажата точка, а не Del?
P.S. У меня openSuSE 11.3


Если включён Num Lock, нажатие Del на цифровой клаве можно уловить в обработчике onKeyPress, Key='.'.
Если же Num Lock выключен, то в обработчике onKeyDown, Key=VK_Delete.
Клава при этом генерирует разные сканкоды.
svk12
постоялец
 
Сообщения: 408
Зарегистрирован: 09.06.2008 18:42:47

Re: ord('.')

Сообщение VirtUX » 26.09.2010 10:44:39

В общем решил делать так:
К бинарнику будет прилагаться conf-файл с перечисленными кодами Delete, для конкретной машины. И в обработчике нажатия уже проверка на принадлежность к массиву указанных кодов.
Никогда не думал, что существует такая ситуация с Del...
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: ord('.')

Сообщение Vadim » 26.09.2010 17:28:51

VirtUX писал(а):У меня ноут. И только один Del = 127.

Вам пора менять клавиатуру. :) Проверил дома на ноуте - никаких отличий от большого компа (а было бы странно, если бы отличия были :) ). Клавиша DELETE выдаёт, как и ожидалось, номер 83.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: ord('.')

Сообщение qivi » 26.09.2010 18:07:01

Коды клавиш
http://hotwebpro.narod.ru/info/programm ... a/kod.html

Точка 109 код. Точка на клавише с ">" 190.

П.С.: Сам не пробовал
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: ord('.')

Сообщение VirtUX » 27.09.2010 11:00:33

Vadim писал(а):Вам пора менять клавиатуру.

Клава новая. Уже третья на моем ноуте. Посоветовался с другом - оказалось, что коды, часто, не стандартизированы и зависят от препочтений самих пороизводителей оборудки. Т.ч. гарантированными могут быть только коды латинских символов, пробел, цифры и (не все) F-клавиши.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: ord('.')

Сообщение SAK » 27.09.2010 13:20:37

Специальные клавиши дают двойные коды: сначала приходит символ #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
постоялец
 
Сообщения: 158
Зарегистрирован: 18.02.2006 00:45:14
Откуда: Тим

Re: ord('.')

Сообщение Vadim » 27.09.2010 15:26:02

SAK писал(а):Специальные клавиши дают двойные коды: сначала приходит символ #0, а за ним код клавиши (не символ!)

Это все знают. Проблема в том, что у человека клавиша DELETE выдаёт 127, а такого ни в первом, ни во втором байте быть не может.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru