很简单啊,把我以前写的代码贴点出来给你 frmProgress.lblTitle.Caption:='正在进行数据完整性检测,请稍候'; frmProgress.Gauge.Progress:=0; application.ProcessMessages; for i:=0 to templist.Count-1 do begin strsql:='select * from KJJHSB where KJJHSBID='+templist.Strings[i]+''; if checkintodocdata(strsql).IsEmpty then begin frm_main.qry_main.Locate('KJJHSBID',templist.Strings[i],[loCaseInsensitive]); tempstr:=frm_main.qry_main.fieldbyname('XMMC').AsString; tempstrnum:=inttostr(frm_main.qry_main.RecNo); messagebox(GetActiveWindow,pchar('项目"'+tempstr+'"'#13+'位于项目序号第 '+tempstrnum+' 号' +'导出数据检测不完整,请保证信息全部填写并保存'),strwyd,mb_iconinformation+mb_ok); qrytmp.Close; qrytmp.Free; exit; end; qrytmp.Close; qrytmp.SQL.Text:=strsql; qrytmp.Open; comename:=qrytmp.fieldbyname('RWSWJM').AsString; if (comename<>'') and (fileexists(extractFilePath(frm_main.DataSource)+comename)) then addname:=extractFilePath(frm_main.DataSource)+comename else begin messagebox(GetActiveWindow,pchar('项目”'+qrytmp.fieldbyname('xmmc').asstring+ '“没有任务书,无法导出'),strwyd,mb_iconstop+mb_ok); strsql:='update KJJHSB set RWSWJM='''+''+''' where KJJHSBID='+templist.Strings[i]+''; frm_main.adocon.Execute(strsql); frm_main.qry_main.Requery; qrytmp.Close; qrytmp.Free; zip.Free; exit; end; zip.FilesList.Add(addname); frmProgress.Gauge.Progress:=round(i*100/templist.Count); end; frmProgress.Gauge.Progress:=100;应该没有问题吧
procedure TfmProgress.Timer1Timer(Sender: TObject); var fmP_archives:TfmP_archives; //time1,time2:integer; begin progressbar1.Position:=progressbar1.Position+9; if progressbar1.Position=99 then begin //time1:=strtoint(formatdatetime('ss',now)); //showmessage(inttostr(time1)); dm1.ADOQuery4.Close; dm1.ADOQuery4.SQL.Clear; dm1.ADOQuery4.SQL.Add('select depart,cardID,name1,sex,dimissionTime,dimissionReason,born,bloodtype,xl,specialty,folk,'); dm1.ADOQuery4.SQL.Add('nativePlace,IsMember,HK_kind,avoirdupois,health,marriaged,stature,IDcardNum,GY,YY,Engli,othe,telNum'); dm1.ADOQuery4.SQL.Add('Email,homeAddress,duty,technicalPost,hireKind,basicMonthlyPay,introducer,joinJobTime,enterFacTime'); dm1.ADOQuery4.SQL.Add('insurancelD,Tbdate,pactID,pactInureTime,pactStopTime,isDimission,memo1,resume1'); dm1.ADOQuery4.SQL.Add('from P_archives where isDimission=''否'''); dm1.ADOQuery4.Open; //time2:=strtoint(formatdatetime('ss',now)); //showmessage(inttostr(time2)); //time1:=time2-time1; //fmProgress.progressbar1.Max:=time1; end; if progressbar1.Position=progressbar1.Max then begin Timer1.Enabled:=false; fmProgress.Close; form1.skindata1.Active:=true; fmP_archives := TfmP_archives.Create(self); try fmP_archives.ShowModal; finally fmP_archives.Free; form1.bornAwoke(sender); form1.enterFactoryAwoke(Sender); end;
例如要处理一个数据表 table1procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin Table1.open; ProgressBar1.Min := 0; ProgressBar1.Max := table1.RecordCount; I := 1; while not table1.Eof do begin ProgressBar1.Position := i; ProgressBar1.Update; inc(i); table1.Next; end; ProgressBar1.Position := 0; end;
http://www.delphijs.net/Article_Show.asp?ArticleID=1257
这个连接打不开,有谁能否给我些例子?
因此我想做一条进度条,realone类似的,要怎么根据读取数据的时间刚好等于进度条走完的时间一致?help
frmProgress.lblTitle.Caption:='正在进行数据完整性检测,请稍候';
frmProgress.Gauge.Progress:=0;
application.ProcessMessages;
for i:=0 to templist.Count-1 do
begin
strsql:='select * from KJJHSB where KJJHSBID='+templist.Strings[i]+'';
if checkintodocdata(strsql).IsEmpty then
begin
frm_main.qry_main.Locate('KJJHSBID',templist.Strings[i],[loCaseInsensitive]);
tempstr:=frm_main.qry_main.fieldbyname('XMMC').AsString;
tempstrnum:=inttostr(frm_main.qry_main.RecNo);
messagebox(GetActiveWindow,pchar('项目"'+tempstr+'"'#13+'位于项目序号第 '+tempstrnum+' 号'
+'导出数据检测不完整,请保证信息全部填写并保存'),strwyd,mb_iconinformation+mb_ok);
qrytmp.Close;
qrytmp.Free;
exit;
end;
qrytmp.Close;
qrytmp.SQL.Text:=strsql;
qrytmp.Open;
comename:=qrytmp.fieldbyname('RWSWJM').AsString;
if (comename<>'') and (fileexists(extractFilePath(frm_main.DataSource)+comename)) then addname:=extractFilePath(frm_main.DataSource)+comename
else
begin
messagebox(GetActiveWindow,pchar('项目”'+qrytmp.fieldbyname('xmmc').asstring+
'“没有任务书,无法导出'),strwyd,mb_iconstop+mb_ok);
strsql:='update KJJHSB set RWSWJM='''+''+''' where KJJHSBID='+templist.Strings[i]+'';
frm_main.adocon.Execute(strsql);
frm_main.qry_main.Requery;
qrytmp.Close;
qrytmp.Free;
zip.Free;
exit;
end;
zip.FilesList.Add(addname);
frmProgress.Gauge.Progress:=round(i*100/templist.Count);
end;
frmProgress.Gauge.Progress:=100;应该没有问题吧
var
fmP_archives:TfmP_archives;
//time1,time2:integer;
begin
progressbar1.Position:=progressbar1.Position+9; if progressbar1.Position=99 then
begin
//time1:=strtoint(formatdatetime('ss',now));
//showmessage(inttostr(time1));
dm1.ADOQuery4.Close;
dm1.ADOQuery4.SQL.Clear;
dm1.ADOQuery4.SQL.Add('select depart,cardID,name1,sex,dimissionTime,dimissionReason,born,bloodtype,xl,specialty,folk,');
dm1.ADOQuery4.SQL.Add('nativePlace,IsMember,HK_kind,avoirdupois,health,marriaged,stature,IDcardNum,GY,YY,Engli,othe,telNum');
dm1.ADOQuery4.SQL.Add('Email,homeAddress,duty,technicalPost,hireKind,basicMonthlyPay,introducer,joinJobTime,enterFacTime');
dm1.ADOQuery4.SQL.Add('insurancelD,Tbdate,pactID,pactInureTime,pactStopTime,isDimission,memo1,resume1');
dm1.ADOQuery4.SQL.Add('from P_archives where isDimission=''否''');
dm1.ADOQuery4.Open; //time2:=strtoint(formatdatetime('ss',now));
//showmessage(inttostr(time2));
//time1:=time2-time1;
//fmProgress.progressbar1.Max:=time1;
end; if progressbar1.Position=progressbar1.Max then
begin
Timer1.Enabled:=false;
fmProgress.Close;
form1.skindata1.Active:=true;
fmP_archives := TfmP_archives.Create(self);
try
fmP_archives.ShowModal;
finally
fmP_archives.Free;
form1.bornAwoke(sender);
form1.enterFactoryAwoke(Sender);
end;
end;
end;
以下是我以前的例子
try
FMsgFRM:=TFMsgFRM.Create(self);
FMsgFRM.showModal;
application.ProgressMessage;
//这里是我操作的语句;
finally
FMsgFRM.free;
end;
这样是没有显示进度条的。
现在我就是不明白要怎么显示进度条;以及要使数据处理的时间和进度条一致
感谢和等待ing……
table1procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
Table1.open;
ProgressBar1.Min := 0;
ProgressBar1.Max := table1.RecordCount; I := 1;
while not table1.Eof do
begin
ProgressBar1.Position := i;
ProgressBar1.Update;
inc(i); table1.Next;
end; ProgressBar1.Position := 0;
end;
就是在启动软件的时候怎么知道加载所有form的时间呀。。怎么让这个进度条跟加载同步呢。。
就是在启动软件的时候怎么知道加载所有form的时间呀。。怎么让这个进度条跟加载同步呢。。
---------------------------------------------------------------------你用ProgressBar1 有个MAX MIN 来控制进度。在D 的项目文件里,
在Application.run之前结束掉你的ProgressBar1的进度显示,也就是100%OVer掉!就可以了!我领你入门。下面怎么写已经很简单了!!!呵呵 !看不明白给我消息。
view-〉project manager, 右击project1->view source, 即可看到应用初始化创建Form的语句。
进度条窗口如果用showModal显示为模式Form,showModal的下一条语句要等到这个模式化Form关闭后执行,所以你看不到后面的语句对进度条的操作。
如果你用一个模式化Form显示进度条,那么对进度条的操作语句,也应在这个模式化Form之中定义。
至于如何使进度条与操作进度同步,恐怕是个复杂的问题,尤其对数据库的操作,可能数据库操作必须要工作于异步模式,你的程序才能获得控制权,对进度进行更新。
以上不知对否,请各位大侠指正!