yup, vcl tricks here Smile
no VCL tricks... I did the following:

[pascal]
{Window proc}

function WindowProc(hWnd,Msg,wParam,lParam:Integer):Integer ; stdcall;
begin
//Currentengine is a TBF_CustomEngine object.
//so i just pass on the messages to a member of the TBF_CustomEngine class

Result :=CurrentEngine.WndProc(hWnd,Msg,wParam,lParam);
end;

function TBF_CustomEngine.WndProc(hWnd,Msg,wParam,lParam:In teger): integer;
begin
case Msg of
WM_ACTIVATEAPP : begin
fFocus := Boolean(wParam);
if fFocus then
begin
//has focus
Log('>>>Application activated');
ShowCursor(false);
end else begin
//has no focus
Log('>>>Application deactivated');
ShowCursor(true);
end;
end;

WM_TIMER: begin
//FPS update only when game has focus
fUpdateFPS := true;
end;

WM_CLOSE: begin
{WM_CLOSE quit's rendering loop
all resources and devices will be destroyed in
BF_Core's destructor wich is called when BF_Core.Run ended}
PostQuitMessage(0);
Exit;
end;
WM_SYSKEYDOWN: begin
//ProcessKeyDown(wparam, lparam);
Result := 0;
Exit;
end;
WM_SYSKEYUP: begin
//ProcessKeyUp(wparam, lparam);
Result := 0;
Exit;
end;
end;

Result := DefWindowProc(hWnd,Msg,wParam,lParam);
end;

constructor TBF_CustomEngine.Create;
begin
inherited Create;

fEngine := Self;
fParent := Self;
.....

//Initalize the application
wClass.lpszClassName:= 'CN';
wClass.lpfnWndProc := @WindowProc; //assign the windowproc function

.....

//create window
fHwnd := CreateWindow(wClass.lpszClassName,'bitFIST 3D',
WS_OVERLAPPEDWINDOW or WS_VISIBLE,
100,100,640,480,0,0,hInstance,nil);
end;

[/pascal]