![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
lpfnWndProc := ???
Toxic © (2004-08-05 22:23:00)Ув. прогеры.
Просьба - подскажите, как выпутаться из такой ситуации:
Решил написать свой небольшой класс для создания формы под винапи. Все работало. До тех пор, пока не сделал такую штуку:
type TAPIForm = class
private
h_Wnd : HWND;
DC : HDC;
keys : array [0..255] of boolean;
public
Event_OnCreate : procedure;
Event_OnClose : procedure;
Event_OnResize : procedure;
Event_OnKeyDown : procedure;
Event_OnKeyUp : procedure;
Event_OnLButtonDown : procedure;
Event_OnLButtonUp : procedure;
Event_OnMouseMove : procedure;
Event_OnTimer : procedure;
Constructor CreateForm(Width, Height : integer);
Destructor DestroyForm();
function FormMainAction(hWnd : HWND; Msg : UINT; wParam : WPARAM; lParam : LPARAM) : LRESULT;
....
...
Constructor CreateForm(...);
...
Style := CS_HREDRAW or CS_VREDRAW or CS_OWNDC;
lpfnWndProc := @MainAction;
hInstance := h_Inst;
...
function TAPIForm.MainAction(hWnd: HWND; Msg: UINT;
wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
case (Msg) of
WM_CREATE:
begin
Event_OnCreate;
end;
WM_CLOSE:
begin
Event_OnClose;
PostQuitMessage(0);
Result := 0
end;
WM_KEYDOWN:
begin
Event_OnKeyDown;
keys[wParam] := True;
Result := 0;
end;
WM_KEYUP:
begin
Event_OnKeyUp;
keys[wParam] := False;
Result := 0;
end;
WM_SIZE:
begin
Event_OnResize;
YamahaResizePort(LOWORD(lParam),HIWORD(lParam));
Result := 0;
end;
WM_LBUTTONDOWN:
begin
Event_OnLButtonDown;
end;
WM_LBUTTONUP:
begin
Event_OnLButtonUp;
end;
WM_MOUSEMOVE:
begin
Event_OnMouseMove;
end;
WM_TIMER :
begin
begin
Event_OnTimer;
end;
end;
else
Result := DefWindowProc(hWnd, Msg, wParam, lParam);
end;
end;
Вот так выглядит последняя версия кода.
Дело в том, что раньше я подключал юнит с этим кодом(полным) в новый проект и каждый раз заново писал функцию MainAction.
Теперь я поместил ее в юнит с формой... И при попытке прикрепить эту функцию к окну возникает ошибка: Variable required.
Однако переместить ее (функцию) обратно в главный код проектов по некоторым соображениям невозможно.
Намного лучше было бы, если бы сия функция так и висела в это юните с формой. Как можно извернуться в такой ситуации?
Как присвоить эту процу к lpfnWndProc ?
Заранее благодарен за ответы.
Toxic (2004-08-05 23:53:00) [1]Спасибо. Попробую применить.
VMcL (2004-08-05 23:18:00) [2]MakeObjectInstance() + FreeObjectInstance()
AllocateHWnd() + DeallocateHWnd()