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',Tim e - StartTime);
FrmMain.Refresh;
GetExitCodeProcess(Process Info.hProc ess,Result ado);
Result := Resultado;
until (Result <> STILL_ACTIVE) or Application.Terminated;
repeat
sleep( 2000 );
lblTime.Caption := FormatDateTime('nn:ss',Tim
FrmMain.Refresh;
GetExitCodeProcess(Process
Result := Resultado;
until (Result <> STILL_ACTIVE) or Application.Terminated;
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Markus,
I added Application.ProcessMessage s, 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
I added Application.ProcessMessage
Matt
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.
if FileExists(ProcessInfo.lpF
begin
while WaitForSingleObject(Proces
begin
lblTime.Caption := FormatDateTime('nn:ss',Tim
// if you have Application.ProcessMessage
Application.ProcessMessage
end;
end else
ShowMessage(SysErrorMessag