Форум: "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