Link to home
Start Free TrialLog in
Avatar of bnac
bnac

asked on

refreshing a form while it's busy

I'm trying to make my program window stay painted even if another screen is activated and displayed in front of it.  This program runs a bunch of external programs.  I also have a duration to show how long it's been running.  My problem is that while I'm waiting for the process to complete, I am trying to make the program refresh the screen so that if I move a window over it, I can still go back to the screen and see the program status.  I don't feel all that confident in my understanding of the difference between update, refresh, and repaint, or what it means for an object to be invalid.  I have tried a bunch of combinations, but none of them work.  Here's what I have for the loop that I use to wait for the running process to complete.  Thanks in advance for your assistance.

repeat
  sleep( 2000 );
  lblTime.Caption := FormatDateTime('nn:ss',Time - StartTime);
  FrmMain.Refresh;
  GetExitCodeProcess(ProcessInfo.hProcess,Resultado);
  Result := Resultado;
until (Result <> STILL_ACTIVE) or Application.Terminated;
ASKER CERTIFIED SOLUTION
Avatar of DaFox
DaFox

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
hello bnac, , you might use a different code to wait for your other process to finish

if FileExists(ProcessInfo.lpFile) and ShellExecuteEx(@ProcessInfo) then
  begin
  while WaitForSingleObject(ProcessInfo.hProcess, 100) <> WAIT_OBJECT_0 do
    begin
    lblTime.Caption := FormatDateTime('nn:ss',Time - StartTime);
    //  if you have Application.ProcessMessages you will NOT need the Refresh
    Application.ProcessMessages;
    end;
  end else
  ShowMessage(SysErrorMessage(GetLastError));
Avatar of bnac
bnac

ASKER

Markus,

I added Application.ProcessMessages, and dropped the sleep time to 250, and it's working exactly as I expected.  Taking out the sleep time caused the program to go from 0% CPU utilization to 90%.  Thanks for your amazingly quick response!

Matt
Avatar of bnac

ASKER

Slick, Thanks for your reply.  I'm going to keep the wait loop that I have though, because I've used it in a few apps, and it works well.