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

Reply via email to