![]() |
|
![]() ![]() ![]() |
|
mr.Anderson |
|
||||||||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Нужно отловить нажатие Del в Memo1, после чего поменять значение метки.
Я написал вот это:
Но это не работает. Пробовал так:
Еще вот так:
И даже так:
Но в последнем варианте происходит ошибка. Компайлер говорит о неизвестном символе H2F. В других случаях ни ошибок, ни предупреждений не выдается, однако - нажимаю Del, значение метки не изменяется. Этот отлов я писал в событии OnKeyPress объекта TMemo. |
||||||||
|
|||||||||
codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 16 Всего: 39 |
|
|||
|
||||
Vitalik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 2 Всего: 12 |
Да, codelord прав.
Дело в том, что OnKeyPress отлавливает только буквенно-цифровые клавиши. А вот OnKeyDown/OnKeyUp - это уже более мощный инструмент, тут тебе и виртуальные коды клавиш, и проверка состояния управляющих клавиш (Ctrl, Alt, Shift). Кстати, для большей понятности кода я предпочитаю писать VK_DELETE вместо ничего не говорящего числа 46 ![]() |
|||
|
||||
mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Спасибо, все заработало. Значит, можно вместо OnKeyPress всегда OnKeyDown использовать? А OnKeyUp для чего существует?
И еще непонятно: через вот такую конструкцию
Выдается, что код клавиши Delete 83. А почему же в Windows приходится писать 46? |
|||
|
||||
codelord |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 16 Всего: 39 |
это шутка??. В Help.
подумай разок!!! |
||||
|
|||||
Vitalik |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 2 Всего: 12 |
Не всегда. OnKeyPress удобен, когда действительно нужно отлавливать только алфавитно-цифровые клавиши. В данном случае OnKeyPress легко различит и букву 'a' и 'A'. В то время, как OnKeyDown получит только виртуальный код клавиши (то есть 'A' и для маленькой и для большой).
OnKeyDown происходит при нажатии клавиши, OnKeyUp - при отпускании. По-моему логично ![]()
Просто это разные варианты "кодирования" клавиш. 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)
Зачем же так сразу?.. Ведь все мы раньше "чайниками" были ![]() Тем более можно быть профи в одной области программирования и абсолютным чайником в другой ![]() P.S. "Чайник" - это понятие ни в коем случае не оскорбительное. "Чайник" - это тот, кто пока что мало знает, но пытается разобраться во всём. "Ламер" - это тот, кто мало знает и не узнаёт ничего нового. Добавлено @ 11:45 codelord, мне даже хотелось минус поставить за такие реплики... Ничего личного, просто если не хочется отвечать на вопрос, то его ведь можно и проигнорировать. Вместо того, чтобы принижать человека... Это сообщение отредактировал(а) Vitalik - 9.8.2005, 11:46 |
||||||||||
|
|||||||||||
codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 16 Всего: 39 |
Человека я принизить совсем не хотел. Просто если банально перевести на русский Key Down и Key Up, ответ получишь гораздо раньше ![]() |
|||
|
||||
Vitalik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 2 Всего: 12 |
Тоже верно ![]() |
|||
|
||||
mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Vitalik, спасибо, очень понятное разъяснение.
Что такое "чайник", я знаю, и вовсе не обиделся. ![]() ![]() codelord, перевести-то я перевел. Я просто не предполагал даже, что комп может учитывать и отлавливать "отпуск" клавиши. ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |