🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
前言:网上有很多介绍delphi创建闪屏的代码,大多只是在程序开启前显示一个闪屏,但是却没有说如何在闪屏上显示程序加载的进度,于是笔者有意思介绍一下这种闪屏方式。 ### **方法一** ** [Delphi开发 Android 程序启动画面简单完美解决方案]** 现在,经常不断的折腾,终于找到了一个相对简单的解决方案: 1、先创建一个470×320像素的空白图片,保存到工程的某个目录下,如 Images,假设我们命名为 Splash470x320.png(其它分辨率类似,实际在720p(荣耀 4x )/1080p( Mate8 )/2K(小米Note Pro)屏下调用的都是它,别的好象没有用,所以随意放几个空白图片好了)。 2、进入工程的Project->Options->Application,然后设置470×320,设置如下: [![projappopt](http://blog.qdac.cc/wp-content/uploads/2016/01/projappopt.jpg "【转】[Android]Delphi/C++ Builder 开发 Android 程序启动画面简单完美解决方案")](http://blog.qdac.cc/wp-content/uploads/2016/01/projappopt.jpg) * 指定每一个splash image 为正确的尺寸对应的图片,否则不让保存; * 设置 Splash tile mode 一定要是 disabled。 * 设置 Splash gravity 属性为 fill。 完成后,点击 OK 保存。 3、制作一个真实的 Splash 启动画面的图片,如果是分辨率真按1080的话,就是1080×1920,如果是按470画的话,就是470×836。如果图片尺寸差别不大的话,1080×1920 我觉得可能会更好一些吧,我没有测试它的实际呈现效果有多大差异,不过我觉得在手机的小屏上一闪而过的画面应该感觉不到多大的区别。 4、保存这个图片覆盖上第一步保存的splash470x320.png,然后正常的编译和发布程序就OK了。 上面的整个方案中,实际上采用了欺骗的手法,完成了splash的替换,整体效果比较令人满意。在此,再次感谢音儿的辛苦努力。 ### **方法二** 1.创建一个窗体(TfrmSplash),放入一个TImageBox,加载一幅图片,调整好TImageBox与图片的大小,然后在其上放入一个TLabel,name=LblStatus,用于显示加载进度文字。然后将TfrmSplash设置为不自动创建。 2.加入如下代码(代码很简单,就不用解释太多) Delphi代码[![复制代码](http://peirenlei.iteye.com/images/icon_copy.gif)](http://peirenlei.iteye.com/blog/521581# "复制代码") ![收藏代码](http://peirenlei.iteye.com/images/icon_star.png)![](http://peirenlei.iteye.com/images/spinner.gif) 1. unit UntFormSplash;    3. interface    5. uses    6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,    7.   Dialogs, ExtCtrls, StdCtrls;    9. type    10.   TfrmSplash = class(TForm)    11.     Image1: TImage;    12.     LblStatus: TLabel;    13.   private    14.     { Private declarations }    15.     FParam:Pointer;    16.   public    17.     { Public declarations }    18.     class function Execute(AParam:Pointer):Boolean;    19.     procedure SetStatusText(Value: string);    20.   published    21.     property StatusText : string write SetStatusText;    22.   end;    24. var    25.   SplashForm: TfrmSplash;    27. implementation    29. {$R \*.dfm}    31. { TfrmSplash }    33. class function TfrmSplash.Execute(AParam:Pointer): Boolean;    34. begin    35.   with TfrmSplash.Create(nil) do    36.   try    37.     FParam := AParam;    38.     Result := ShowModal = mrOk;    39.   finally    40.     Free;    41.   end;    42. end;    44. procedure TfrmSplash.SetStatusText(Value: string);    45. begin    46.   LblStatus.Caption := Value;    47.   Update;  //这句非常重要,不加的话,界面会阻塞,文字也就不会更新显示    48.   Sleep(1000); //这句根据自己实际情况来调整,主要是怕闪屏太快关闭,达不到效果    49. end;    52. end.   3\. 在项目的.dpr文件中加入如下代码: Delphi代码[![复制代码](http://peirenlei.iteye.com/images/icon_copy.gif)](http://peirenlei.iteye.com/blog/521581# "复制代码") ![收藏代码](http://peirenlei.iteye.com/images/icon_star.png)![](http://peirenlei.iteye.com/images/spinner.gif) 1. begin    3.   Application.Initialize;    5.   SplashForm := TfrmSplash.Create(Application);    6.   SplashForm.Show;    7.   SplashForm.Update;    9.   SplashForm.StatusText := '准备启动...';    10.   SplashForm.Update;    12.   Application.CreateForm(TDM, DM);    13.   Application.CreateForm(TfrmMain, frmMain);    15.   SplashForm.Hide;    16.   SplashForm.Free;    18.   Application.Run;    19. end.   4.这一步就是主窗体加载数据的时候,边加载边更新闪屏的进度文字了: Delphi代码[![复制代码](http://peirenlei.iteye.com/images/icon_copy.gif)](http://peirenlei.iteye.com/blog/521581# "复制代码") ![收藏代码](http://peirenlei.iteye.com/images/icon_star.png)![](http://peirenlei.iteye.com/images/spinner.gif) 1. procedure TfrmMain.FormCreate(Sender: TObject);    2. begin    4.   with SplashForm do    5.   try    6.     StatusText := ('开始初始化内存...');    7.     FCacheHash := TStringHashMap.Create(CaseInsensitiveTraits, 255);    8.     FCurrentClients := TList.Create;    9.     //VST.NodeDataSize := SizeOf(TTagCustomListItem);    10.     //VST.RootNodeCount := 2;    11.     VST.NodeDataSize := SizeOf(TMyTreeNodeDate);    12.     StatusText :=('初始化内存完成');    14.     StatusText :=('开始加载客户端列表...');    15.     BuildGroupTree;    16.     StatusText :=('加载客户端列表完成');    18.     StatusText :=('开始加载分组信息...');    19.     AddELVDefaultGroup;    20.     StatusText :=('开始初始化内存');    22.     StatusText :=('开始初始化数据...');    23.     G\_DefNetImpl := TDefNetImpl.Create();    24.     G\_DefNetImpl.RegisterObserver(Self);    25.     StatusText :=('全部数据加载完毕,程序即将启动...');    27.   finally    29.   end;    32. end;   收功,试着运行一下吧,一个漂亮的splash诞生了.