![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Есть код, который срабатывает при нажатии на Enter или Shift+Enter
Код этот нормально работает. Так вот, на примере его я хочу отлавливать нажатие Ctrl+1, Ctrl+2 ... Ctrl+6
Но код не срабатывает. Может есть у кого пример? |
||||
|
|||||
| pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 10 Всего: 40 |
видимо кто-то перехватывает раньше и не передает сюда
быстрое решение: использовать OnKeyUp работает
можно Shift использовать вместо GetKeyState -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
||||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Ну может у тебя где-то хоткей такой прописан.
Он срабатывает и дальше не пускает. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
нет, Ctrl+1 нигде не прописан
дебаггер останавливается на первой строчке, а if GetKeyState(... пропускает, всмысле перепрыгивает Добавлено через 1 минуту и 23 секунды Ну я сделал через KeyDown, т.е. проблема как бы решена. Но через KeyPress так и не смог. Спасибо, всем |
|||
|
||||
| ama_kid |
|
||||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 15 Всего: 95 |
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
||||
|
|||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
а как же это? Ord('1') Добавлено через 1 минуту и 5 секунд
тем не менее, как видно из примера, можно и Shift обрабатывать и F1 думаю, что тоже |
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 15 Всего: 95 |
Ord('1') - это код символа, соответствующего нажатию просто клавиши '1' - в любом редакторе эта клавиша выдаст этот символ... А вот Ctrl+1 нигде никакого символа не напишет - это типа какая-нить "управляющая комбинация" и OnKeyPress, по идее, не должен генерироваться, что кстати и подтвержается у меня опытом (но вокруг меня только ноутбуки и я не уверен, что аналогично происходит на десктопе)...
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 10 Всего: 40 |
зря а теперь попробуй нажать Ctrl+1 и не отпускать и сколько раз у тебя ето все дело выполнится? ну сколько успеет, во всяком случае больше одного а вот с KeyPress и KeyUp - только один -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
| Akella |
|
||||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
ну дык... это сочетание клавишь, а кодов сочетаний нет как таковых Добавлено через 2 минуты и 4 секунды
та отож :( Добавлено через 3 минуты и 51 секунду
по нажатию на Ctrl не генерируется, а вот по нажатию на 1 генерируется, и вот здесь ты уже проверяешь, держит ли юзер Ctrl или Alt или Shift Добавлено через 4 минуты и 47 секунд Т.е. по твоим убеждениям
неработоспособен |
||||||
|
|||||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 15 Всего: 95 |
Akella, в отличие от Ctrl+1 - Enter генерирует ASCII символ (перевод строки), поэтому данный код жизнеспособен и правилен... по моим убеждениям неработоспособной является проверка Ctrl+1 в обработчике OnKeyPress, ибо эту комбинацию нельзя отловить в принципе в данном обработчике (опять же, по моим убеждениям) т.к. ASCII-символ не генерится (ты можешь спокойно проверять это все дело в обработчиках OnKeyUp\Down, ибо туда приходят уже все нажатия любых клавиш, что собсно в итоге ты и сделал, но не все комбинации вызывают OnKeyPress, а только те, которые генерят ASCII-символы)... Поэтому меня и удивило, что ты тут написал, что у тебя "дебаггер останавливается...", хотя по идее - обработчик не должен был вообще срабатывать (у меня не срабатывает)... Вот у меня и возник вопрос - какому ASCII символу соответствует данная комбинация, если у тебя вызвалось событие OnKeyPress при нажатии Ctrl+1?... Или я что-то не так понял?
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
а цифирЯ "1", значит-с, не генерирует? Добавлено через 1 минуту и 34 секунды см. обведенное красным ![]() Добавлено через 3 минуты и 41 секунду а ты сам попробуй Добавлено через 5 минут и 23 секунды клавиша 1 нажата??????? НАЖАТА!!!! значит происходит OnKeyPress, значит эта строка выполнится:
Добавлено через 6 минут и 8 секунд а дальше проверяем нажата ли Ctrl, вот у меня именно с этим проблемы, с определением нажата ли ctrl, в одном примере работает, а в другом нет |
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 15 Всего: 95 |
Блин, я видимо никак не могу донести свою мысль... Ладно, продемонстрирую на примере свою линию размышления. Вызов OnKeyPress является ответом на приход сообщения WM_CHAR (в исходниках VCL - это файл Controls.pas строки 7098-7126 для Delphi 7). Дальше, я создаю новый пустой проект и перекрываю это сообщение следующим образом:
Запускаю, появляется пустая форма... Нажимаю просто одну клавишу '1'. Вылезает ShowMessage c надписью '49' (ASCII-код символа '1'). Это все понятно. Но вот нажимаю Ctrl+1 - не вылезает вообще никакого сообщения - это значит, что WM_CHAR не приходит, следовательно никакого OnKeyPress не должно быть... (Про WM_KEYUP\WM_KEYDOWN в данном случае я вообще ничего не говорю - они приходят исправно)... И я просто не могу понять, почему тебе приходит WM_CHAR при нажатии на Ctrl+1 (раз обработчик срабатывает), а у меня нет? Это сообщение отредактировал(а) ama_kid - 21.11.2007, 16:23 -------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
||||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |