Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.19;
Скачать: CL | DM;

Вниз

lpfnWndProc := ???   Найти похожие ветки 

 
Toxic   (2004-08-05 22:23) [0]

Ув. прогеры.
Просьба - подскажите, как выпутаться из такой ситуации:
Решил написать свой небольшой класс для создания формы под винапи. Все работало. До тех пор, пока не сделал такую штуку:
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 ?

Заранее благодарен за ответы.


 
VMcL ©   (2004-08-05 23:18) [1]

MakeObjectInstance() + FreeObjectInstance()
AllocateHWnd() + DeallocateHWnd()


 
Toxic   (2004-08-05 23:53) [2]

Спасибо. Попробую применить.



Страницы: 1 вся ветка

Текущий архив: 2004.09.19;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.033 c
14-1093764725
Damatrion
2004-08-29 11:32
2004.09.19
WinApi


14-1093525768
Копир
2004-08-26 17:09
2004.09.19
H E L P. Damned Javaw !


4-1091637867
AD_infiniTUM
2004-08-04 20:44
2004.09.19
Как определить ширину текста


1-1094110543
DesWind
2004-09-02 11:35
2004.09.19
XP Manifest


1-1094476911
low
2004-09-06 17:21
2004.09.19
WebBrowser