| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Перехват клавиш |
| Автор: Kbl4AH 4.5.2008, 21:30 |
| Добрый вечер! Столкнулся с такой проблемой - у меня на форме много Edit'ов, скажем штук 10... мне нужно, чтобы выполнялся код при нажатии клавиши F2, причом она может быть нажата в любом Edit'е... делать 10 раз процедуру onkeyup для каждого Edit'a - не вариант... глянул DRKB - нашел кусок кода, в котором используется процедурка CM_dialogkey перехвата диалоговых клавиш до того, как они будуь обрабатываться формой (покрайней мере, я так понял)... все классно, процедурка клевая (в других задачах меня устраивала)... прекрасно ловит всякие табы и ентеры, но почему-то не срабатывает с F-клавишами (наверное, они не диалоговые)... подскажите какую-нибудь другую процедурку, пожалуйста, или помогите написать собственную процедуру для onkeyup, чтоб не надо было делать одинаковый громоздкий onkeyup только в разных Edit'ах, а чтоб можно было один раз процедурку описать, а потом в каждом editX.onkeyup чисто одну строчку вписывать... просто я недавно программирую, учусь только, и еще не освоил написание собственных процедур... Заранее СПАСИБО, всем откликнувшимся! |
| Автор: Akella 4.5.2008, 22:51 | ||
| что-то вроде этого кода, который должен находиться в событии OnKeyPress или OnKeyDown само собой, что свойство KeyPreview формы должно быть в True
почитай о привидении типов, оператора IS и AS и о RTTI |
| Автор: Poseidon 5.5.2008, 14:17 |
| Сделай одну и пропиши ее в каждом едите |
| Автор: Kbl4AH 5.5.2008, 16:01 |
| В принципе так и сделал... просто до этого ни разу свою процедуру не делал - оказалось не так сложно, как думал))) но серавно мне вариант с перехватом клавиш больше нравицца... как все таки сделать перехват одной процедурой АБСОЛЮТНО ЛЮБЫХ клавиш? |
| Автор: SAVANE 8.5.2008, 12:28 | ||
| Не уверен что про то спрашивают но Свойства формы KeyPeview=True
|
| Автор: Poseidon 8.5.2008, 13:20 |
| vk_F2 |
| Автор: Akella 10.5.2008, 13:41 |
vk_F2, vk_return, vk_escape, vk в справочной системе есть все коды виртуальных клавиш кстати если в гугле поискать по ключевому слову vk_return то вылезешь сюда http://delphi.about.com/od/objectpascalide/l/blvkc.htm |
| Автор: maximus666 12.5.2008, 21:39 | ||
| Перехват абсолютно любых клавиш можно сделать поставив кейборд хук (дополнительная инфа есть в http://www.drkb.ru/). Для этого нужно написать простенькую DLL, код которой может быть следующий:
в коде программы достаточно импортировать функции SetHook и UnHook. |
| Автор: Akella 12.5.2008, 23:23 |
| При чём здесь DLL? Нужно в конкретной форме приложения ловить клавиши? а не в DLL |
| Автор: Kbl4AH 15.5.2008, 21:52 |
| Фига вы разогнались 2Акелла Не надо мне никакие актив контролы... Допустим у мну на форме пяток разных вариантов компонентов - я что, 5 раз условие писать буду? Мне надо чтобы форма улавливала нажатую клавишу без разницы какой компонент при этом активный... 2СаванЧто-то похожее на то, что мне нужно... Тока объясни на пальцах, что за свойство КейПревю, за что оно отвечает? 2Остальные уважаемые винградари А нет ни у кого сцылки на понятную начинающим доку по всяким сендерам, обжектам, активам, хендлам и т.п.? А то именно эта штука походу мне нужна... Просто работаю с БД Оракакл... Запросы сложные не требуцца, а с простыми напрягов - нет... Зато есть траблы в Делфи с формами, нажатиями клавиш и т.п. Просто надоело на каждой форме делать по несколько невидимых лэйбелов (меток) и писать кучу условий (типа - не прально работаешь, а скушай тада условие такое-то... реально код становицца фиговочитабельным), чтоб формы между собой по правилам воевали... З.Ы. Делфийским перцам Перебарывайте себя и не отвечайте новичкам - да ты, лошара, смотри туда-сюда... если лень или убивает ответить грамотно, то лучше ваще не отвечать... |
| Автор: SAVANE 15.5.2008, 23:49 | ||||||
В событии OnCreate формы напиши.
Дальше событие формы FormKeyPress Напиши условие
При этом в После зен пишеш тот код который нужно выполнить при нажатии F2 Нужно Другую кнопку обработать в процедуре FormKeyPress пиши еще одно условие к примеру
и так хоть всю клавиатуру. Где найти коды кнопок писал Akella |
| Автор: Kbl4AH 16.5.2008, 07:43 |
| 2Саван. Мм, немножко не это спрашивал... Объясни мне, плиз, что это за свойство KeyPreview, что оно делает када включено и выключено? |
| Автор: Qu1nt 16.5.2008, 13:21 | ||||||
|
| Автор: Kbl4AH 16.5.2008, 13:58 |
| Краткость - сестра таланта;) |
| Автор: Akella 16.5.2008, 21:47 | ||||||||||||||
ДА НЕТ ЖЕ!!!!!!!!!! Я ТЕБЕ КОД ДАЛ ДЛЯ ФОРМЫ, А НЕ ДЛЯ 5-10-25 КОНТРОЛОВ!!!!!!!!
ЗАБЫЛ ДОПИСАТЬ, ЧТО В СОБИТИИ ФОРМЫ И НЕ ЗАБУДЬ Добавлено через 2 минуты и 18 секунд
ВОТ ИМЕННО ЭТО Я И ИМЕЛ ВВИДУ НЕУЖЕЛИ НЕ ПОНЯТНО ЭТО:
Добавлено через 3 минуты и 46 секунд
это свойство отвечает за приоритет улавливания клавиш, так сказать, если := True, то форма первая получает нажатие клавиши, а вотом передаёт дальше, если ты конечно не запретишь дальше передавать Добавлено через 4 минуты и 17 секунд кстати по поводу KeyPreView..... а что клавиша F1 на клаве выламана??????? Добавлено через 5 минут и 59 секунд
за свою практику я на винграде таких ответов ещё не видел Добавлено через 7 минут и 52 секунды Но и вы не ленитесь использовать поиск по форуму или интернету в целом, а ещё есть такое понятие, как справка ну и, может быть + переводчик. Добавлено через 12 минут и 35 секунд
ты про гугл слышал? http://www.google.com.ua/search?hl=ru&q=keypreview&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&meta=lr%3Dlang_ru |
| Автор: Kbl4AH 17.5.2008, 20:22 |
| 2Акелла. Грамотно и доходчиво. Спасибо! |
| Автор: Akella 17.5.2008, 20:39 |
| Наконец-то |