Поиск:

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


iOS Lead Developer
****


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

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



Нужно отловить нажатие Del в Memo1, после чего поменять значение метки.
Я написал вот это:
Код

if(Key==83)
{
 Label1->Caption="New caption";
}

Но это не работает. Пробовал так:
Код

if(Key==VK_HELP)

Еще вот так:
Код

#define VK_HELP 83
if(Key==VK_HELP)

И даже так:
Код

#define VK_HELP &H2F
if(Key==VK_HELP)

Но в последнем варианте происходит ошибка. Компайлер говорит о неизвестном символе H2F.
В других случаях ни ошибок, ни предупреждений не выдается, однако - нажимаю Del, значение метки не изменяется. Этот отлов я писал в событии OnKeyPress объекта TMemo.


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

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 16
Всего: 39



Код

void __fastcall TForm1::Memo1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
 if(Key==46) Label1->Caption="New caption";
}



--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Vitalik
Дата 8.8.2005, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 2
Всего: 12



Да, codelord прав.
Дело в том, что OnKeyPress отлавливает только буквенно-цифровые клавиши.
А вот OnKeyDown/OnKeyUp - это уже более мощный инструмент, тут тебе и виртуальные коды клавиш, и проверка состояния управляющих клавиш (Ctrl, Alt, Shift).

Кстати, для большей понятности кода я предпочитаю писать VK_DELETE вместо ничего не говорящего числа 46 smile

PM MAIL WWW ICQ YIM   Вверх
mr.Anderson
Дата 9.8.2005, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Спасибо, все заработало. Значит, можно вместо OnKeyPress всегда OnKeyDown использовать? А OnKeyUp для чего существует?
И еще непонятно: через вот такую конструкцию
Код

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

Выдается, что код клавиши Delete 83. А почему же в Windows приходится писать 46?


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

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 16
Всего: 39



Цитата(sim7 @ 9.8.2005, 07:34)
А OnKeyUp для чего существует?

это шутка??. В Help.

Цитата(sim7 @ 9.8.2005, 07:34)
Выдается, что код клавиши Delete 83. А почему же в Windows приходится писать 46?

подумай разок!!!


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Vitalik
Дата 9.8.2005, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 2
Всего: 12



Цитата(sim7 @ 9.8.2005, 07:34)
Спасибо, все заработало. Значит, можно вместо OnKeyPress всегда OnKeyDown использовать?

Не всегда. OnKeyPress удобен, когда действительно нужно отлавливать только алфавитно-цифровые клавиши. В данном случае OnKeyPress легко различит и букву 'a' и 'A'. В то время, как OnKeyDown получит только виртуальный код клавиши (то есть 'A' и для маленькой и для большой).

Цитата(sim7 @ 9.8.2005, 07:34)
А OnKeyUp для чего существует?

OnKeyDown происходит при нажатии клавиши, OnKeyUp - при отпускании. По-моему логично smile

Цитата(sim7 @ 9.8.2005, 07:34)
И еще непонятно: через вот такую конструкцию printf("%d\n",getch()); Выдается, что код клавиши Delete 83. А почему же в Windows приходится писать 46?

Просто это разные варианты "кодирования" клавиш.
1). Функция getch().
Она просто возвращает ASCII-код клавиши для любой алфавитно-цифровой клавиши (в том числе учитывается регистр и "русские" буковки) а также для таких клавиш, как Tab (код 9), Enter (код 13), Backspace (код 8), Escape (код 27) и др...
Для управляющих же клавиш (F1-F12, "курсоры", и т.д... в том числе и Delete) она возвращает сначала 0, а потом еще одно байтовое число, характеризующее эту клавишу. Например, для Delete там как раз код 83.
2). Обработчики событий OnKeyDown/OnKeyUp возвращают так называемый виртуальный код клавиши. Это уже просто одно число в один байт (0..255) соответствующее каждой клавише на клавиатуре. Вот тут Delete имеет код клавиши 46. А вот коды для алфавитных клавиш, к примеру, совпадают с ASCII-кодами больших латинских букв. А ASCII-коды для маленьких латинских отданы под другие клавиши (управляющие).

Если интересно узнать коды виртуальных клавиш, то в справке билдера в предметном указателе можно ввести "Virtual key codes". Или же в файле "winuser.h" есть собственно все макросы для виртуальных клавиш (#define VK_DELETE 0x2E)

Цитата(codelord @ 9.8.2005, 09:11)
это шутка??. В Help.
Цитата(codelord @ 9.8.2005, 09:11)
подумай разок!!!

Зачем же так сразу?.. Ведь все мы раньше "чайниками" были smile
Тем более можно быть профи в одной области программирования и абсолютным чайником в другой smile

P.S. "Чайник" - это понятие ни в коем случае не оскорбительное.
"Чайник" - это тот, кто пока что мало знает, но пытается разобраться во всём.
"Ламер" - это тот, кто мало знает и не узнаёт ничего нового.

Добавлено @ 11:45
codelord, мне даже хотелось минус поставить за такие реплики... Ничего личного, просто если не хочется отвечать на вопрос, то его ведь можно и проигнорировать. Вместо того, чтобы принижать человека...

Это сообщение отредактировал(а) Vitalik - 9.8.2005, 11:46
PM MAIL WWW ICQ YIM   Вверх
codelord
Дата 9.8.2005, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 16
Всего: 39



Цитата(Vitalik @ 9.8.2005, 11:42)
Вместо того, чтобы принижать человека...

Человека я принизить совсем не хотел. Просто если банально перевести на русский Key Down и Key Up,
ответ получишь гораздо раньше smile.



--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Vitalik
Дата 9.8.2005, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 2
Всего: 12



Цитата(codelord @ 9.8.2005, 12:03)
Человека я принизить совсем не хотел. Просто если банально перевести на русский Key Down и Key Up,
ответ получишь гораздо раньше

Тоже верно smile
PM MAIL WWW ICQ YIM   Вверх
mr.Anderson
Дата 11.8.2005, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Vitalik, спасибо, очень понятное разъяснение.
Что такое "чайник", я знаю, и вовсе не обиделся. smile Я до сих пор являюсь чайником. smile
codelord, перевести-то я перевел. Я просто не предполагал даже, что комп может учитывать и отлавливать "отпуск" клавиши. smile


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

user posted image
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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