由于服务器较远的原因,所以读取数据时较慢.我想把在等待的这段时间做成一进度条,且能真实的反映数据的读取进度.Help Me!
解决方案 »
- delphi socket通信 如何发送XML文件,如何给个例子啊?高手
- delphi多继承实现问题
- 如何复制数据库的内容
- 高分请教!用Delphi如何读取外部进程某固定内存地址的值?
- 如何用DELPHI实现网络数据转发
- try ... except ... end为何不执行except部分?
- 各位大哥 ,谁知道<<delphi 5开发人员指南>>的配套光盘在哪下载??
- 向高手寻求仿 ODAC NET 的组件原理的源程序!!
- 用WebSnap开发网络应用,处理数据连接的问题
- 怎样判断在同一个窗口中是否有dbgrid和dbedit等具有db属性的控件?在线等待
- 请教大家问题1
- delphi6.0+sql2000,还原数据库.
begin
Caption := 'Percent complete: ' +
IntToStr(Trunc(Progress / MaxProgress * 100)) + '%';
Application.ProcessMessages;
end;
进度条建立时就必须指定最大长度
再说精确的数据库进度条是很难做到的
就是多线程也无济于事一般可以这样处理
with adotable1 do
begin
progressbar1.max:=100;
i:=recordcount div 100;
j:=i;
while not eof do
begin
dec(j);
if j<=0 then
begin
j:=i;
progressbar1.stepit(1);
end;
next;
end;
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Unit2, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
WorkThread: TWorkThread; //WorkThread defined in Unit2
procedure OnWorkDone(Sender:TObject);
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses Unit3;{$R *.dfm}{ TForm1 }procedure TForm1.Button1Click(Sender: TObject);
begin
WorkThread:=TWorkThread.Create(false);
WorkThread.OnTerminate:=OnWorkDone;
form3:=TForm3.Create(Application);
form3.Show;
end;procedure TForm1.OnWorkDone(Sender: TObject);
begin
form3.Close;
end;end.
Classes;type
TWorkThread = class(TThread)
private
pos: integer;
procedure Update;
protected
procedure Execute; override;
end;implementationuses Unit3;{ TWorkThread }procedure TWorkThread.Execute;
var
i:integer;
begin
For i:=0 to 10000 do
begin
//Do what u want...
pos:=i div 100;
Synchronize(Update);
end;
end;procedure TWorkThread.Update;
begin
Form3.SetProgressBarPosition(pos);
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls;type
TForm3 = class(TForm)
ProgressBar1: TProgressBar;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
procedure SetProgressBarPosition(pos: Integer);
end;var
Form3: TForm3;implementation{$R *.dfm}{ TForm3 }procedure TForm3.SetProgressBarPosition(pos: Integer);
begin
ProgressBar1.Position:=pos;
end;procedure TForm3.FormCreate(Sender: TObject);
begin
SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE or SWP_NOMOVE);
end;end.
procedure TForm1.mycopyfile(sourcef,targetf:string);
var
FromF, ToF: file;
NumRead, NumWritten: Integer;
Buf: array[1..2048] of Char;
n:integer;
begin
AssignFile(FromF, sourcef);
Reset(FromF, 1); { Record size = 1 }
AssignFile(ToF,targetf); { Open output file }
Rewrite(ToF, 1); { Record size = 1 }
n:=0;
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
form1.label1.caption:=IntToStr(sizeof(buf)*n*100 div FileSize(FromF))+'100%';
application.ProcessMessages;
//显示进度
BlockWrite(ToF, Buf, NumRead, NumWritten);
inc(n);
until (NumRead = 0) or (NumWritten <> NumRead);
form1.Label1.Caption:='100%';
CloseFile(FromF);
CloseFile(ToF);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
mycopyfile('e:\components\tv2k-w2k.zip','c:\a.zip');
end;