Главная страница
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.072 c
14-1093746177
Думкин
2004-08-29 06:22
2004.09.19
С днем рождения! 29 августа


1-1094209746
shc
2004-09-03 15:09
2004.09.19
Проблемы при работе с интерфейсами


3-1093005881
Wolfram
2004-08-20 16:44
2004.09.19
Про кавычки


1-1094119639
happyandry
2004-09-02 14:07
2004.09.19
Как правильно называется компонент (индикация по часовой стрелке)


3-1093179316
CAMCOH
2004-08-22 16:55
2004.09.19
Как очистить таблицу с помощью Zeos