代码简示:type TTask = class(TObject) .... procedure proc1(); end;procedure TMainForm.ExecuteTasks(pTasks: array of TTask); var i: integer; begin for i:=Low(pTasks) to High(pTasks) do begin pTasks[i].proc1; if not assigned(ProgressForm) then ProgressForm := TProgressForm.create(self); ProgressForm.showmodal; end; end;
....
procedure proc1();
end;procedure TMainForm.ExecuteTasks(pTasks: array of TTask);
var
i: integer;
begin
for i:=Low(pTasks) to High(pTasks) do
begin
pTasks[i].proc1; if not assigned(ProgressForm) then
ProgressForm := TProgressForm.create(self);
ProgressForm.showmodal;
end;
end;
:)
你要写一个线程函数来执行你的循环,一个回调函数来操作你的ProgressBar,把线程函数地址和回调函数地址传递给BeginThread函数。回调函数的地址会作为线程函数的参数传递给线程函数,但是要注意在传递过程中回调函数的地址被转化为一个无类型指针,你必须要在线程函数中把他转化为指向你的回调函数的指针。或者简单点,不需要写回调函数,你把ProgressBar对象的指针传递过去就可以操作了,但是传递中还是被转化为无类型指针。
详细的你可以去看下BeginThread函数的帮助。
var
pgb: TProgressBar;
begin
pgb:= Para;
//现在pgb就是指向一个ProgressBar对象的指针,你只要把你要操作的ProgressBar对象
//的指针作为Para参数传递过来就可以了。
pgb.Position:= 0;end;procedure btnStartClick(Sender: TObject);
var
P1, P2: LongWord;
Para: Pointer;
begin
//在这里将你要操作的ProgressBar对象的指针给Para。
Para:= ............;
BeginThread(nil,0,MyThreadFunc,Para,P1,P2);
//此时新的线程已经开始运行,当中运行的代码就是你的线程函数(MyThreadFunc)中的代
//码。BeginThread新起线程后立即就返回了,所以这里以后的代码仍然继续运行。
end;如果需要的话留个邮箱,我有空写个完整的示例给你!