Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Мучаемся с кодами клавиш


Автор: mr.Anderson 26.1.2006, 20:06
Так. У меня все еще хранится на компе страничка, где все коды клавиш написаны. Там черным по белому написано, что код клавиши "Стрелка вправо" 39. Я написал в событии OnKeyPress компонента Эдит1 вот такое:
Код

if(Key==39)
 Edit2->SetFocus(); //Где Эдит2 - это второй компонент, соответственно

Но ничего не происходит! По нажатию стрелки вправо курсор в первом Эдите просто передвигается на следующую позицию, что он и делает всегда. Что не так?
Добавлено @ 20:08
Попробовал написать консольную программу
Код

void main(void)
{
 printf("%d\n",getch());
 getch();
}

Так эта програ выдала, что код клавиши "Стрелка вправо" - 77 (или 79, не помню уже) - так вот, попробовал подставить ее код в вышеприведенный фрагмент - ноль реакции.

Автор: DemoCode 26.1.2006, 20:12
Всё правильно. В OnKeyPress передаётся символ. Используй OnKeyDown и должно заработать

Автор: mr.Anderson 26.1.2006, 21:10
Действительно, все получилось.... А почему же тогда строчка
if(Key==13) Button12Click(Sender);
работает и в событии OnKeyPress?

Автор: cardinal 26.1.2006, 22:55
Может это будет полезно...
http://vingrad.ru/VB-VB-002027

Автор: Vyacheslav 27.1.2006, 12:41
Цитата

The OnKeyPress event is the simplest of the three events, in that it returns only a single character the user presses. The character must fall within the ASCII character set.

OnKeyPress interprets key combinations only insofar as they evaluate to a single ASCII-character. So, for example, OnKeyPress recognizes the result of Shift+A (a capital 'A'), but not the individual keys pressed. OnKeyPress does not otherwise evaluate keys combinations, and does not recognize function keys or non-ASCII keys such as Ctrl, Alt, Insert, Page Down, and so on.

Default or Cancel buttons in the form will intercept the Enter and Escape key press for both the OnKeyPress and OnKeyDown events, (unless used in combination with Alt for the OnKeyDown.)
]
По русски говоря OnKeyPress предназначен только для обработки "печатных" символов. Если нужно "непечатные"( не путать с матом smile ) используют OnKeyDown. Enter и Escape перехватываются и OnKeyPress и OnKeyDown

Автор: Adil' 31.1.2006, 19:50
Если не совсем по-русски, но чуть более подробно - OnKeyDown - вызывается при обработке сообщения WM_KEYDOWN, которое посылается при нажатии любой клавиши, а OnKeyPress вызывается при обработке сообщения WM_CHAR, которое посылается, если функция TranslateMessage, грубо говоря, смогла "конвертнуть" код клавиши при том же самом WM_KEYDOWN в ASCII-символ. Для стрелок она этого сделать не может (как и, если не ошибаюсь, для всех клавиш с расширенным кодом).

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