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

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

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

  1. unit UntFormSplash;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, ExtCtrls, StdCtrls;
  6. type
  7. TfrmSplash = class(TForm)
  8. Image1: TImage;
  9. LblStatus: TLabel;
  10. private
  11. { Private declarations }
  12. FParam:Pointer;
  13. public
  14. { Public declarations }
  15. class function Execute(AParam:Pointer):Boolean;
  16. procedure SetStatusText(Value: string);
  17. published
  18. property StatusText : string write SetStatusText;
  19. end;
  20. var
  21. SplashForm: TfrmSplash;
  22. implementation
  23. {$R *.dfm}
  24. { TfrmSplash }
  25. class function TfrmSplash.Execute(AParam:Pointer): Boolean;
  26. begin
  27. with TfrmSplash.Create(nil) do
  28. try
  29. FParam := AParam;
  30. Result := ShowModal = mrOk;
  31. finally
  32. Free;
  33. end;
  34. end;
  35. procedure TfrmSplash.SetStatusText(Value: string);
  36. begin
  37. LblStatus.Caption := Value;
  38. Update;  //这句非常重要,不加的话,界面会阻塞,文字也就不会更新显示
  39. Sleep(1000); //这句根据自己实际情况来调整,主要是怕闪屏太快关闭,达不到效果
  40. end;
  41. end.

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

  1. begin
  2. Application.Initialize;
  3. SplashForm := TfrmSplash.Create(Application);
  4. SplashForm.Show;
  5. SplashForm.Update;
  6. SplashForm.StatusText := '准备启动...';
  7. SplashForm.Update;
  8. Application.CreateForm(TDM, DM);
  9. Application.CreateForm(TfrmMain, frmMain);
  10. SplashForm.Hide;
  11. SplashForm.Free;
  12. Application.Run;
  13. end.

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

  1. procedure TfrmMain.FormCreate(Sender: TObject);
  2. begin
  3. with SplashForm do
  4. try
  5. StatusText := ('开始初始化内存...');
  6. FCacheHash := TStringHashMap.Create(CaseInsensitiveTraits, 255);
  7. FCurrentClients := TList.Create;
  8. //VST.NodeDataSize := SizeOf(TTagCustomListItem);
  9. //VST.RootNodeCount := 2;
  10. VST.NodeDataSize := SizeOf(TMyTreeNodeDate);
  11. StatusText :=('初始化内存完成');
  12. StatusText :=('开始加载客户端列表...');
  13. BuildGroupTree;
  14. StatusText :=('加载客户端列表完成');
  15. StatusText :=('开始加载分组信息...');
  16. AddELVDefaultGroup;
  17. StatusText :=('开始初始化内存');
  18. StatusText :=('开始初始化数据...');
  19. G_DefNetImpl := TDefNetImpl.Create();
  20. G_DefNetImpl.RegisterObserver(Self);
  21. StatusText :=('全部数据加载完毕,程序即将启动...');
  22. finally
  23. end;
  24. end;

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

http://peirenlei.iteye.com/blog/521581

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

  1. 【转】Android循环滚动广告条的完美实现,封装方便,平滑过渡,从网络加载图片,点击广告进入对应网址

    Android循环滚动广告条的完美实现,封装方便,平滑过渡,从网络加载图片,点击广告进入对应网址 关注finddreams,一起分享,一起进步: http://blog.csdn.net/finddr ...

  2. Unity3D手游开发日记(3) - 场景加载进度条的完美方案

    我以为做个进度条很简单,分分钟解决,结果折腾了一天才搞定,Unity有很多坑,要做完美需要逐一解决. 问题1:最简单的方法不能实现100%的进度 用最简单的方法来实现,不能实现100%的进度,原因是U ...

  3. 完美滑动顶部固定ScrollView,合并可以上拉,下拉加载更多

    先看效果: 主要处理: 使用PullToRefreshScrollView修改内部的scrollView源码,更换成可以固定顶部的自定义scrollView @Override protected S ...

  4. asp.net数据加载进度和模态窗口的完美打开,而且窗口不被阻止

    采用jquery的技术打开模态窗口,效果肯定不错,但是微软的asp.net ajax就无法用了,例如updatepanel面板和updateprogress就看不到效果,也就是jquery与asp.n ...

  5. Quick-Cocos2d-x v3.3 异步加载Spine方案 转

    Quick-Cocos2d-x v3.3 异步加载Spine方案 浩月难求也与2015-03-25 15:06:3441 次阅读 背景 项目中使用了Quick-Cocos2d-x 3.3,由于Spin ...

  6. listview下拉刷新和上拉加载更多的多种实现方案

    listview经常结合下来刷新和上拉加载更多使用,本文总结了三种常用到的方案分别作出说明. 方案一:添加头布局和脚布局        android系统为listview提供了addfootview ...

  7. Android RecyclerView使用 及 滑动时加载图片优化方案

    1.控制线程数量 + 数据分页加载2.重写onScrollStateChanged方法 这个我们后面再谈,下面先来看看RecyclerView控件的使用及我们为什么选择使用它 RecyclerView ...

  8. emlog通过pjax实现无刷新加载网页--完美解决cnzz统计和javascript失效问题

    想要更详细了解pjax,需要查看官网 或者看本站文章:jQuery.pjax.js:使用AJAX和pushState无刷新加载网页(官网教程中文翻译) 效果看本站,音乐无刷新播放,代码高亮和复制js加 ...

  9. vue加载优化方案

    我们的项目随着组件的加入,首次加载的js文件越来越大,用户等待时间越来越长:之前想着使用webpack的splitCoding来解决,看了webpack的官方文档可以配置optimization的 m ...

随机推荐

  1. sqlite可视化工具以及django-South

    在linux系统下想要可视化sqlite的办法 一:安装sqlitebrowser: sudo apt-get install sqlitebrowser 二:在终端提示符后输入sqlitebrows ...

  2. DE1-SOC的sof文件无法下载解决办法

    按照前面友晶科技的文档介绍一步步的做,后面发现根本无法下载sof文件. 通常思维: 一,器件选错了.器件选择错误会导致sof文件无法下载,至于这个ID具体怎么识别我没有追究.如果是这种错误Quartu ...

  3. Bugzilla使用手册及解决方案

    Bugzilla使用手册 Bugzilla 是一个开源的缺陷跟踪系统(Bug-Tracking System),它可以管理软件开发中缺陷的提交(new),修复(resolve),关闭(close)等整 ...

  4. 疯牛-- Aggressive cows (二分)

    疯牛 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小 ...

  5. BZOJ 4145: [AMPPZ2014]The Prices( 状压dp + 01背包 )

    我自己只能想出O( n*3^m )的做法....肯定会T O( nm*2^m )做法: dp( x, s ) 表示考虑了前 x 个商店, 已买的东西的集合为s. 考虑转移 : 先假设我们到第x个商店去 ...

  6. Android--pendingIntent & Intent

    PendingIntent pendingIntent字面意义:等待的,未决定的Intent.要得到一个pendingIntent对象,使用方法类的静态方法 getActivity(Context, ...

  7. java--join方法

    package MyTest; class TestDemo implements Runnable { public void run() { int i = 0; for (int j = 0; ...

  8. 新浪微博中tableview中头部信息

    摘自http://www.cnblogs.com/gcb999/p/3151665.html #import <UIKit/UIKit.h> @class User; @protocol ...

  9. jQuery 简单滑动轮播图效果

    一般页面简单轮播图效果用jQuery制作更加简单.我们来看看以下效果是如何来进行制作的. 其html结构下所示: <div id="box">         < ...

  10. 一个故事讲清楚NIO(转)

    转载请引用:一个故事讲清楚NIO 假设某银行只有10个职员.该银行的业务流程分为以下4个步骤: 1) 顾客填申请表(5分钟): 2) 职员审核(1分钟): 3) 职员叫保安去金库取钱(3分钟): 4) ...