Главная страница
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.066 c
9-1083360628
wiz
2004-05-01 01:30
2004.09.19
2D аркада на 3D движке (oGL). demo N8


3-1092993457
Lizka
2004-08-20 13:17
2004.09.19
как вытащить значение запроса


4-1091777599
Ricko
2004-08-06 11:33
2004.09.19
SMS и PDU


11-1080710352
*pavel
2004-03-31 09:19
2004.09.19
hint & showhint


1-1094399416
ilnarab
2004-09-05 19:50
2004.09.19
Как поставить Таймер, чтобы он обновлял Caption?