Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мучаемся с кодами клавиш 
:(
    Опции темы
mr.Anderson
Дата 26.1.2006, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



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

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

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

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

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


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
DemoCode
Дата 26.1.2006, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 890
Регистрация: 20.10.2005
Где: Россия

Репутация: 1
Всего: 41



Всё правильно. В OnKeyPress передаётся символ. Используй OnKeyDown и должно заработать


--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
mr.Anderson
Дата 26.1.2006, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



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


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
cardinal
Дата 26.1.2006, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: нет
Всего: 99



Может это будет полезно...
VB-VB-002027


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Vyacheslav
Дата 27.1.2006, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Цитата

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


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Adil'
Дата 31.1.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 26.8.2004
Где: Питер

Репутация: 4
Всего: 15



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


--------------------
Удачи
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0483 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.