 
			
				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. 
 
Как правильно реализовать?  
		
	
		
		
		
		
		
	
		
			
			
			
			
				 
			
			
			
			
		 
		
	
	
	 |