Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.035 c
4-1091483639
CAMCOH
2004-08-03 01:53
2004.09.19
Timer в Service Application


4-1091686363
malamba
2004-08-05 10:12
2004.09.19
отслеживание курсора и перерисовка изображения


1-1094206373
X-Disa
2004-09-03 14:12
2004.09.19
TImgView32 и слои


6-1085769659
oleg_SYS
2004-05-28 22:40
2004.09.19
Как определить, существует ли почтовый адрес?


1-1093921769
Александр1
2004-08-31 07:09
2004.09.19
Реестр





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский