Как я могу разыграть WNDPROC для TWndMethod - PullRequest
1 голос
/ 03 декабря 2010

Как я могу привести WNDPROC к TWndMethod

, пока я пытаюсь это сделать, но выдает мне ошибку invalid typecast.

 TWndMethod(Pointer(GetWindowLong(FHandle, GWL_WNDPROC)));

Ответы [ 2 ]

2 голосов
/ 03 декабря 2010

Если вы хотите создать подкласс оконного дескриптора (используя SetWindowLong) для обработки оконных сообщений в функции TWndMethod, вы не должны приводить значение, возвращаемое GetWindowLong (FHandle, GWL_WNDPROC) к TWndMethod. Вам следует использовать функцию MakeObjectInstance, чтобы получить значение, которое можно вместо этого передать в SetWindowLong. Прочитайте ответ Sertac Akuyz для общей идеи.

Обратите внимание, что необходимость подкласса дескриптора окна очень редко встречается в приложениях Delphi. Delphi предоставляет несколько других способов вмешательства в обработку оконных сообщений, они более просты и безопасны.

1 голос
/ 03 декабря 2010

У вас здесь две проблемы. Во-первых, GetWindowLong не дает вам фактический WndProc, но дает к нему доступ.

Во-вторых, TWndMethod определяется как procedure(var Message: TMessage) of object; Это указатель на метод, а не указатель на функцию, поэтому вы не можете привести к нему нормальный указатель. Что именно вы пытаетесь сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...