关于程序的启动窗口问题(100分)

  • 主题发起人 主题发起人 bluesky1000
  • 开始时间 开始时间
B

bluesky1000

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大大,我是个菜鸟,有一问题请教。
我做了一个程序。程序中有5个FORM和1个ABOUTBOX,程序做完后,想将FORM6做成启动窗口,
效果应该是FORM6出现7秒后,关闭,然后FORM1(主程序)启动。可我做了半天没个结果,代码
如下:
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3},
Unit4 in 'Unit4.pas' {Form4},
Unit5 in 'Unit5.pas' {AboutBox},
Unit6 in 'Unit6.pas' {Form6};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm6, Form6);
form6.Show;
form6.Update;
form6.Close;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4);
Application.CreateForm(TAboutBox, AboutBox);
Application.Run;
end.
{然后在FORM6的onclose事件中加入以下代码:}
procedure TForm1.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
sleep(7000);
end;

可运行的结果是:FORM6如愿的出来了,但后面的FORM1(主程序)却出不来了,请问我的代码有错吗?
大大有何解决办法?
送100分!!!!!!!!
 
begin
Form6 := TForm6.Create(Application);
Form6.Show;
Form.Update;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4);
Application.CreateForm(TAboutBox, AboutBox);
//如果太快,可以用Sleep延时一下
Form6.Free;
Application.Run;
end.
 
那么这个sleep写在什么事件里呢?
 
begin
Form6 := TForm6.Create(Application);
Form6.Show;
Form.Update;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4);
Application.CreateForm(TAboutBox, AboutBox);
sleep(700);//写在这,应该可以
Form6.Free;
Application.Run;
end.
 
不行啊。
运行到Form6 := TForm6.Create(Application);时显示错误信息:
project Project1.exe raised exception class EoleSysError with message '尚未调用CoInitialize' .
process stopped. Use Step or Run to continue.
 
翻一下以前的帖子! 这种问题太多了!
 
这是因为FORM6是自动创建的
 
写在Application.Initialize之后!
 
to lzhuan,
怎样使一个窗体不自建啊?对不起,我是菜鸟,说详细点好吗?不胜感谢!
 
program Project1;
uses
Forms,IdGlobal, //注意这儿
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3},
Unit4 in 'Unit4.pas' {Form4},
Unit5 in 'Unit5.pas' {AboutBox},
Unit6 in 'Unit6.pas' {Form6};
{$R *.res}
begin
Application.Initialize;
Form6:=Tform6.create(application);
//这儿一个
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4);
Application.CreateForm(TAboutBox, AboutBox);
Sleep(7000);
form6.free;
Application.Run;
end.
 
菜单project->属性(最下面的那个)->application
把左面的 list中的form6移动到右面
 
好啦好啦。我用你们的方法做成了。如下:
begin
Application.Initialize;
Form6 := TForm6.Create(Application);
Form6.Show;
Form6.Update;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4);
Application.CreateForm(TAboutBox, AboutBox);
form6.Hide;
Form6.Free;
Application.Run;
end.

加了form6.hide;在FORM6的ONHIDE事件中加入了:
procedure TForm6.FormHide(Sender: TObject);
begin
sleep(7000);
end;
这样就成了。


现在有一个新问题想请教。以前我在FORM6里插的是一张图片,现在,我想将图片换成一个FLASH,
但插入后,在显示FORM6时,FLASH文件是静态的,也就是说,它在FORM6显示时,没有自已
PLAY起来,请问有什么方法能让FORM6里的FLASH文件在FORM6显示时,就PLAY起来?

谢谢大家!
 
我做过的是在Splash窗口中自己写动画语句,用timer控制,挺好的。
其实没必要在开始窗口放Flash文件,如果不自己写动画语句的话,倒可以考虑用
Gif文件,用timer控制显示时间。
 
加入 application.ProcessMessages 试试
 
程序运行前显示LOGO窗体
在DPR工程文件中:修改
begin
logoform := TLogoform.Create(nil);
try
logoform.Show;{ NOTE! show! NOT showmodal }
logoform.Update;
诸如Application.CreateForm()等函数
finally
logoform.Hide;
logoform.Release;
logoform.free;
end;
Application.Run;
end;

可在主窗口的OnCreate事件中控制LOGO窗口的延时时间,以下例程延时3秒。
program TMainForm.FormCreate(sender:Tobject);
var
currentTime:LongInt;
begin
currentTime:=GetTickCount div 1000;
while ((GetTickCount div 1000)<(currentTime+3)
do
{不做任何事);
end;

另一方法
在主窗口的OnShow(较好)或OnActivate事件中调用LOGO窗口的ShowModal方法,在LOGO窗口上放置一Timer,Timer的OnTimer事件中执行自身的关闭(Close),在Timer的Interval中设置延时。
还可使LOGO窗口的OnClick事件也执行自身的关闭。
 
Flash播放的解决办法
在Form6中放一Timer, Timer.Interval:=7000;
Timer.Enabled:=true;
procedure Form6.TimerOnTime(Sender: TObject);
begin
Timer.Enabled:=False;
end;

----------------------------------------
Application.Initialize;
Form6 := TForm6.Create(Application);
Form6.Show;
Form6.Update;
while Form6.Timer.Enable do
Application.ProcessMessages;
.....
Form6.Hide;
Form6.Free;
Application.Run;
保证OK
 
谢谢!:)试验成功!加分!
 
多人接受答案了。
 
后退
顶部