您的位置:首页 > 编程语言 > Delphi

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

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

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

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

Delphi代码


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文件中加入如下代码:

Delphi代码


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.这一步就是主窗体加载数据的时候,边加载边更新闪屏的进度文字了:

Delphi代码


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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: