在Delphi中以编程方式启动启动画面

raj*_*azo 8 delphi

在Delphi中实现启动画面的最佳方法是什么?

Nat*_*Nat 7

创建一个表单,使其为FormStyle= fsStayOnTop,将其边框样式设置为none,并将其标题设置为空白.这将创建一个顶部没有标题栏的表单.删除TImage表单并将位图加载到表单中.

在表单上删除一个TTimer(这将用于确保启动屏幕至少保持一段时间.

这是我在启动表单中的代码:

TSplashForm = class (TForm)
  Image1: TImage;
  CloseTimer: TTimer;
  procedure CloseTimerTimer(Sender: TObject);
  procedure FormCreate(Sender: TObject);
  procedure FormClose(Sender: TObject; var Action: TCloseAction);
  procedure FormDestroy(Sender: TObject);
private
  FStartTicks: integer;
  FOKToClose: boolean;
public
  property OKToClose: boolean read FOKToClose write FOKToClose;
end;

var
  SplashForm: TSplashForm;
Run Code Online (Sandbox Code Playgroud)

在FormCreate中:

procedure TSplashForm.FormCreate(Sender: TObject);
begin
  FStartTicks := GetTickCount;
end;

procedure TSplashForm.CloseTimerTimer(Sender: TObject);
const
  CTimeout = 3000;
begin
  if (GetTickCount - FStartTicks > CTimeout) and OKToClose then
    Close;
end;

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

procedure TSplashForm.FormDestroy(Sender: TObject);
begin
  SplashForm := nil;
end;
Run Code Online (Sandbox Code Playgroud)

在项目文件中,执行以下操作:

begin

  SplashForm := TSplashForm.Create(nil)

  Application.Initialize;
  Application.Title := 'My Program';

  //create your forms, initialise database connections etc here
  Application.CreateForm(TForm1, Form1);

  if Assigned(SplashForm) then
    SplashForm.OkToClose := True;

  Application.Run;

end.
Run Code Online (Sandbox Code Playgroud)

(这些代码的大部分内容都是在我的脑海中编写的,它可能无法直接编译)

  • 小补充:为了不干扰IDE中的调试,最好在窗体的`OnCreate`处理程序中设置`FormStyle:= fsStayOnTop;`,但仅限于未设置`DebugHook`.否则,启动会使一些IDE模糊不清.如果你不幸的是用一台显示器进行调试,那就是. (3认同)
  • 更好的是,跳过"fsStayOnTop".你的启动画面没有任何业务模糊我的其他应用程序,特别是因为只有当你的启动画面在屏幕上这么长时间才会发生,我很无聊看着它并切换到其他更有趣的应用程序. (3认同)