delphi之完美Splash方案
来源:互联网 发布:php preg replace all 编辑:程序博客网 时间:2024/04/28 06:32
前言:网上有很多介绍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.
unit UntFormSplash;interfaceuses 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.
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;
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方案
- delphi之完美Splash方案
- Splash窗体的完美实现
- 用Eclipse开发struts之完美方案
- linux加入windows域之完美方案
- bcb学习之splash
- 使用Delphi 7实现Splash窗体
- Alpha Blended Splash Screen in Delphi
- Delphi之MIDAS三层完美解决方案----中间层构建
- Delphi之MIDAS三层完美解决方案----中间层构建
- splash
- splash
- Splash
- 乐学成语之splash
- Android开发之splash界面
- delphi 完美发言Call
- 完美的方案
- 期盼RIA完美方案
- MFC region
- 易变业务使用脚本语言编写
- Linux内核--调试方法(一)
- 如何查看Ubuntu下已安装包版本号
- 为什么用Spring来管理Hibernate
- delphi之完美Splash方案
- HTML5游戏开发开源库件lufylegend1.4.1发布
- Firefox 自动化插件开发(安装包安装错误 原因为: 不是合法的安装包 -207)
- linux 查看系统版本
- 随笔三十三:跳转指令及其编码
- 使用autotools生成包含多文件的makefile
- Jvm 's Heap set
- 修改注册表权限。。
- COM和函数指针