Форум: "WinAPI";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
ВнизSetWindowLong(hwnd,GWL_WNDPROC,Integer(P)); Найти похожие ветки
← →
I:D (2003-04-25 18:09) [0]Существует ли способ подложить под окно (контрол) оконную процедуру, реализованную в классе, причем так, чтоб работало?
Пробовал, но что происходит, не понимаю.
Есть, допустим, метод:
function TWnd.DefaultProc(handle: HWnd; message, wParam, lParam: Integer): LongInt; stdcall;
begin
Result := DefWindowProc(handle,message,wParam,lParam);
end;
Создаю окно, при этом lpfnWdnProc := @DefWindowProc;
Затем:
SetWindowLong(хвнд,GWL_WNDPROC,Integer(P));
где p - указатель на TWnd.DefaultProc.
Ставлю точку останова на строке
Result := DefWindowProc(handle,message,wParam,lParam);
Исполение доходит до неё, однако окно висит. Можно ли как-то выкрутиться, или я болею чем-то?
← →
C (2003-04-25 18:54) [1]
> где p - указатель на TWnd.DefaultProc.
TWnd.DefaultProc - это метод класса, а р должно указывать на статическую процедуру
function DefaultProc(handle: HWnd; message, wParam, lParam: Integer): LongInt; stdcall;
begin
Result := Wnd.DefaultProc(handle,message,wParam,lParam);
end;
← →
Игорь Шевченко (2003-04-25 19:43) [2]MakeObjectInstance
← →
Scorp (2003-04-25 19:53) [3]Значит так:
методы классов отличаются от обычных функций(процедур) только дополнительным неявним параметром, который передается последним и потом трактируэтся как Self. Поэтому тут только один вариант, не выводящий из рамок ООП:
Написать клас-метод класса, и передавать его параметром (класс-методы не принимают дополнитедьных параметров, а попросту трактируются, как стачичесские методы из пространства имени класса).
← →
I:D (2003-04-25 21:31) [4]Ок, буду пробовать!
← →
I:D (2003-04-25 21:44) [5]
> C (25.04.03 18:54)
Согласен.
> Scorp (25.04.03 19:53)
Что-то не представлю пока!? На подумать.
> Игорь Шевченко © (25.04.03 19:43)
> MakeObjectInstance
Что-то у меня, наверное, хелп срубленный, не реагирует на %. Ага, врубился, ништяк, хорошо, просто ну надо допереть было. Спасибо Всем!
procedure Proc(var Msg: TMessage);
SetWindowLong(ХВНД, GWL_WNDPROC, Longint(MakeObjectInstance(Proc)));
Игорь, Спасибо.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.03 c