在几秒钟内显示飞溅图像是空白的

时间:2011-02-01 07:35:10

标签: performance delphi splash-screen

在我的应用程序中,我在连接数据库和其他初始化期间有一个启动图像。它可以很好地显示启动图像,但它是一段时间的空白。 所以,

  1. 加载启动图像并显示几分之一秒。
  2. 飞溅图像空白2-3秒。
  3. 飞溅图像会再次显示几秒钟。
  4. Splash已关闭。
  5. 是否有一个聪明的事情是尽可能快地显示图像并删除空白图像?

    DPR文件中的代码:

    Application.Initialize;
    
    SplashForm := TSplashForm.Create(Application);
    SplashForm.Show;
    // Tried Splash.Update here but no difference.
    
    SplashForm.SetPos(15);
    // Init code
    SplashForm.SetPos(30);
    
    // More Init code
    SplashForm.SetPos(100);
    
    SplashForm.Close;
    
    Application.Run;
    

    飞溅单位:

    procedure TSplashForm.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;
    end;
    
    procedure TSplashForm.FormCreate(Sender: TObject);
    begin
      pbLoading.Properties.Text := 'Loading ' + TClientConfig.Instance.AppTitle + '...';
    end;
    
    procedure TSplashForm.SetPos(aPos: Integer);
    begin
      pbLoading.Position := aPos;
      UpDate;
    end;
    

    此致 罗兰

3 个答案:

答案 0 :(得分:9)

你的SplashForm需要接收WM_PAINT消息才能显示自己,除非消息泵工作,否则不会发生这种情况。

Application.ProcessMessages放在SplashForm.Show之后。

答案 1 :(得分:0)

也许这不是显而易见的,但是您的代码似乎会显示启动画面,然后立即将其关闭。如果您注释掉SplashForm.Close

的行,会发生什么?

答案 2 :(得分:0)

我想我现在明白了。我的应用程序使用Bold,加载模型需要几秒钟。在那段时间里,飞溅是空白的。我设法减少了一点时间,但我不想使用Application.ProcessMessages混淆Bolds SetFromModel的内部。

我认为这样可以。但感谢您的评论。它指出了我正确的方向。

/罗兰