前言:网上有很多介绍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. 使用SourceTree Push 出现 POST git-receive-pack (chunked) 的解决方法

    在使用SourceTree上传资料的时候,遇到 POST git-receive-pack (chunked) 从 stackoverflow 看到这样一则 This is a bug in Git; ...

  2. 2014 HDU多校弟五场J题 【矩阵乘积】

    题意很简单,就是两个大矩阵相乘,然后求乘积. 用 Strassen算法 的话,当N的规模达到100左右就会StackOverFlow了 况且输入的数据范围可达到800,如果变量还不用全局变量的话连内存 ...

  3. (Problem 3)Largest prime factor

    The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 60085 ...

  4. IE6多出一只猪的经典bug

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. AzureDev 社区活动获奖者公布

    今天,我们高兴地宣布 AzureDev社区活动的获奖者,并向这 5 个非盈利技术教育组织发放 10 万美元奖金.在 2013 年的Build大会上宣布的 AzureDev 活动专注于通过代码改变世界, ...

  6. 基于visual Studio2013解决C语言竞赛题之0417四倍数

       题目 解决代码及点评 这道题目还是考察循环,通过循环遍历1234~9876,然后将每个数都用算法判断其是否符合条件#include <stdio.h> #include ...

  7. win7下wordPress本地搭建博客详解(深度亲测整理---傻瓜式详细教程)

    搭建一个wordPress作为一个个人博客本来是特别简单的事情,但是网上的各种转载让初学者举步维艰,我就本身条件而言,会java EE,懂mysql都花费了我好长时间才搭建好本地博客. 注意:这个是本 ...

  8. Codeforces 331A2 - Oh Sweet Beaverette (70 points)

    贪心搞就行,用map记录每个数出现的下标,每次都取首尾两个.将中间权值为负的删掉后取sum值最大的就行. #include<iostream> #include<algorithm& ...

  9. 采用sharedPreference保存数据

    1.sharedPreference保存数据 package com.example.login.service; import java.io.BufferedReader; import java ...

  10. 我的CSS架构

    写在前面 都是自己看别人的架构,自己积累下来的一些东西,这里只是阐述自己的一些观念.借此希望同行交流交流下看法,共勉. 不同架构的CSS 业务流程不同,团队配员不同.会有各种各样的CSS架构. 有的会 ...