31 мая 2012 г.

Как сделать, чтобы форма показывалась поверх всех окон в системе?

К сожалению, установка свойства формы FormStyle в fsStayOnTop заставляет ее всегда находиться выше других окон в приложении, но не во всей системе.

Для того, чтобы окно всегда находилось поверх других окон в системе, его нужно немного модифицировать:

1. Добавьте в секцию private вашей формы метод CreateParams:

TForm1 = class(TForm)
private
  procedure CreateParams(var Params: TCreateParams); override;
end;

2. Ниже вставьте такой код этого метода:

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do begin
    ExStyle := ExStyle or WS_EX_TOPMOST;
    WndParent := GetDesktopWindow;
  end;
end;

Как показать форму не активируя ее?

Без долгих пояснений, вот код:

ShowWindow(Form1.Handle, SW_SHOWNOACTIVATE);
Form1.Visible := True;

Работает идеально, проверял в Delphi XE.