Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Делаем Delphi форму всегда поверх других окон

Delphi , Программа и Интерфейс , Модальные формы

Заголовок: Делаем Delphi-форму всегда поверх других окон

Вопрос: Как сделать так, чтобы форма в Delphi (2009 Pro) всегда была поверх других окон, даже если она не активна?

Ответ: Для того чтобы сделать Delphi-форму всегда поверх других окон, можно воспользоваться свойством FormStyle. Нужно установить значение этого свойства в fsStayOnTop. Тогда форма будет всегда поверх других окон, независимо от того, активна она или нет.

Пример кода на Object Pascal (Delphi):

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Self.FormStyle := fsStayOnTop;
end;

end.

В данном примере в методе FormCreate устанавливается значение свойства FormStyle в fsStayOnTop. Теперь форма будет всегда поверх других окон, независимо от того, активна она или нет.

Альтернативный ответ: В более новых версиях Delphi (2007/2009) поведение VCL изменилось в отношении родителя формы. Родителем формы теперь является главная форма, а родителем главной формы - рабочий стол. Если вы хотите изменить это поведение, можно изменить строку Application.MainFormOnTaskbar в файле *.dpr на False, чтобы получить старое поведение. Однако это также делает ваше приложение странным в Vista и Windows 7. Другой вариант - переопределить виртуальный метод CreateParams во всех ваших немодальных дочерних формах и установить поле Params.WndParent в рабочий стол (HWND_DESKTOP) или все еще существующий Application.Handle.

Пример кода на Object Pascal (Delphi):

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TMyChildForm = class(TForm)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  MyChildForm.CreateParams(Params);
end;

procedure TMyChildForm.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.WndParent := HWND_DESKTOP;
end;

end.

В данном примере в методе CreateParams устанавливается значение поля Params.WndParent в HWND_DESKTOP. Теперь форма будет всегда поверх других окон, независимо от того, активна она или нет.

Создано по материалам из источника по ссылке.

Вопрос: Как сделать Delphi-форму всегда поверх других окон, даже если она не активна?


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Модальные формы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-23 12:23:49/0.0034689903259277/0