• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 135
  • Last Modified:

EASY QUESTION FOR POINTS



Raymond/ rwilson,

On the code example you gave to me before, how can I have a window pop-up and stay on top until the other application is finished?  Then clear out and then display a message of completion?  I have tried modifing your previous example that work just fine for that purpose, but when I changed it to not use a timer I keep getting "Access Errors".  Remember that this is being used in a "DLL".  

Thanks
Tony
0
aj85
Asked:
aj85
  • 3
  • 3
1 Solution
 
rwilson032697Commented:
To do this I would make a little form showing a message (or whatever) with its form style set to fsStayOnTop.

Create and show the form before starting the process, and after the process has completed close and release it.

Perhaps you could post the code you have now with an indication where the error occurs?

Cheers,

Raymond.
0
 
aj85Author Commented:

Raymond,

Here is the code:

Function RunMyProcess : integer;            //TJ
 var           si  : TStartupInfo;
               pi  : TProcessInformation;
               dw1 : dword;
               MergeCmd: ANSIString;
               enabled: boolean;
        begin
        enabled:=false;
        MergeCmd:= 'C:\MSSQL7\MERGE\Merge.Exe';
        ZeroMemory(@si,sizeOf(si)); si.cb:=sizeOf(si);
        si.dwFlags:=STARTF_USESHOWWINDOW; si.wShowWindow:=SW_HIDE;
     if CreateProcess(nil,PChar(MergeCmd),nil,nil,false,0,nil,nil,si,pi)
          then begin
                   with TRunThread.Create(true) do        
                   try
                 processHandle:=pi.hProcess;          
                 processReady:=false;                
                 waitingThread:=GetCurrentThreadID;
            // Error happens here....  When I try to call the form  
                 Resume;                              
           repeat
                 Application.HandleMessage;  
           until Application.Terminated or processReady;  
                                                         
     finally Free end;
          GetExitCodeProcess(pi.hProcess,dw1);
          CloseHandle(pi.hThread);
          CloseHandle(pi.hProcess);  
          begin
          if (dw1) = 0 then
          ShowTimedMessage('Merge Successful!', 5)
          else
          if (dw1) = 1 then
          ShowTimedMessage('Merge Unsuccessful! Please retry....', 5);
      //   ShowTimedMessage('Test (exitCode='+IntToStr(dw1)+')', 5);
            end;
        end;
     end;


Thanks,
Tony



0
 
rwilson032697Commented:
Tony,

Can you post the code that you use at thsi comment:

// Error happens here....  When I try to call the form  

At least I'll be able to see what is going wrong...

Cheers,

Raymond.
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
aj85Author Commented:


Raymond,
 
I simply call a from called frmUtil.
 
Code: frmUtil.show

I then close it later after the application has terminated.

code: frmUtil.close

I know this is where the error is, I am just not sure why?

Thanks
0
 
rwilson032697Commented:
It sounds like frmUtil has not been created. Check it is autocreated in the project options or you are creating it before showing it with the frmUtil.show .

Cheers,

Raymond.
0
 
aj85Author Commented:


Thanks Raymond.
0

Featured Post

Prep for the ITIL® Foundation Certification Exam

December’s Course of the Month is now available! Enroll to learn ITIL® Foundation best practices for delivering IT services effectively and efficiently.

  • 3
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now