gpt4 book ai didi

delphi - Delphi中如何没有MainForm?

转载 作者:行者123 更新时间:2023-12-03 15:03:36 26 4
gpt4 key购买 nike

我一直在尝试让我的应用程序中的一些无模式表单出现在任务栏上 - 利用 Windows 7 中新的有用任务栏。

在表单出现在任务栏上之前,VCL 有许多问题需要解决。

但最后的问题是,最小化 VCL 指定的主窗体窗体会导致应用程序中的所有窗口消失。

Ten years ago, Peter Below (TeamB) documented these problems ,并尝试解决这些问题。但有一些问题无法解决。这些问题在 VCL 本身内部根深蒂固,实际上不可能使 Delphi 应用程序正常运行。

这一切都源于这样一个事实:您在工具栏上看到的按钮并不代表应用程序的窗口;相反,您在工具栏上看到的按钮并不代表应用程序的窗口。它代表 TApplications 窗口,该窗口是隐藏的且从未见过。然后是应用程序的MainForm,它被赋予了特殊的能力,如果被最小化,那么它会指示应用程序隐藏自己。

在我看来,如果我能做到

Application.MainForm := nil;

然后所有这些错误都会消失。该应用程序可以有其隐藏窗口,同时我将覆盖应用程序中的每个其他表单,包括我的主表单, :

procedure TForm2.CreateParams(var params: TCreateParams ); 
begin
inherited CreateParams(params);
params.ExStyle := params.ExStyle or WS_EX_APPWINDOW;
end;

但在 Delphi 中,Application.MainForm 属性是只读的。

Delphi 中怎么可能没有 MainForm

另请参阅

最佳答案

如果未指定 MainForm,则无法运行 GUI 项目。主消息循环将在没有消息的情况下立即退出。但是,这并不意味着 MainForm 必须运行您的 UI。您可以使用空白的隐藏 TForm 作为指定的 MainForm,然后让它将您的真实 MainForm 实例化为辅助 TForm。例如:

HiddenMainFormApp.dpr:

project HiddenMainFormApp;

uses
..., Forms, HiddenMainForm;

begin
Application.Initialize;
Application.CreateForm(THiddenMainForm, MainForm);
Application.ShowMainForm := False;
Application.Run;
end.

HiddenMainForm.cpp:

uses
..., RealMainForm;

procedure THiddenMainForm.FormCreate(Sender: TObject);
begin
RealMainForm := TRealMainForm.Create(Self);
RealMainForm.Show;
end;

RealMainForm.cpp:

procedure TRealMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
Application.Terminate;
end;

或者:

HiddenMainFormApp.dpr:

project HiddenMainFormApp;

uses
..., Forms, HiddenMainForm, RealMainForm;

begin
Application.Initialize;
Application.CreateForm(THiddenMainForm, MainForm);
Application.ShowMainForm := False;

RealMainForm := TRealMainForm.Create(Application);
RealMainForm.Show;
RealMainForm.Update;

Application.Run;
end.

RealMainForm.cpp:

procedure TRealMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
Application.Terminate;
end;

关于delphi - Delphi中如何没有MainForm?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3988151/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com