如何实现应用程序的启动窗口(100分)

  • 主题发起人 主题发起人 xingshen1
  • 开始时间 开始时间
X

xingshen1

Unregistered / Unconfirmed
GUEST, unregistred user!
程序编完以后,想做一个应用程序的启动窗口,即让它停留30秒,显示系统的名称及
一些必要的信息。我是在窗体上放一个Image控件,显示一幅作好的图,但是不理想,因为
每次启动应用程序,先是出现一个灰色的空窗体,然后才出现图形,给人一种不一体的感觉
请问如何实现立刻就出现图形的效果?
 
delphi示列程序有,不过一般是在程序初始化显示,不会一定要显示30秒这么黑吧。
一般是在project中这么写:
SplashForm := TSplashForm.Create(Application);
SplashForm.Show;
SplashForm.Update;
Application.Title := '管理系统';
Application.CreateForm(Tmainform, mainform);
SplashForm.Hide;
Application.Run;
 
显示30秒:

sleep(30000);
 
先是出现一个灰色的空窗体,然后才出现图形
将放图的窗口做成透明的就能解决问题了吧。
public
{ Public declarations }
PROCEDURE CMEraseBkgnd(var Message:TWMEraseBkgnd);Message WM_ERASEBKGND;

PROCEDURE Tform1.CMEraseBkgnd(var Message:TWMEraseBkgnd);
BEGIN
brush.style:=bsClear;
Inherited;
END;

 
Delphi在启动时会首先显示一个图片,等到将所有的初始化工作全做完后该图片自动消失。
为达到这一效果,建立一个示例程序。
  建立一个新Application,包括两个Form,其中Form1为主窗口,
Form2为要显示的图片Form,不妨将Form2的边框类型设为无,
同时在Form2中加入一个TImage类的构件Image1,Align属性为Client,AutoSize设为True,
然后为Image1指定任意一个图片。
  选Project1/Options菜单,点取Application页,
将Form2从左边列表框中移到右边列表框,
这样Project1.dpr源程序就不会生成建立Form2的代码。
下一步是手工修改Project1.DPR源代码,因为Form2应该在Form1之前建立并显示,
但不能使用Application的CreateForm方法(第一个用此方法建立的Form被认为是主Form)
,具体的代码如下,当运行至Application.CreateForm(...)一行时Form2已经建立并显示出来,
然后该行建立主Form并激发主Form的OnCreate事件,你可以在OnCreate事件处理过程中完成你的初始化工作。

Project1.dpr program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};

{$R *.RES}

begin
Application.Initialize; {程序初始化}
Form2 := TForm2.Create(Application); {建立徽标Form}
Form2.Show; {显示徽标Form}
Form2.Update; {重画徽标Form,确保其中的图片被显示出来}
Application.CreateForm(TForm1, Form1); {建立主Form}
Form2.Hide; {隐藏徽标Form,使主Form显示出来}
Form2.Free; {释放徽标Form占用的资源}
Application.Run; {程序运行}
end.


  在主Form的OnCreate事件处理过程中我们用一些延时代码来模拟耗时的初始化工作,
这样可以更清楚地看到Form2显示并停留数秒,
直到主Form的OnCreate事件处理过程执行完毕后自动消失。

Unit1.pas unit unit1;

interface

uses
Windows, Messages, SysUtils,
Classes, Graphics, Controls,
Forms, ExtCtrls;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
public
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

{ OnCreate事件处理过程,延时五秒 }
procedure TForm1.FormCreate(Sender: TObject);
var
CurrTime: TSystemTime;
Sec: Word;
begin
GetSystemTime(CurrTime);
Sec := CurrTime.wSecond + 5;
while Sec>CurrTime.wSecond do
GetSystemTime(CurrTime);
end;

end.


  执行这个程序,会看到令人满意的效果:启动画面成功地显示出来,
而且当鼠标移至画面上时会自动变成沙漏形状,五秒钟后画面消失,主窗口出现。
别人的经验,我用过,可以任意规定时间。
 
我觉得aerobull的答案才是xingshen1想要的。
 
用SplashForm 然后
sleep(30000);
显示30秒:

 
记着Form.Update就行了
否则会难看

 
多人接受答案了。
 
后退
顶部