![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 25.10.2009
Сообщений: 92
|
![]()
Есть диалог, на нем RichEdit, в котором фокус ввода (причем он нужен только для вывода, т.е. ReadOnly). Проблема такая: нужно отлавливать нажатия клавиш в процедуре главного окна - диалога, а сообщение WM_KEYDOWN ему не приходит - возможно, из-за того что его Richedit принимает. Подскажите, что сделать - я не совсем хорошо понимаю, как функционирует этот обмен сообщениями в API.
|
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 30.03.2010
Сообщений: 17
|
![]()
на счет окна незнаю, но для перехвата во всем windows подойдет
Код:
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 25.10.2009
Сообщений: 92
|
![]()
Почему-то функция getasynckeystate реагирует на нажатие с большим опозданием, или через раз. Должен быть более правильный способ...
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 18.04.2009
Сообщений: 688
|
![]()
вот мы используем функцию getasynckeystate , она подойдёт если пользоваться на с++ винайпи в вижуале? как я понял функции одни и те же, так?
|
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 20,999
|
![]() Цитата:
по делу, я б наверно определил Ричу свою оконную функцию, в которой обрабатывать нужные сообщения(но не забываем что нужно и оригинальной передавать управление, особенно на все остальные сообщения). Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 25.10.2009
Сообщений: 92
|
![]() |
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 18.04.2009
Сообщений: 688
|
![]()
Присоединюсь к теме, только вопрос не в перехвате на делфи, а на плюсах.
Читаю книжку Румянцева "Азбука программирования". Он привёл пример как сделать хук WH_CALLWNDPROC, я попробовал его переделать под перехват клавиш, только у меня возникают ошибки во время выпроления. Код:
ошибка возникает вот на этом месте: sprintf(cBuffer, "PCWPSTRUCT->wParam - %08x\n", ((PCWPSTRUCT)lParam)->lParam); Честно говоря, я особо не понял приведение типа последнего аргумента как это происходит. Как может быть преобразован тип LPARAM к типу структуры. Подскажите кто что знает плиз |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
![]()
почему бы не сабклассинг Richedit контла?
Нет, ну правда..
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 18.04.2009
Сообщений: 688
|
![]()
Извиняюсь, я не особо понял про что вы. в окне я никаких элементов не создавал. мне надо только осуществить банальный перехват нажатых клавиш
|
![]() |
![]() |
![]() |
#10 | |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
![]() Цитата:
получать управление при поступлении команд ричэдиту вначале будет процедура EditWndProc, которая собственна и будет вами написана. Если сообщение вы не обрабатываете - передвайте далее (параметры те которые приходят в эту вашу процедуру): CallWindowProc(OldWndProc,hRichEdit ,uMsg,wParam,lParam); если же обрабатываете, то обработайте и на ваше усмотрение можете просто сделать return и не обрабатывать вообще ничего.
Нет, ну правда..
|
|
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перехват клавиши | KoBRaAndrey | Общие вопросы Delphi | 2 | 27.03.2010 17:43 |
перехват нажатия клавиш | skalt12 | Общие вопросы Delphi | 4 | 17.08.2009 13:06 |
Перехват клавиши | mustang007 | Общие вопросы Delphi | 6 | 15.04.2009 02:01 |
Перехват нажатия клавиш. | Vi_russ | Общие вопросы Delphi | 1 | 02.12.2008 20:25 |
Перехват нажатия Ctrl | Lonix | Win Api | 3 | 13.09.2007 18:20 |