安裝程序的進度條怎樣做?(50分)

  • 主题发起人 主题发起人 DINGHELLO
  • 开始时间 开始时间
D

DINGHELLO

Unregistered / Unconfirmed
GUEST, unregistred user!
現在做好一個程序,要制作安裝程序(Setup.exe),我想知識那個進度條是怎樣實現的。就是說怎么知道我現在拷了多少文件,還剩多少文件?在什么地方寫控制進度條的代碼?
 
打包程序不是自带了进度条吗
 
copy命令是看不出来的了,但是你可以模拟一个时间进度。
 
我想自己做個安裝文件,而且要有進度條顯示的那種。
 
一个ProgressBar1和一个Timer1控件,主要是Position属性,还有把Timer1的Intervar属性改为10,让“它”快点!要不然会很慢的(哈哈)!!
Timer1的OnTimer事件
ProgressBar1.Position :=ProgressBar1.Position+1;
IF ProgressBar1.Position = ProgressBar1.Max then
begin
Timer1.Enabled :=False;
ProgressBar1.Position :=0;
end;
 
jmlwz :那樣其實還是沒有反映實際的進度呀
 
to DINGHELLO,
要知道实际进度的话就不能用COPY,得自己用流来实现文件的拷贝,比如设定每拷贝1024字节就更新一下进度条。
 
mfksoft:在一個目錄下那么多文件,是不是要用流來一個一個拷?
還想請教下:做數據庫程序,存諸過程在后台執行,我想前台也用進度條來顯示執行進度,不知要怎樣來實現?最好能詳細點。
 
問題答案已經發到你郵箱,給分吧!!!!!
 
下面這個程序是用來拷整個目錄的,其中加入了進度條的顯示,ok嗎?
var
p:integer;

function TForm1.CopyDir(const vSrcPath, vDestPath: AnsiString;
vOverwrite: Boolean=true): Boolean;
var
r: TSearchRec;
s, d: AnsiString;
ns, nd: AnsiString;
begin
try
try
result := false;
s := IncludeTrailingPathDelimiter(vSrcPath);
d := IncludeTrailingPathDelimiter(vDestPath);
if not ForceDirectories(d) then
Exit;

if FindFirst(s + '*.*', faAnyFile, r) = 0 then
begin
repeat if (r.Name <> '.') and (r.Name <> '..') then
begin
ProgressBar1.Position := p;
inc(p,r.Size);
ns := s + r.Name;

nd := d + r.Name;

if (r.Attr and faDirectory) = faDirectory then
begin

if not ForceDirectories(nd) then
Exit;

CopyDir(ns, nd);

end
else
begin
if FileExists(nd) and (not vOverwrite) then
Continue;

CopyFile(PChar(ns), PChar(nd), false) ;
end;
end;
until FindNext(r) <> 0;
result := true;
end;
except on e: Exceptiondo
result := false;
end;
finally
FindClose(r);
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
count:=getdirsize('D:/music');
ProgressBar1.Max :=count;
p:=0;
CopyDir('D:/music','e:/music');
ShowMessage('ok');
end;

公開答案
 
后退
顶部