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诞生了.
http://peirenlei.iteye.com/blog/521581
delphi之完美Splash方案(在TfrmMain.FormCreate里不断调用TfrmSplash显示加载进度文字,并且及时Update显示)的更多相关文章
- 【转】Android循环滚动广告条的完美实现,封装方便,平滑过渡,从网络加载图片,点击广告进入对应网址
Android循环滚动广告条的完美实现,封装方便,平滑过渡,从网络加载图片,点击广告进入对应网址 关注finddreams,一起分享,一起进步: http://blog.csdn.net/finddr ...
- Unity3D手游开发日记(3) - 场景加载进度条的完美方案
我以为做个进度条很简单,分分钟解决,结果折腾了一天才搞定,Unity有很多坑,要做完美需要逐一解决. 问题1:最简单的方法不能实现100%的进度 用最简单的方法来实现,不能实现100%的进度,原因是U ...
- 完美滑动顶部固定ScrollView,合并可以上拉,下拉加载更多
先看效果: 主要处理: 使用PullToRefreshScrollView修改内部的scrollView源码,更换成可以固定顶部的自定义scrollView @Override protected S ...
- asp.net数据加载进度和模态窗口的完美打开,而且窗口不被阻止
采用jquery的技术打开模态窗口,效果肯定不错,但是微软的asp.net ajax就无法用了,例如updatepanel面板和updateprogress就看不到效果,也就是jquery与asp.n ...
- Quick-Cocos2d-x v3.3 异步加载Spine方案 转
Quick-Cocos2d-x v3.3 异步加载Spine方案 浩月难求也与2015-03-25 15:06:3441 次阅读 背景 项目中使用了Quick-Cocos2d-x 3.3,由于Spin ...
- listview下拉刷新和上拉加载更多的多种实现方案
listview经常结合下来刷新和上拉加载更多使用,本文总结了三种常用到的方案分别作出说明. 方案一:添加头布局和脚布局 android系统为listview提供了addfootview ...
- Android RecyclerView使用 及 滑动时加载图片优化方案
1.控制线程数量 + 数据分页加载2.重写onScrollStateChanged方法 这个我们后面再谈,下面先来看看RecyclerView控件的使用及我们为什么选择使用它 RecyclerView ...
- emlog通过pjax实现无刷新加载网页--完美解决cnzz统计和javascript失效问题
想要更详细了解pjax,需要查看官网 或者看本站文章:jQuery.pjax.js:使用AJAX和pushState无刷新加载网页(官网教程中文翻译) 效果看本站,音乐无刷新播放,代码高亮和复制js加 ...
- vue加载优化方案
我们的项目随着组件的加入,首次加载的js文件越来越大,用户等待时间越来越长:之前想着使用webpack的splitCoding来解决,看了webpack的官方文档可以配置optimization的 m ...
随机推荐
- QGraphicsView中选中QGraphicsPathItem使之不出现虚线框
绘制一条贝赛尔曲线,当选中该曲线时,显示其控制点并把控制点和起始点连结起来,从而可以清晰的显示曲线的参数. # -*- coding: utf-8 -*-from PyQt4 import QtGui ...
- 简单cpu处理器
在135例中有一个简单处理器的程序,稍作修改成自己的风格 //date :2013/8/22 //designer :pengxiaoen //function get a mpc with veri ...
- c# 数据库编程(利用DataSet 和 DataAdaper对象操作数据库--单表操作)
一.概述 前面2篇文章,介绍了使用SqlCommand对象利用sql命令来操作数据库. 这篇文章我们来介绍使用c#的DataSet 和 DataAdaper对象操作操作数据库. 先来介绍下这两个对象是 ...
- 转:Linus:利用二级指针删除单向链表
感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多,并加入了插图) Linus大婶在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是 ...
- 基于visual Studio2013解决算法导论之047赫夫曼编码
题目 赫夫曼编码 解决代码及点评 // 赫夫曼编码.cpp : 定义控制台应用程序的入口点. // #include <iostream> #include <stdio.h ...
- 基于visual Studio2013解决算法导论之017查找第n小元素
题目 查找第n小元素 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> ...
- linux stat系统调用,获取文件信息。
stat 函数原型: int stat(const char *path, struct stat *buf); struct stat 说明 struct stat { mode_t st_mode ...
- Hadoop HDFS (3) JAVA訪问HDFS之二 文件分布式读写策略
先把上节未完毕的部分补全,再剖析一下HDFS读写文件的内部原理 列举文件 FileSystem(org.apache.hadoop.fs.FileSystem)的listStatus()方法能够列出一 ...
- 【Unity 3D】学习笔记四十:射线
射线 射线,类比的理解就是游戏中的子弹.是在3D世界里中一个点向一个方向发射的一条无终点的线.在发射的过程中,一旦与其它对象发生碰撞,就停止发射. 射线的原理 创建一个射线时,首先须要知道射线的起点和 ...
- HDOJ 3790 双权值Dijkstra
#include <iostream> #include <stdio.h> #include <string.h> #include <cstring> ...