Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Коды клавишь лево, право, в верх, в низ.


Автор: blablabla 17.10.2006, 21:10
Как узнать коды клавишь лево, право, в верх, в низ. В паскале #75, #77, #72, #80 соответственно. Пробовал применить на DELPHI, ничего не выходит. Подскажите пожалуйста.

Автор: volvo877 17.10.2006, 21:25
Вообще-то 
Цитата(Delphi Help)
VK_LEFT   Left Arrow key
VK_UP     Up Arrow key
VK_RIGHT  Right Arrow key
VK_DOWN   Down Arrow key


Как применять собрался?

Автор: Zero 17.10.2006, 21:35
Цитата(volvo877 @  17.10.2006,  22:25 Найти цитируемый пост)
Вообще-то 

Цитата(Delphi Help)
VK_LEFT   Left Arrow key
VK_UP     Up Arrow key
VK_RIGHT  Right Arrow key
VK_DOWN   Down Arrow key


volvo877, не для всех компонентов, тут можно применить кнопки.

Автор: Romikgy 17.10.2006, 21:41
а как пробовал код в студию

Автор: blablabla 17.10.2006, 22:27
Код

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
case key of
  #75:begin
        label1.Caption:=IntToStr(Memo1.CaretPos.x);
        label2.Caption:=IntToStr(Memo1.CaretPos.y);
      end; ;
  #77:begin
        label1.Caption:=IntToStr(Memo1.CaretPos.x);
        label2.Caption:=IntToStr(Memo1.CaretPos.y);
      end; ; ;
  #72:begin
        label1.Caption:=IntToStr(Memo1.CaretPos.x);
        label2.Caption:=IntToStr(Memo1.CaretPos.y);
      end; ; ;
  #80:begin
        label1.Caption:=IntToStr(Memo1.CaretPos.x);
        label2.Caption:=IntToStr(Memo1.CaretPos.y);
      end; ; ;
end;

end;

Автор: Romikgy 17.10.2006, 22:35
Цитата(blablabla @  17.10.2006,  21:27 Найти цитируемый пост)
Memo1KeyPress

здесь это не отловишь!
KeyDown
KeyUp
там ловишь от $25 до $28 вроде так

Автор: blablabla 17.10.2006, 22:37
Цитата

  VK_LEFT   Left Arrow key
  VK_UP     Up Arrow key
  VK_RIGHT  Right Arrow key
  VK_DOWN   Down Arrow key


Чёт не выходит..... smile 

Автор: Romikgy 17.10.2006, 22:47
// только в кейдоуне
Код

begin
case key of
   VK_LEFT:begin
        label1.Caption:=IntToStr(Memo1.CaretPos.x);
        label2.Caption:=IntToStr(Memo1.CaretPos.y);
      end; ;
  VK_UP :begin
        label1.Caption:=IntToStr(Memo1.CaretPos.x);
        label2.Caption:=IntToStr(Memo1.CaretPos.y);
      end; ; ;
  VK_RIGHT:begin
        label1.Caption:=IntToStr(Memo1.CaretPos.x);
        label2.Caption:=IntToStr(Memo1.CaretPos.y);
      end; ; ;
  VK_DOWN :begin
        label1.Caption:=IntToStr(Memo1.CaretPos.x);
        label2.Caption:=IntToStr(Memo1.CaretPos.y);
      end; ; ;
end;
end;

 

Автор: blablabla 17.10.2006, 22:47
Romikgy
Спавибо, заработало. smile 

Автор: Zero 17.10.2006, 23:49
blablabla, ты бы сразу сказал, что те надо для поля Memo, тебе б сразу и ответили...

Автор: skyboy 17.10.2006, 23:57
Цитата(Romikgy @  17.10.2006,  21:35 Найти цитируемый пост)
там ловишь от $25 до $28 вроде так 

нет. символьные коды как во время Паскаля указывались с символом "#", так и указываются.
Дело в том, что обработчик по OnKeyPress в переменной key передает символ типа char: от #0 до #FF, а обработчики OnKeyUP и OnKeyDown в переменной Code(кажется, может - KeyCode - не помню) содержит код(может - скан-код?) клавиши, а константы VK_LEFT и иже с ними(в хелпе надо смотреть раздел Virtual key codes) как раз и относятся к скан-кодам, но не к символьному представлению. Вобщем, смотря какой обработчик - такой и подход. Например, Backspace можно и в OnKeyPress ловить(символьный код, кажется, #8) и в OnKeyDown/OnKeyUp(VK_BACK).

Автор: Romikgy 18.10.2006, 08:44
skyboy, я константы прописал , ну пусть будет так 
#$25 ... #$28
трудно было это добавить ? и если посмотришь числовое представление 
Цитата(skyboy @  17.10.2006,  22:57 Найти цитируемый пост)
VK_LEFT

и т.п. то увидишь , что это и равно числам вышеприведеным  smile 

Автор: skyboy 18.10.2006, 09:44
Romikgy.
Да, vk_left == 37. 
Но символ #37 == "%".
Впервые слышу, чтоб скан-коды смешивались с символьным представлением соотвествующих букв.
Я тебя, наверное, не понял. Поясни, пожалуйста, что ты имел в виду.

Автор: aktuba 18.10.2006, 12:08
Правильно, #37 - %, т.к. #37 и #$37 - это разные коды. В первом случае десятичный, а во втором шестнадцатиричный... Поэтому ничего и не получалось. Ты указывал десятичные коды...

Автор: Romikgy 18.10.2006, 12:46
skyboy, 
Код

VK_LEFT    25    LEFT ARROW key 
VK_UP    26    UP ARROW key 
VK_RIGHT    27    RIGHT ARROW key 
VK_DOWN    28    DOWN ARROW key 

все цифры 16-ричные, это из мсдн
ты мои посты сверху читал?

Автор: skyboy 18.10.2006, 15:44
aktuba, я говорил про код 37, а Romikgy - про код $25, что одно и то же, но в разных системах счисления. Другими словами, 25(16) == 37(10). Проверь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)