Доброго времени суток!
Задача: отобразить форму оповещения поверх всех окон своей программы и Windows.
Воплощение
procedure TFormPopup.FormCreate(Sender: TObject);
begin
  // Делаем форму поверх всех окон
  {Функция SetWindowPos изменяет размер, позицию и Z-последовательность дочернего, выскакивающего или верхнего уровня окна.
  Дочерние, выскакивающие и верхнего уровня окна размещаются по порядку согласно их появлению на экране.
  Самое верхнее окно принимает самый высокий ранг и становится первым окном в Z-последовательности.}
  SetWindowPos(Self.Handle, HWND_TOPMOST, Left, Top, Width, Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
  {Функция SetWindowLong изменяет атрибуты определяемого окна. Функция также устанавливает 32-разрядное (длинное) значение
  при заданном смещении в дополнительном пространстве памяти об окне.}
  SetWindowLong(Self.Handle, GWL_HWNDPARENT, GetDesktopWindow);
end;
procedure TFormPopup.ProcShowPopup(ImageIndex: Integer);
begin
  Self.Left := Screen.WorkAreaWidth - Self.Width;
  Self.Top := Screen.WorkAreaHeight - Self.Height;
  Self.Show;
end;
Работает. Но если в моей программе открыта форма с полем ввода, и во время набора текста появляется оповещение, то фокус сразу же пропадает с этого поля и далее набираемый текст уходит в никуда.