精心编写的WINDOWS程序显示启动注意事项称之为溅射屏幕(splash screen)利用一点儿小小的内容即可给程序的显示添加不少色彩
由于工程本身创建程序的主窗口且启动溅射屏幕必须在创建主窗口之前出现所以工程文件必须创建自己的启动屏幕这意味着用户必须修改源代码来创建工程文件而这通常在DELPHI编程中是不需要的下面的过程介绍了溅射屏幕的建立过程
开始一个新的工程将窗体命名为MainForm同时将其Caption属性设置为SplashinDemo把这个工程保存在一个目录中如CProjectsSplashin把MainForm的单元命名为Main把工程文件命名为Splashin
在MainForm中插入一个Button组件将Button的Name属性改为ExitButton而将其Caption属性改为Exit为ExitButton的OnClick事件创建一个处理器在过程的begin和end关键词之间插入Close语句
选取File|New Form命令或者单击New Form速度按钮添加一个新的窗体
将这个窗体的Name属性改变为SplashForm删除其Caption属性此外将其BorderStyle属性改变为bsnone同时将BorderIcons下的三个子值设置为False
保存这个工程当Delphi提示读者提供单元文件名时要确信当前目录为正确的目录为SplashForm的单元文件名输入Splash
将SplashForm的Enabled属性设置为False这里不想让用户能够给窗口提供键盘和鼠标命令这是极少见的情况之一在这个例子中我们想让程序对SplashForm的显示拥有完全的控制权
由于窗口没有轮廓所以从Additional组件类中插入一个Bevel组件对象这有助于定义窗口的边缘将Bevel的Align属性设置为alClient同时将对象的Shape属性改变为bsFrame将其Style属性改变为bsRaised这些值由使用者来确定
在SplashForm中插入想使用的组件在这里不要插入任何按钮或者其他相互作用的控件应用程序本身显示和去除启动溅射对话框
选择Project菜单高亮显示Splash工程个弹出式菜单选择Options命令在所产生的Project Options对话框中选取Forms页标签注意MainForm和SplashForm位于自动创建的窗体列表中高亮显示每个窗体并单击鼠标右按钮来将其移动到Available窗体所有的Delphi窗体在运行时都是在内存中自动创建的这要消耗内存和系统资源在这样的一个案例中程序是在运行时创建窗体的读者应该从自动创建的列表中删除窗体关闭ProjectOptions窗口
接下来修改工程的源代码以便在显示主窗口之前显示溅射对话框这里需要在工程文件中插入语句以便与Splashdpr工程文件相匹配工程源代码如下
program Project;
uses
Forms
main in mainpas {MainForm}
splash in splashpas {SplashForm};
{$R *RES}
begin
SplashForm:=TSplashFormCreate(Application);
SplashFormShow;
SplashFormUpdate;
ApplicationCreateForm(TMainFormMainForm);
SplashFormClose;
ApplicationRun;
end
如果这时编译和运行程序它就非常快速地显示和去除启动溅射对话框以至用户可能没机会见到它为了强迫对话框保持几秒钟的可见时间请选取程序的MainForm为窗体的OnCreate命令创建一个处理器在关键词的前面添加一个名为stopTime的长整型变量在begin和end之间插入两个语句一个为对Windows GetTickCount函数的调用来将stopTime设置为Windows已在运行的秒数另一个语句为while语句这个语句另外延迟秒钟程序清单如下
unit main;
interface
uses
Windows Messages SysUtils Classes Graphics Controls Forms Dialogs
StdCtrls;
type
TMainForm = class(TForm)
Exitbutton: TButton;
procedure ExitbuttonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *DFM}
procedure TMainFormExitbuttonClick(Sender: TObject);
begin
close;
end;
procedure TMainFormFormCreate(Sender: TObject);
var
stopTime:LongInt;
begin
stopTime:=GetTickCount div ;