
17.10.2010, 19:21
|
Прохожий
|
|
Регистрация: 17.10.2010
Сообщения: 2
Репутация: 10
|
|
Вопрос о Callback-функции
Есть куча примеров о там, как создать окно на WinAPI. Захотелось все это запихнуть все в один объект и не париться каждый раз с кодом, вот только с callback'ом возникли проблемы.
За код просьба сильно не пинать...
Код:
{$C +}
program Project1;
uses
Windows, SysUtils, Messages;
const WndClassName = 'PROJECT1WCN';
type TWinCallback = function(aHandle : THandle; aMsg : Longint; awParam : WPARAM; alParam : LPARAM): Longint of object; stdcall;
type
TxForm = class(TObject)
private
fHandle : THandle;
fWndClassEx : WNDCLASSEX;
fWinCallback : TWinCallback;
function WinCallback(aHandle : THandle; aMsg : Longint; awParam : WPARAM; alParam : LPARAM): Longint; stdcall;
public
constructor Create;
destructor Destroy; override;
end;
{$R *.res}
{---------------------- TxForm ----------------------------}
constructor TxForm.Create;
begin
inherited Create;
fWinCallback := WinCallback;
ZeroMemory(@fWndClassEx, sizeof(fWndClassEx));
with fWndClassEx do
begin
cbSize := sizeof(fWndClassEx);
lpszClassName := WndClassName;
lpfnWndProc := @fWinCallback;
Style := CS_VREDRAW or CS_HREDRAW;
hInstance := hInstance;
hIcon := LoadIcon(hInstance, IDI_APPLICATION);
hCursor := LoadCursor(hInstance, IDC_ARROW);
hbrBackground := COLOR_BTNFACE + 1;
lpszMenuName := nil;
cbClsExtra := 0;
cbWndExtra := 0;
end;
ASSERT(RegisterClassEx(fWndClassEx)<>0, 'RegisterClassEx');
fHandle := CreateWindowEx(WS_EX_TOPMOST,
WndClassName,
'Proj1',
WS_OVERLAPPED,
100,
100,
200,
200,
0,
0,
hInstance,
nil);
ASSERT(fHandle <> 0, 'CreateWindowEx');
ShowWindow(fHandle, SW_SHOW);
UpdateWindow(fHandle);
end;
destructor TxForm.Destroy;
begin
inherited;
end;
function TxForm.WinCallback(aHandle : THandle; aMsg : Longint; awParam : WPARAM; alParam : LPARAM): Longint;
begin
Result := DefWindowProc(aHandle, aMsg, awParam, alParam);
end;
{---------------- End of TxForm ---------------------------}
//==============================================
var xForm : TxForm;
begin
xForm := TxForm.Create;
end.
Как правильно реализовать?
|