一个事件中处理的数据较多,处理完毕要40秒,这40秒内程序就好像死了一样,我想在这40秒内做一个进度条,但是事件比较复杂不知怎么才能让进度条随着事件的处理而走动 请大虾指点。
解决方案 »
- cannot perform this operation on a closed dataset
- Delphi中如何调用OCX控件?
- 用FastReport如何实现让用户自己建立、保存打印模板?并且可让用户设置默认的打印模板?
- 三层DCOM结构,SQL Server2000数据库,为何新增记录可以保存,而修改记录则保存不了?
- 三层的问题,我把midas.dll加了,还是会说登录midas.dll出错。
- 请问如果有多个控件 Align 相同,怎样在程序中设定其次序啊?
- 关于动态数组的释放
- 关键字重复的错误
- qing wen shi fou delphi >= c++ ?
- 大家快看,中美网络大战有动静了。
- 为何没人回答
- 运行时遇到的小问题,请进来看看
While 没有结束 do
Begin
application.ProcessMessages;
…..
…..
ProgressBar1.position:= ProgressBar1.position +1;
End;
ProgressBar1.position:=0;
表示在某个地方循环时,其他组件可以接受消息
把超时时间舍得短一点,这样把你要做的事情(就是进度条的走动)放在
ontime事件里面由简单又实用
/////////////以下是实现这两个处理的单线程程序,请大虾帮我改成多线程的 谢谢!
s:=filelistbox1.FileName;
f_progress:=tf_progress.Create(application); //f_progress为存放进度条的FORM
f_progress.Label1.Caption:='数据库正在恢复中......';
f_progress.ShowModal;
datamodule1.ADOConnection1.Connected := False;
ADOCommand1.CommandText := 'use master';
ADOCommand1.Execute;
ADOCommand1.CommandText := 'ALTER DATABASE design SET OFFLINE WITH ROLLBACK IMMEDIATE';
ADOCommand1.Execute;
ADOCommand1.CommandText := 'RESTORE DATABASE design FROM DISK = ' + #39 + s + #39;
ADOCommand1.Execute;
ADOCommand1.CommandText := 'ALTER DATABASE design SET ONLINE WITH ROLLBACK IMMEDIATE';
ADOCommand1.Execute;
ADOCommand1.CommandText := 'use design';
ADOCommand1.Execute;//////////在f_progress中放了一个timer进行进度条progressbar的计时,timer的Ontimer事件如下:
if progressbar1.Position<=progressbar1.Max-1 then
progressbar1.StepIt
else
begin
timer1.Enabled:=false;
if backup_restore=0 then
begin
if (application.MessageBox(' 数据库已备份成功! ','提示信息',mb_ok+mb_iconinformation))=idok then
f_progress.Close;
end
else
begin
if (application.MessageBox(' 数据库已成功恢复! ','提示信息',mb_ok+mb_iconinformation))=idok then
f_progress.Close;
end;
exit;
end;