El hecho de cambiar SWP_NOACTIVATE por SWP_SHOWWINDOW puede provocar alteraciones al perder el foco pues la ventana se va a "negar" a ello. La única pega que se puede poner es que se debe poner FormStyle = fsStayOnTop; en el momento de diseño, en el constructor, o bien alterar el código de esta forma para obligar el primer plano desde el comienzo:
Código:
void __fastcall TForm3::WndProc(Messages::TMessage& Message)
{
if(Visible && Message.Msg == WM_KILLFOCUS || Message.Msg == WM_SHOWWINDOW){
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
}
TForm::WndProc(Message);
}
A mi me funciona correctamente en Win XP.
Saludos.