ord('.')

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

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

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

ord('.')

Сообщение VirtUX »

Уважаемые форумчане. Отпишитесь, пожалуйста, у кого какой код выдает "точка".
У меня 46, а это VK_DELETE. В багтрекер уже отписал.
P.S. Укажите ОС и локаль. Пжлст.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

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

Добавлено спустя 2 минуты 54 секунды:
В дельфях VK_DELETE тоже имеет номер 46.
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

Афигеть. И как быть? Как узнать, что нажата точка, а не Del?
P.S. У меня openSuSE 11.3
m_guest
постоялец
Сообщения: 193
Зарегистрирован: 14.08.2005 15:10:21

Сообщение m_guest »

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

У формы делаем:

Код: Выделить всё

KeyPreview:=True;



И обрабатываем у ней OnKeyPress:

Код: Выделить всё

procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
begin
  if Key='.' then
    ShowMessage('Точка');
end;   


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

P.S. Пардон, вы с чистым FPC работаете? Тогда мой пример не пойдет..:(
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

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

Сообщение VirtUX »

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

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

У меня ноут. И только один Del = 127.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

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

Дома проверю, т.к. сейчас ноута под рукой нет.
А так, то цифровая клава выдаёт 46, а междуклавная DELETE вообще не реагирует на OnKeyPress.
.wOvAN
постоялец
Сообщения: 118
Зарегистрирован: 16.04.2010 06:36:12
Контактная информация:

Сообщение .wOvAN »

А шорткат не пробовали использовать в акшонах например?
svk12
постоялец
Сообщения: 411
Зарегистрирован: 09.06.2008 18:42:47

Сообщение svk12 »

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


Если включён Num Lock, нажатие Del на цифровой клаве можно уловить в обработчике onKeyPress, Key='.'.
Если же Num Lock выключен, то в обработчике onKeyDown, Key=VK_Delete.
Клава при этом генерирует разные сканкоды.
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

В общем решил делать так:
К бинарнику будет прилагаться conf-файл с перечисленными кодами Delete, для конкретной машины. И в обработчике нажатия уже проверка на принадлежность к массиву указанных кодов.
Никогда не думал, что существует такая ситуация с Del...
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

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

Вам пора менять клавиатуру. :) Проверил дома на ноуте - никаких отличий от большого компа (а было бы странно, если бы отличия были :) ). Клавиша DELETE выдаёт, как и ожидалось, номер 83.
Аватара пользователя
qivi
энтузиаст
Сообщения: 703
Зарегистрирован: 19.01.2009 12:45:54
Откуда: Россия

Сообщение qivi »

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

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

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

Сообщение VirtUX »

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

Клава новая. Уже третья на моем ноуте. Посоветовался с другом - оказалось, что коды, часто, не стандартизированы и зависят от препочтений самих пороизводителей оборудки. Т.ч. гарантированными могут быть только коды латинских символов, пробел, цифры и (не все) F-клавиши.
SAK
постоялец
Сообщения: 158
Зарегистрирован: 17.02.2006 23:45:14
Откуда: Тим
Контактная информация:

Сообщение SAK »

Специальные клавиши дают двойные коды: сначала приходит символ #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.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

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

Это все знают. Проблема в том, что у человека клавиша DELETE выдаёт 127, а такого ни в первом, ни во втором байте быть не может.
Ответить