• delphi之完美Splash方案(在TfrmMain.FormCreate里不断调用TfrmSplash显示加载进度文字,并且及时Update显示)


    前言:网上有很多介绍delphi创建闪屏的代码,大多只是在程序开启前显示一个闪屏,但是却没有说如何在闪屏上显示程序加载的进度,于是笔者有意思介绍一下这种闪屏方式。

    1.创建一个窗体(TfrmSplash),放入一个TImageBox,加载一幅图片,调整好TImageBox与图片的大小,然后在其上放入一个TLabel,name=LblStatus,用于显示加载进度文字。然后将TfrmSplash设置为不自动创建。

    2.加入如下代码(代码很简单,就不用解释太多)

    unit UntFormSplash;  
      
    interface  
      
    uses  
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  
      Dialogs, ExtCtrls, StdCtrls;  
      
    type  
      TfrmSplash = class(TForm)  
        Image1: TImage;  
        LblStatus: TLabel;  
      private  
        { Private declarations }  
        FParam:Pointer;  
      public  
        { Public declarations }  
        class function Execute(AParam:Pointer):Boolean;  
        procedure SetStatusText(Value: string);  
      published  
        property StatusText : string write SetStatusText;  
      end;  
      
    var  
      SplashForm: TfrmSplash;  
      
    implementation  
      
    {$R *.dfm}  
      
    { TfrmSplash }  
      
    class function TfrmSplash.Execute(AParam:Pointer): Boolean;  
    begin  
      with TfrmSplash.Create(nil) do  
      try  
        FParam := AParam;  
        Result := ShowModal = mrOk;  
      finally  
        Free;  
      end;  
    end;  
      
    procedure TfrmSplash.SetStatusText(Value: string);  
    begin  
      LblStatus.Caption := Value;  
      Update;  //这句非常重要,不加的话,界面会阻塞,文字也就不会更新显示  
      Sleep(1000); //这句根据自己实际情况来调整,主要是怕闪屏太快关闭,达不到效果  
    end;  
      
      
    end.  

    3. 在项目的.dpr文件中加入如下代码:

    begin  
      
      Application.Initialize;  
      
      SplashForm := TfrmSplash.Create(Application);  
      SplashForm.Show;  
      SplashForm.Update;  
      
      SplashForm.StatusText := '准备启动...';  
      SplashForm.Update;  
        
      Application.CreateForm(TDM, DM);  
      Application.CreateForm(TfrmMain, frmMain);  
        
      SplashForm.Hide;  
      SplashForm.Free;  
      
      Application.Run;  
    end.  

    4.这一步就是主窗体加载数据的时候,边加载边更新闪屏的进度文字了:

    procedure TfrmMain.FormCreate(Sender: TObject);  
    begin  
      
      with SplashForm do  
      try  
        StatusText := ('开始初始化内存...');  
        FCacheHash := TStringHashMap.Create(CaseInsensitiveTraits, 255);  
        FCurrentClients := TList.Create;  
        //VST.NodeDataSize := SizeOf(TTagCustomListItem);  
        //VST.RootNodeCount := 2;  
        VST.NodeDataSize := SizeOf(TMyTreeNodeDate);  
        StatusText :=('初始化内存完成');  
      
        StatusText :=('开始加载客户端列表...');  
        BuildGroupTree;  
        StatusText :=('加载客户端列表完成');  
      
        StatusText :=('开始加载分组信息...');  
        AddELVDefaultGroup;  
        StatusText :=('开始初始化内存');  
      
        StatusText :=('开始初始化数据...');  
        G_DefNetImpl := TDefNetImpl.Create();  
        G_DefNetImpl.RegisterObserver(Self);  
        StatusText :=('全部数据加载完毕,程序即将启动...');  
      
      finally  
      
      end;  
      
      
    end;  

    收功,试着运行一下吧,一个漂亮的splash诞生了.

  • 相关阅读:
    Qt之自定义托盘(二)
    使用react-navigation提示undefind is not a function
    vue使用mockjs配置步骤(无需启动node服务)
    input框type=file设置cursor:pointer的问题
    umi中使用scss
    umi怎么去添加配置式路由
    Rem自适应js
    解决在antd中使用 autoprefixer 9.4.5 会抛出错误 Replace text-decoration-skip: ink to text-decoration-skip-ink: auto, because spec had been changed 的问题
    file类型input框设置上传相同文件,并都可以触发change事件。
    浅谈JavaScript对象数组根据某属性sort升降序排序
  • 原文地址:https://www.cnblogs.com/jijm123/p/11568448.html
Copyright © 2020-2023  润新知