由于程序启动时可能访问很大的文件或者数据库,所以需要一个启动窗口。在网上狂搜,按照网友指点,基本实现了启动窗口。思路就是把主窗口隐藏,
然后显示SplashForm,等完成启动函数后,释放SplashForm。现在的问题是,这个启动窗口在执行我的启动函数的过程中没有办法刷新。当启动窗口显示后,
如果用户切换到别的程序,再切换回来,发现启动窗口变成灰色,无法刷新。
在VC中,可以在线程中创建启动窗口,主进程不会影响到启动画面的显示,在delphi中,我也试图
用线程来解决,在线程中用Synchronize刷新窗口,但是由于启动函数中也在使用VCL,直到启动函数
结束后,Synchronize才能执行。我不希望在我的启动函数中,不时地加入代码来刷新启动窗口,这样有些愚蠢,看看哪位大虾指点指点?否则,我只能放弃delphi了。
然后显示SplashForm,等完成启动函数后,释放SplashForm。现在的问题是,这个启动窗口在执行我的启动函数的过程中没有办法刷新。当启动窗口显示后,
如果用户切换到别的程序,再切换回来,发现启动窗口变成灰色,无法刷新。
在VC中,可以在线程中创建启动窗口,主进程不会影响到启动画面的显示,在delphi中,我也试图
用线程来解决,在线程中用Synchronize刷新窗口,但是由于启动函数中也在使用VCL,直到启动函数
结束后,Synchronize才能执行。我不希望在我的启动函数中,不时地加入代码来刷新启动窗口,这样有些愚蠢,看看哪位大虾指点指点?否则,我只能放弃delphi了。
//////////////////////////
呵呵..你放弃Delphi就放弃啰...还真搞笑..这样的话也说...
不就是这样的一个问题嘛.把你那段源码贴出来.我相信你肯定写错了..
这种问题,难道只有VC能实现?楼主在说笑罢了
var
t:TSplashThread; //处理启动参数
//.......
Application.Initialize;
Application.ShowMainForm := False;
Application.Name := '';
Application.Title := '';
Application.CreateForm(TMainForm, MainForm); SplashForm := TSplashForm.Create(Application);
SplashForm.Show;
SplashForm.Update;
t := TSplashThread.Create(False);//下面创建其他东东
//......
//执行费时的初始化操作
MainForm.Initiallize;
MainForm.Visible := True;
t.Terminate;
SplashForm.Free; Application.Run;//SplashThread中
procedure TSplashThread.Execute;
begin
{ Place thread code here }
FreeOnTerminate := True;
while (True) do
begin
if Terminated then break;
Synchronize(UpdateSplash);
// Sleep(200);
end;
end;procedure TSplashThread.UpdateSplash;
begin
Application.ProcessMessages;
end;
我跟了一下,在执行MainForm.Initiallize的时候,线程处于等待状态
我的想法是,不在MainForm.Initiallize中写刷新SplashForm的代码,
请大家看看有什么好办法?
frm:tform
begin Application.Initialize;
frm:=tform.create(nil)
frm.showmodel
frm.free
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
--在frm的create 执行线程在线程结束时sendmessage通知frm关闭这样不就行了吗?
创建一个splash窗体,再创建一个数据模块,在数据模块中执行查询,并且更新splash窗体,查询完毕再创建main窗体,关闭splash
你要SplashForm执行什么都可以
我也希望是个简单问题,几句话就能解决,但是没有人告诉我怎么解决
回复: chw_csdn_chw(chw)
数据模块中写不了更新splash窗体的代码希望我写的大家能看明白。
类似功能的代码我看过,凑合着就是个简单问题,挑剔些就不是简单问题了。
while getmessage(....) do
try
TranslateMessage(Msg);
DispatchMessage(Msg);
except
end;
Idle_(阿呆) 说对了一句:不会用thread就说嘛
其他诸位都是想当然,没有试过。