Hello,
The main problem is you used OnActivate event to do
the hard work. The "ModalResult := mrOk" has no effect
there. Maybe the best solution is using tread. Like
this:
type
TFilesRemover = class(TThread)
private
procedure DoBeforeRemoval;
procedure DoDisplayFileName;
procedure DoProgress;
procedure DoAfterRemoval;
protected
procedure Execute; override;
end;
procedure TFilesRemover.Execute;
begin
FindFilesToDelete;
Synchronize(DoBeforeRemoval);
for i := 0 to FileList.Count-1 do
begin
Synchronize(DoDisplayFileName);
if DeleteFile(FileList[i])then
Synchronize(DoProgress);
end;
Synchronize(DoAfterRemoval);
end;
procedure TFilesRemover.DoBeforeRemoval;
begin
ProgressBar1.Max := FileList.Count;
ProgressBar1.Min := 0;
ProgressBar1.Position := ProgressBar1.Max;
end;
procedure TFilesRemover.DoDisplayFileName;
begin
Label1.Caption := '"'+
ExtractRelativePath(IDEPath,FileList[i]) + '"';
end;
procedure TFilesRemover.DoProgress;
begin
ProgressBar1.Position := ProgressBar1.Position - 1;
end;
procedure TFilesRemover.DoAfterRemoval;
begin
Label1.Caption := 'Done';
fmProgress.ModalResult := mrOK;
end;
and you call the thread in OnShow event of fmProgress
like this:
procedure TfmProgress.OnShow(Sender: TObject);
begin
// create suspended
with TFilesRemover.Create(True) do
begin
// fire and forget
FreeOnTerminate := Free;
Resume;
end;
end;
Cheers!
Luthfi B Hakim
> My FormActivate code is shown below. Although I set
the modal result
> to
> mrOK the form fails to close.
On Mon, 03 Sep 2007 20:18:09 +0100, Luthfi B Hakim
<[EMAIL PROTECTED]> wrote:
> Can someone explain what I am doing wrong?
>
> I have a form which is there simply to report
progress - it has a
> progressbar on it.
> This is how I am calling it:
>
> procedure TfmCleanUpMain.btnOKClick(Sender:
TObject);
> begin
> if fmprogress.showmodal <> mrNone then
> close;
> end;
>
> On its return I close the application.
>
> I do all the work on the progress form in the
OnActivate event. - this
> may
> be my problem but I don't know a way around it as
there is no user
> interaction with the form.
>
> My FormActivate code is shown below. Although I set
the modal result
> to
> mrOK the form fails to close.
>
> procedure TfmProgress.FormActivate(Sender: TObject);
> Var i: Integer;
> begin
> FindFilesToDelete;
> ProgressBar1.Max := FileList.Count;
> ProgressBar1.Min := 0;
> ProgressBar1.Position := ProgressBar1.Max;
> For i := 0 to FileList.Count -1 do
> begin
> Label1.Caption := '"'+
ExtractRelativePath(IDEPath,FileList[i]) +
> '"';
> if DeleteFile(FileList[i])then
> ProgressBar1.Position := ProgressBar1.Position
- 1;
> end;
> Label1.Caption := 'Done';
> fmProgress.ModalResult := mrOK;
> end;
>
> Can anyone suggest a solution?
>
> JohnB
Vorelsoft, Top Quality Software
PhiDesktop, Multi Virtual Desktop, add unlimited monitor to your PC
____________________________________________________________________________________
Be a better Heartthrob. Get better relationship answers from someone who knows.
Yahoo! Answers - Check it out.
http://answers.yahoo.com/dir/?link=list&sid=396545433
_______________________________________________
Delphi mailing list -> [email protected]
http://www.elists.org/mailman/listinfo/delphi