Tivemos problemas com essa história de foco "fugir" no TEF, já que ele tem algumas exigências em relação a isso.
Resolvemos assim:
procedure TFormPrincipal.ForceForegroundWindow(hwnd: THandle);
// (W) 2001 Daniel Rolf
// Home - danielrolf.com
// rolf@finecode.de
var
hlp: TForm;
begin
hlp := TForm.Create(nil);
try
hlp.BorderStyle := bsNone;
hlp.SetBounds(0, 0, 1, 1);
hlp.FormStyle := fsStayOnTop;
hlp.Show;
mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
SetForegroundWindow(hwnd);
finally
hlp.Free;
end;
end;
Chama assim:
ForceForegroundWindow(FormPrincipal.Handle);
Meio "gambi", mas resolveu.