【问题标题】:How to create splashscreen in FireMonkey?如何在 FireMonkey 中创建启动画面?
【发布时间】:2012-02-23 03:51:18
【问题描述】:

我需要在我的 FMX 程序启动时创建一个启动画面。

以下来自 VCL 的代码不再有效:

SplashScreen := TSplashScreen.Create(Application);
SplashScreen.Show;
Application.Initialize;
SplashScreen.Update; //No such function in FMX
Application.Run;

问题是在 FMX 表单中直到 Application.Run 执行后才会创建/重新绘制,因为它们使用一些 FMX 魔法来重新绘制。因为我需要 OSX 支持,所以不能使用 VCL 闪屏。

如何在 Delphi XE2 FireMonkey 项目中创建启动画面?

【问题讨论】:

  • @RRUZ:我看不出一般的“delphi”标签是如何应用于这个问题的,因为它特定于 XE2 和 FireMonkey。
  • Rodrigo 认为每个与 Delphi 相关的问题都应该有通用的delphi 标签,以便更多人看到。 :) 我之前在问题非常具体时删除了它,他又把它放回去了。我终于不再不同意他了。 ;)
  • @Krom, @KenWhite 解释了为什么我将您的问题标记为delphi。同样firemonkey标签只有49个关注者,delphi-xe2标签有80个,但delphi标签有1839个,所以如果你使用delphi标签你有更多机会从delphi开发人员那里得到答案。
  • @RRUZ:我明白你的意思。但这最终会误导那些不熟悉 FMX 或 XE2 的 Delphi 开发人员,因为这 2 个非常具有开创性。

标签: delphi-xe2 splash-screen firemonkey


【解决方案1】:

这行得通 - 不同之处在于 Application 不是启动窗口的 Owner,并且 Application.Initialize 在创建和显示启动窗口之前被调用,但主窗体不是在启动窗口显示之前创建。

program Project2;

uses
  FMX.Forms,
  System.SysUtils,
  Unit1 in 'Unit1.pas' {MainForm},
  Unit2 in 'Unit2.pas' {SplashForm};

{$R *.res}

begin
  Application.Initialize;
  SplashForm := TSplashForm.Create(nil);
  SplashForm.Show;
  Sleep(1000);   // Whatever to control display time of splash screen

  Application.CreateForm(TMainForm, MainForm);
  SplashForm.Close;
  SplashForm.Free;
  Application.Run;
end.

【讨论】:

  • 以防万一,在SysUtils中实现了跨平台Sleep
  • @Krom:谢谢!我不记得了(也没有花很多时间寻找)。我在测试我发布的答案时使用了 XE2 Update 3,所以我不知道该说什么。
  • 很奇怪。在一个干净的项目上它工作正常。答案已接受,我将在一夜之间进行调试.. 谢谢!
  • SplashForm.Show; 行之后添加Application.ProcessMessages; 解决了这个问题。 @Ken:也许您希望将其包含在您的答案中。
  • 呃。对不起;我不能那样做。 :) 我从来没有,曾经使用或建议使用 PM,现在也不能这样做。必须有一个更好的解决方案 - 我今天晚些时候有机会时会看看,虽然很难看出你可以做些什么不同 - 你确实说过在一个干净的项目中没有它它工作得很好,所以它必须成为您的特定应用正在做的事情,当然我没有要测试的东西。
【解决方案2】:

您还可以添加单独的 TLayout 并根据需要填充它。这样做;

  • 初始布局必须将表单作为其直接所有者。
  • 表格的其余部分应在其后面。并且应该启用表单透明度。
  • 在 FormCreate 事件中,您可以添加代码来对其他表单控件进行必要的隐藏,如果您将它们添加到单独的单个或一组布局并隐藏它们,则可以轻松实现。
  • 您还需要一种触发事件来隐藏启动布局并根据需要显示表单的其余部分。

注意:这种方法虽然不会在初始屏幕上显示标准表单按钮。

我已经做过很多次了,事实证明它比制作一个单独的表单并与主表单一起处理要简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    相关资源
    最近更新 更多