Главная страница
    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.028 c
3-84011
McSimm2
2003-05-30 14:22
2003.06.26
Не конектится к ORACLE


1-84122
TCrash
2003-06-10 23:33
2003.06.26
Record


8-84448
Дмитрий К.К.
2003-03-12 08:39
2003.06.26
Еще раз о TBitmap


1-84370
kasper
2003-06-16 14:41
2003.06.26
Как вставить строку в файл!!!!!!!!


14-84522
Silver_
2003-06-06 15:25
2003.06.26
где посмотреть значение констант dsEdit, dsInsert, ...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский