Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.045 c
3-83929
AlexA
2003-05-30 12:06
2003.06.26
Как программным способом изменить ширину MEMO в FastReporte.


3-83961
DBDev
2003-05-29 14:01
2003.06.26
Коллеги, помогите в качестве вычисляемого поля FLOAT впихнуть...


3-83858
DBDev
2003-06-01 16:57
2003.06.26
Как бы сделать управляемый ORDR BY в SP? Помогите ПЛЗ!


14-84553
Separator
2003-06-07 20:24
2003.06.26
Assembler


1-84228
LoMaster
2003-06-12 23:32
2003.06.26
Как программно создать EditBox (TEdit)?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский