关于制作Delphi应用程序的启动画面方面的技巧问题?!(100分)

  • 主题发起人 主题发起人 gwt
  • 开始时间 开始时间
G

gwt

Unregistered / Unconfirmed
GUEST, unregistred user!
本人在开发应用软件完后,给其制作了一个启动画面,启动画面运行后,此后是各个Form的生成,我只想让其出现主Form,其余数个界面不让出现(不是MDI方式),于是在Application.create(form...)后,让其close;于是子Form不停
生成,让后close,但屏幕闪烁的特别厉害,如何消除之,或有更好的启动方式,
告本人以下!!!(本问题100分)
 
加上延迟函数或空循环一定时间来消除“余辉”现象。
 
老兄好多种方法,
先送你一种,接着:
program Project1;
uses Forms, Unit1 in 'UNIT1.PAS' {Form1}, Splash;
{$R *.RES}
var
SplashScreen : TSplashScreen;
{in the Splash unit}
begin
try
SplashScreen := TSplashScreen.Create(Application);
SplashScreen.Show;
SplashScreen.update;
{To paint the splash screen}
Application.CreateForm(TForm1, Form1);
{
do
other CreatForms or any other processing
before the app is to be opened
}
SplashScreen.Close;
finally {Make sure the splash screen gets released}
SplashScreen.Free;
end;

Application.Run;
end.

{This code came from Lloyd's help file!}
照做就行!
 
在主Form中写清除SPLASH FORM的隐藏代码,写在ON ACTIVE里
 
这里的关键是Splash Form在Application.CreateForm之前用普通的方法生成,如D4
所示,这样Splash Form就不是MainForm了。后面的Form用APPLICATION.CREATEFORM
来生成,也不需要什么CLOSE了。D4的方法可行,如果SPLASH FORM显示时间太短,可以
加上一个时间控制。
参见已答问题,多种答案已经在那了!
 
你也可不让程序在DPR单元自动生成,而改在主表单的Create事件中生成各Form,
只需简单地在DPR文件中将相应的生成语句删除即可。
当然,在各Form生成之前,正如前面几个大侠所说的先生成FlashForm,你不该
仅仅用Close关闭各表单了事,这当然在表单多的时候会发生闪烁了。
 
我看你的问题好象不在splashwindows上。如果你不想让子窗口出现,只需将所有
form的visible属性设为false即可。这样即使createform后,各form也不出现,
用到哪个就show哪个吧!
 
1、你不必让所有的窗体自动创建,应该在需要的时候有程序创建。在project/options中设置自动创建的窗体,最好只有主窗体一个。
2、应用程序中创建窗体的方法:
form1:=tform1.create(application);
form1.show;
3、让启动封面首先运行:修改project.dpr
在Application.Initialize;后紧接如下语句
frmsplash := tfrmsplash.create(application);
frmsplash.Show;
frmsplash.Update;
4、让splash显示一定时间后消失,我是这样做的:
在frmmain中加入timer1,设置interval为3000
在Tfrmmain.FormCreate中写入timer1.Enabled := true;
在Timer1Timer中写入
frmsplash.hide;
frmsplash.FreeOnRelease;
效果很好。
 
D4的方法是很多资料上介绍的方法,是可行的.在建立所有窗体后关闭Splash窗
口,然后显示MainForm和其它窗口,没有闪烁感.特别是将SplashScreen的显示
放在dpr中,如果运行条件不成立,直接关闭应用程序时主窗体不会闪出来,这点
比在主窗体的OnCreate事件中处理要优越.不过我建议你将SPlashScreen做成
DLL,一方面Splash中一般有一个较大的位图,放在DLL中较好,如果要换这个位
图不需要重编译,而且应用程序的EXE文件会小一些.
这个DLL只需输出两个例程:StartSplash和FinishSplash,分别显示SplashScreen
和关闭它.不过千万不要静态加载而要动态加载,即执行完FinishSplash后要释
放这个DLL.我有一个程序就是这么用的,非常好,如果你要可以Mail一份.:-)
 
dreamsoft 的回答很好,
但可以不用TIMER函数,
直接用sleep( 毫秒)就可以了。
另外,如果你装了RXLib,直接用就行了!
可到http://delphi.yesite.com 去DOWNLOAD
 
我想问问各位有没有谁往启动画面里加入动画,如Gif89a或AVI什么的。
开始我以为很简单,可是总是不成,甚至是在Mainform Create时Create
一个线程专门去显示都不成。
上面各位的方法我都试过了。
如果有高人能解决此问题我出50分。
 
使用RXLIB中的GIF控件,把animate=true;
program Project1;
uses
Forms,windows,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.RES}
begin
Form2 := TForm2.Create(Application);
Form2.show;
Form2.Update;
sleep(2000);
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Form2.Hide;
Form2.Destroy;
Application.Run;
end.
gif放在FORM2中,
在我的机真的可以的。AVI就更没问题了。
 
to gwt:
把form设为fsStayOnTop看行不行.
lizhao:
不许反悔,你用FixImage控件不就行了吗,有40多种显示效果.
要的话我发给你.
 
大家真是热情,本人十分感动,本想给每位高分,只可惜分数有限,人数众多,望分数少的或没得到分数的鉴谅!
 
to chenlili:
看了你贴的程序,我不知道同我的有什么不同,除了少Sleep这一句。
我是在mainform create时做的延时,应该没什么问题。
现贴如下:
program DtsTest;
uses
Forms,windows,
main in 'main.pas' {FormMain},
。。。
{$R *.RES}
begin
PassWDForm:=TPassWDForm.Create(Application);

PassWDForm.ShowModal;

if PassWDForm.ModalResult=1 then

begin

Application.Initialize;
SplashForm:=TSplashForm.Create(Application);
SplashForm.Show;

SplashForm.Update;

SplashForm.Refresh;
sleep(10000);
Application.Title := 'Douding 2000 Drawing Application';
Application.CreateForm(TFormMain, FormMain);
。。。
Splashform.Hide;
Splashform.Destroy;
Application.Run;
end;

end.

后来我又加上一句延时,我把时间设定都快10秒,那动画就动一下,同原来一样。
顺便说一句我也是用的RX_Lib的控件。
我想出现这样的情况可能与程序的机制有关,但是想不太明白。
此外我也试过了用Mediaplayer来播放动画,我把Splashform的程序片段贴出来你看看,displayer设成panel2。
type
TSplashForm = class(TForm)
Panel1: TPanel;
Image1: TImage;
Button1: TButton;
RxGIFAnimator2: TRxGIFAnimator;
MediaPlayer1: TMediaPlayer;
Panel2: TPanel;
procedure TSplashForm.FormActivate(Sender: TObject);
begin
MediaPlayer1.Play;
end;

procedure TSplashForm.FormHide(Sender: TObject);
begin
MediaPlayer1.Close;
Mediaplayer1.Destroy;
end;

悄悄问一句:你的机器多快?不会是PIII的吧。
to 唐晓锋:
我说话算话,谢谢你的控件,不过我更想把问题搞明白,而不只是用人家的
控件。
 
后退
顶部