如何在FireMonkey中创建启动画面?

3

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

以下来自VCL的代码不再起作用:

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

问题在于,在FMX表单中,直到执行Application.Run时才会创建/重绘表单,因为它们使用一些FMX魔法来重绘。使用VCL启动画面不是一个选项,因为我需要支持OSX。
如何在Delphi XE2 FireMonkey项目中创建启动画面?

@RRUZ:我不明白为什么这个问题会被打上通用的“Delphi”标签,因为它是关于XE2和FireMonkey特定的。 - Kromster
Rodrigo认为每个与Delphi相关的问题都应该有通用的“delphi”标签,以便更多的人看到它。 :) 当问题非常具体时,我曾经将其删除,但他又把它放回去了。最终,我不再反对他了。 ;) - Ken White
3
@Krom,@KenWhite解释了我为什么将你的问题标记为“delphi”。此外,“firemonkey”标记只有49个关注者,“delphi-xe2”标记有80个关注者,但“delphi”标记有1839个关注者,因此如果您使用“delphi”标记,您将更有机会从Delphi开发人员那里获得答案。 - RRUZ
@RRUZ:我理解你的观点。但最终这会误导那些不熟悉FMX或XE2的Delphi开发人员,因为这两个东西非常具有开创性。 - Kromster
2个回答

4

这个方案有效 - 不同之处在于 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.

1
以防万一,跨平台的“Sleep”已在SysUtils中实现。 - Kromster
@Krom:谢谢!我记不起来了(也没花太多时间去找)。我在测试我发布的答案时使用的是XE2 Update 3,所以我不确定该说什么。 - Ken White
奇怪。在一个干净的项目中它运行良好。答案被接受了,我将在晚上进行调试..谢谢! - Kromster
SplashForm.Show; 行后添加 Application.ProcessMessages; 解决了这个问题。@Ken:也许你想把它包含在你的答案中。 - Kromster
抱歉,我不能做那个。:) 我从来没有使用过或建议使用 PM,现在也无法这样做。肯定有更好的解决方案 - 我会在今天稍后有机会时查看,尽管很难看出你可能能够做出什么不同的事情 - 你确实说在一个干净的项目中没有使用它工作得很好,所以肯定是你特定的应用程序在做某些事情,当然我没有它来进行测试。 - Ken White
@KenWhite 如果要让SplashForm的内容可见,请在SplashForm.Show之后添加SplashForm.PaintTo(SplashForm.Canvas);,而不是A.PM。 - Tom Brunberg

0

您还可以添加一个单独的TLayout并按您的要求填充它。要这样做:

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接