Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2011, 13:28   #1
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию регистрация класса окна (указатель на процедуру)

есть класс:

Цитата:
TTest = class
Handle:HWND;
Canvas:TCanvas;
hwndmain:HWND;
constructor Create(AOwner:TComponent);
function MainWndProc(window: hwnd; AMessage, wparam, lparam: longint):longint; stdcall; export;
end;
есть функция, заполняет структуру TWndClass для регистрации класса:

Цитата:
function TTest.initapplication:boolean;
var
wcx: twndclass;
begin
wcx.style := cs_hredraw or cs_vredraw;
wcx.lpfnwndproc := @TTest.MainWndProc;
wcx.cbclsextra := 0;
wcx.cbwndextra := 0;
wcx.hinstance := application.Handle;
wcx.hicon := loadicon(0, IDI_ASTERISK);
wcx.hcursor := loadcursor(0, idc_arrow);
wcx.hbrbackground := color_window;
wcx.lpszmenuname := nil;
wcx.lpszclassname := pchar(winname);
result:=windows.registerclass(wcx) <> 0;
end;

потом возникает ошибка создания окна.
проблема вот в этом:
wcx.lpfnwndproc := @TTest.MainWndProc;
ибо это есть
procedure TTest.MainWndProc(...);

если прописать эту процедуру за пределами класса, то все работает:
procedure MainWndProc(...);
wcx.lpfnwndproc := @MainWndProc;

компилируется нормально.

wcx.lpfnwndproc как я понял просит pointer,
поэтому у меня вопрос, как получить pointer на TTest.MainWndProc?
xrob вне форума Ответить с цитированием
Старый 22.06.2011, 14:37   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вы знаете чем отличается функция от метода класса?
максимум это выйдет статический метод класса.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.06.2011, 14:49   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
stdcall; export;
А разве можно экспортировать метод класса?
Цитата:
поэтому у меня вопрос, как получить pointer на TTest.MainWndProc?
Если и получать указатель то не на описание метода, а на его реализацию. Точно не помню, но есть метод MethodAddress если не ошибаюсь он вернет адрес функции-метода http://www.freepascal.org/docs-html/...odaddress.html

Однако смутны цели автора...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатель на процедуру aleks.halk Общие вопросы Delphi 7 10.05.2011 09:51
Определение типа класса по переменной на объект этого класса при компиляции phomm Общие вопросы Delphi 24 08.04.2011 14:11
Указатель на метод класса _Art_ Общие вопросы C/C++ 6 03.04.2010 01:45
Как в базовом классе описать указатель на объект производного класса? MasterGH Общие вопросы C/C++ 3 16.11.2009 02:55
Как передать указатель в процедуру??? kate4ka Общие вопросы Delphi 1 17.03.2008 12:49