| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Отлов нажатия Delete |
| Автор: mr.Anderson 8.8.2005, 20:30 | ||||||||
| Нужно отловить нажатие Del в Memo1, после чего поменять значение метки. Я написал вот это:
Но это не работает. Пробовал так:
Еще вот так:
И даже так:
Но в последнем варианте происходит ошибка. Компайлер говорит о неизвестном символе H2F. В других случаях ни ошибок, ни предупреждений не выдается, однако - нажимаю Del, значение метки не изменяется. Этот отлов я писал в событии OnKeyPress объекта TMemo. |
| Автор: codelord 8.8.2005, 20:40 | ||
|
| Автор: Vitalik 8.8.2005, 21:20 |
| Да, codelord прав. Дело в том, что OnKeyPress отлавливает только буквенно-цифровые клавиши. А вот OnKeyDown/OnKeyUp - это уже более мощный инструмент, тут тебе и виртуальные коды клавиш, и проверка состояния управляющих клавиш (Ctrl, Alt, Shift). Кстати, для большей понятности кода я предпочитаю писать VK_DELETE вместо ничего не говорящего числа 46 |
| Автор: mr.Anderson 9.8.2005, 07:34 | ||
| Спасибо, все заработало. Значит, можно вместо OnKeyPress всегда OnKeyDown использовать? А OnKeyUp для чего существует? И еще непонятно: через вот такую конструкцию
Выдается, что код клавиши Delete 83. А почему же в Windows приходится писать 46? |
| Автор: codelord 9.8.2005, 09:11 | ||||
это шутка??. В Help.
подумай разок!!! |
| Автор: Vitalik 9.8.2005, 11:42 | ||||||||||
Не всегда. 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, мне даже хотелось минус поставить за такие реплики... Ничего личного, просто если не хочется отвечать на вопрос, то его ведь можно и проигнорировать. Вместо того, чтобы принижать человека... |
| Автор: codelord 9.8.2005, 12:03 | ||
Человека я принизить совсем не хотел. Просто если банально перевести на русский Key Down и Key Up, ответ получишь гораздо раньше |
| Автор: Vitalik 9.8.2005, 13:03 | ||
Тоже верно |
| Автор: mr.Anderson 11.8.2005, 18:32 |
| Vitalik, спасибо, очень понятное разъяснение. Что такое "чайник", я знаю, и вовсе не обиделся. codelord, перевести-то я перевел. Я просто не предполагал даже, что комп может учитывать и отлавливать "отпуск" клавиши. |