Показать сообщение отдельно
Старый 09.07.2010, 10:53   #1  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Перехват событий на форме DAX 2009
Всем привет!

Стоит задача по подключению внешней OLE компоненты, которая передает данные, генерируя событие WM_COPYDATA

Стал думать, как перехватить. Поднял старые темы, в большинстве которых сам же объяснял, что это невозможно. Однако, в классе FormRun нашел интересный метод:installMessageProc
X++:
public int installMessageProc(int message, int handle, str method)
Без описания, но, в общем, понятно все и так: Событие, Дескриптор окна, Метод. Метод тоже должен быть задан в особом формате:
X++:
void CallbackMethod(int hwnd, int message, int wParam, int lParam, int px, int py)
Проверил - действительно, работает! Создал тестовую форму, в ининте - указал несколько событий, на которые надо реагировать, и два дескриптора: один - на саму форму, второй - на контрол типа Window. А вот потом начинается самое интересное - события она перехватывает, но не все. KEY_DOWN - точно перехватывает.

Стал проверять. А как? Создал клавишу, которая посылает события, используя WinAPI::SendMessage, и, как ни странно, ни на одно из событий даже сама форма - не реагирует. Даже когда посылаешь WM_CLOSE.

Какие будут идеи:
1. Как сгенерировать событие
2. Как сделать так, что бы installMessageProc его перехватил.

Попробуем решить задачу 2003 года?

Форму для проведения экспериментов прилагаю.

Георгий
Вложения
Тип файла: xpo Form_ITB_SendMessageTest.xpo (5.8 Кб, 512 просмотров)
За это сообщение автора поблагодарили: mazzy (2), blokva (1), shogel (1).