前言:网上有很多介绍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诞生了.
- 1.制作Android Splash启动界面
- 2.delphi之完美Splash方案
- 3. Android实例-解决虚拟键盘遮挡问题
- 0.Android开发小技巧
- 设 置 您 的 开 发 环 境 Windows PC(Android)
- Delphi XE控件
- 手机屏幕自适应程序问题
- 手势操作
- delphi xeandroid对硬件操作
- Datasnap
- Delphi XE 10 跨平台三层数据库应用教程
- 开发数据库三层应用的DataSnap
- ListView
- delphi xe10之控件 listview 的强大功能
- FMX.TListView的基本用法
- 初探ListView 的使用方法
- Delphi 常用控件之TlistView总结
- ListView基本用法大全
- android实现透明度可以调整的对话框
- android 获取网络状态
- FMXUI
- FMXUI - ListView用法简介