2、看关键代码 // // 设置是否被覆盖... procedure TMainForm.SetControls(Covered: boolean); begin // // 若被覆盖,背景控件半透明、不允许获得焦点... if Covered then begin panel1.Opacity:=0.60; panel1.Enabled:=false; TabControl1.Opacity:=0.60; TabControl1.Enabled:=false; end // // 还原成正常状态... else begin panel1.Opacity:=1; panel1.Enabled:=true; TabControl1.Opacity:=1; TabControl1.Enabled:=true; end; end;
// // 显示或隐藏Indicator... Procedure TMainForm.SetIndicator(Shown: boolean); procedure SafeDelay(Ms: integer); var t0: TDateTime; begin t0:=now; application.processmessages; while round((now-t0)*24*60*60*1000)<ms do application.processmessages; end; Begin // // 显示Indicator... if Shown then begin IndicatorBack.Position.X:=(self.Width-IndicatorBack.Width)/2; IndicatorBack.Position.Y:=(self.Height-IndicatorBack.Height)/2; IndicatorBack.visible:=true; Animator.Enabled := True; Animator.Visible := True; application.ProcessMessages; safedelay(100); end // // 隐藏... else begin application.ProcessMessages; safedelay(100); Animator.Enabled := False; Animator.Visible := False; IndicatorBack.visible:=false; end; application.ProcessMessages; end; // // 显示忙... procedure TMainForm.ShowBusy; begin SetControls(true); SetIndicator(true); end;
// // 隐藏忙... procedure TMainForm.CloseBusy; begin SetControls(false); SetIndicator(false); end;
3、耗时任务示例代码: // // 读远程服务器,显示数据列表... procedure TMainForm.ShowList1; var AllRecords,i: integer; yyyymm: string; ok: boolean; begin // // 显示忙... ShowBusy; // // 读页面数据... if cds1.Active then cds1.Close; if combobox1.Selected.Text='当前' then ok:=FetchDataPage(mba,'SELECT * FROM CENTERQUOTA ORDER BY FUNCID,BUDID,ECONID',CurrentPage1,RowsPerPage,AllRecords,Cds1) else begin yyyymm:=formatdatetime('yyyy',now)+combobox1.Selected.Text; ok:=FetchDataPage(mba,'SELECT * FROM CENTERQUOTATOTAL WHERE YYYYMM='''+yyyymm+''' ORDER BY FUNCID,BUDID,ECONID',CurrentPage1,RowsPerPage,AllRecords,Cds1); end; if not ok then begin CloseBusy; showmessage('读取数据库页面出现错误:'+mba.LastError); exit; end; // // 显示页数... allpages1:=round(AllRecords div RowsPerPage); if AllPages1*RowsPerPage<AllRecords then inc(AllPages1); AllEdit1.Text:=inttostr(AllPages1); CurrentEdit1.Text:=inttostr(CurrentPage1); // // 显示页面... Cds1.First; Grid1.RowCount:=Cds1.RecordCount; for i:= 0 to Cds1.RecordCount-1 do begin Grid1.Cells[0,i]:=trim(Cds1.fieldbyname('FuncName').asstring); Grid1.Cells[1,i]:=trim(Cds1.fieldbyname('BudName').asstring); Grid1.Cells[2,i]:=formatfloat('###,##0.00',cds1.fieldbyname('YearFirst').asfloat); Grid1.Cells[3,i]:=formatfloat('###,##0.00',cds1.fieldbyname('YearRest').asfloat); Cds1.Next; end; // // 不忙... CloseBusy; end;