Главная страница
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.037 c
14-1093593865
gn
2004-08-27 12:04
2004.09.19
CaribeНа


14-1094118093
Sergey_Masloff
2004-09-02 13:41
2004.09.19
арбузы


14-1087372396
Paul
2004-06-16 11:53
2004.09.19
Мастера Дельфи - Junior8


14-1094040572
BigFat
2004-09-01 16:09
2004.09.19
звуки


4-1091086264
DeepProg
2004-07-29 11:31
2004.09.19
Чтение с мультиметра через RS-232C