如何在程序开始之前加入等待画面,而且此画面上要有进度条,要求该画面的结束时间是应用程序真正开始的时间(50分)

  • 主题发起人 主题发起人 树熊134
  • 开始时间 开始时间

树熊134

Unregistered / Unconfirmed
GUEST, unregistred user!
这是一个困饶我好长时间的问题
 
所以困饶我好长时间了,我以前做过静态的,能够实现,但一加滚动条就不行了
 
得用线程了吧。
 
进度条有点难,程序在各种配制的机器上启动时间不一样,没法精确估计
 
我做过,方法是修改并刷新开始时的flash画面,
当时的程序有好几个form,
我就在每个form的create完毕时,露出flash画面上的相应的扇形进度条(用图片做的)
这样,当所有form初始化完毕后,露出的扇形进度条也就拼成了一个大圆

不知是否有其他好方法!
 
大哥,具体点吧,写代码给我好吗?
 
讲错了,是Splash画面,这个你总会做吧!
在项目文件中修改:
FrmSplash:=TFrmSplash.Create(Application);
FrmSplash.Show;//此时进度条只有一点点,(我的进度条是几张图片)

Application.CreateForm(TFrmMain, FrmMain);
//在此form的create末尾,写道:frmsplash.pic1.visible:=true;
FrmSplash.Update;
Application.CreateForm(TFrmChild1, FrmChild1);
//在此form的create末尾,写道:frmsplash.pic2.visible:=true;
FrmSplash.Update;
Application.CreateForm(TFrmChild2, FrmChild2);
//在此form的create末尾,写道:frmsplash.pic3.visible:=true;
//这样,进度条就满了,或者可以在最后一个form的create里写这句,随便你啦
FrmSplash.Update;
Application.CreateForm(TFrmChild3, FrmChild3);

FrmSplash.Hide;
FrmSplash.Free;
Application.Run;
 
不知更好的方法是什么??
 
我想这也只能做到个大概精确的程度,
首先你应该会创建启动封面,然后在你一些处理中,将进度条进行处理即可。
 
还是不行
我在上面放了进度条,但进度条根本就不动。
 
有一个Api可以,具体我得查一查。不过在win 32 下会不太准确。因为win 32不共享进程的
问题。
 
在启动画面上加个定时器不就OK了

看看DELPHI5。0的开发大全上有例子,我的程序就是这样做的
如果按任意键还可以直接进入。

Application.Initialize;
Fmsplay := tFmsplay.Create(application);
Fmsplay.show;
Fmsplay.Update;
While Fmsplay.Timer1.Enabled Do
Application.ProcessMessages;
Fmsplay.Hide;
Fmsplay.Free;
Application.Run;
 
www.vclxx.org/DELPHIGB
上最新控件上有相应控件
 
同意hwchen的,但要将你的主程序设为main form 在project options 中
 
不对的,用定时器的话,你根本不知道你的主程序何时create好要在何时释放你的splash启动画面
我用过windows.gettickcount,但不精确,而且,如果你用show的话,那么在splash上根本不可能
会实现进度条的功能,只有用showmodal,但如用他,则showmodal下面的语句则不能运行。
 
Update呀,可以实现
 
具体讲一讲
 
Do it like this:
MainForm is frmMain;
SplashForm is frmSplash;
Program XXX
begin
Application.Initialize;
frmSplash := TfrmSplash.Create(Application);
frmSplash.Show;
frmSplash.Update;
if frmSplash.ModalResult = 1 then begin
Application.CreateForm(TfrmMain,frmMain);
Application.Run;
frmSplash.Hide;
frmSplash.Free;
end;
end;
end.
procedure TfrmSplash.Timer1OnTimer(...);
begin
...
Self.ModalResult := 1;
end;
How to do other thing? write the code by your self!
 
接受答案了.
 
后退
顶部