Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
|
||||||
1 | ||||||
Перехват сообщений13.11.2012, 21:13. Показов 9186. Ответов 13
Метки нет (Все метки)
Есть такая конструкция:
Мне надо сделать, чтобы это работало еще для некоторых компонентов (или для всей программы). Знаю, что можно прописать тоже самое для других компонентов, но это как-то громоздко. Может есть другое решение? Перенос процедуры в TForm1 ничего не дал.
0
|
13.11.2012, 21:13 | |
Ответы с готовыми решениями:
13
Перехват сообщений в RichEdit Перехват сообщений от ICQ Перехват сообщений от клавиатуры! перехват ошибки |
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
13.11.2012, 21:33 | 2 |
Специально для этого существующее и вполне документированное событие Applicаtion.OnMessage спасет ОРД и упасет его от изобретения велосипеда.
0
|
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
|
|
13.11.2012, 22:28 [ТС] | 3 |
Пытаюсь разобраться... А как определить к какому компоненту относится событие (например, событие "вставка" куда? в Едит1, Мемо2 и т.п.)?
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
13.11.2012, 22:31 | 4 |
0
|
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
|
||||||
13.11.2012, 22:40 [ТС] | 5 | |||||
Почему-то не работает:
0
|
Супер-модератор
|
|
13.11.2012, 22:53 | 6 |
WM_PASTE подобным образом не ловится. Система шлет его не в общую очередь сообщений приложения, а непосредственно в WndProc тому контролу, в который осуществляется вставка. Поэтому перехватить его можно не из Application.OnMessage, а сабклассингом нужного контрола (переопределением его WndProc) или глобальным хуком.
0
|
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
|
|
13.11.2012, 22:54 [ТС] | 7 |
Вставка делается, а событие не перехватывается.
0
|
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
|
||||||
13.11.2012, 22:59 [ТС] | 9 | |||||
сабклассингом - это, если я правильно понял, как у меня вначате описано?:
глобальным хуком - можно поподробнее или пример какой, плиз?
0
|
Супер-модератор
|
||||||
14.11.2012, 01:25 | 10 | |||||
Можно - так как у тебя, а можно - вот так:
С хуками пока не заморачивайся.
1
|
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
|
|
14.11.2012, 09:36 [ТС] | 11 |
Понятно, спасибо.
Тогда еще такой вопрос: можно как-то в процедурах TEdit'а вызвать процедуры TForm1 (они нужны для обработки вставки), а то Дельфи ругается:[This form of method call only allowed for class methods]?
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
14.11.2012, 09:57 | 12 |
1. Объявить и реализовать в любом своем объекте метод MyMsgHandler с прототипом TWndMethod, в котором фильтровать и обрабатывать нужным образом WM_PASTE.
2. Получить указатель на оконную ф-цию вызовом MyWndFunc := MakeObjectInstance(MyMsgHandler) 3. Перечислить все винконтролы приложения, отфильтровать нужные. 4. Для каждого отфильтрованного винконтрола заменить вызовом SetWindowLong его оконную функцию на MyWndFunc.
1
|
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
|
|
14.11.2012, 20:26 [ТС] | 13 |
, но я попробую разобраться. Кстати, может пример похожий есть? Он бы мне здорово помог.
0
|
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
|
|||||||||||
17.11.2012, 11:25 [ТС] | 14 | ||||||||||
Впрочем это можно использовать, если надо переиначить конкретный компонент, а не все компоненты класса.
0
|
17.11.2012, 11:25 | |
17.11.2012, 11:25 | |
Помогаю со студенческими работами здесь
14
Перехват обращений Перехват пакетов Перехват копирования перехват ошибок Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |