2017-09-29 5 views
-3

私はbatファイルを実行するのに役立つ以下の手順があります。私が必要とするのは、この手順が完了するまで、ユーザーが何かを作業することができない、ロードアイコンのようなものです。プロセスがDelphiで実行されている間にインターフェイスをブロックします

これに到達する方法はありますか?

procedure RunAnalysis(ACommandLine: string); 
var 
    StartupInfo: TStartupInfo; 
    ProcessInfo: TProcessInformation; 
begin 
    FillChar(StartupInfo, SizeOf(StartupInfo), 0); 
    StartupInfo.cb := SizeOf(TStartupInfo); 

    UniqueString(ACommandLine); 

    if CreateProcess(nil, PChar(ACommandLine), nil, nil, False, 
    0, nil, nil, StartupInfo, ProcessInfo) then 
    begin 
    while WaitForSingleObject(ProcessInfo.hProcess, 10) > 0 do 
     Application.ProcessMessages; 

    CloseHandle(ProcessInfo.hProcess); 
    CloseHandle(ProcessInfo.hThread); 
    end 
    else 
    RaiseLastOSError; 
end; 
+1

は何もしてからユーザーをブロックするために、モーダルフォームを表示します。 –

+0

@DavidHeffernanですが、ユーザーはモーダルフォームを簡単に閉じることができます。 –

+0

進捗状況です。ユーザーはキャンセルすることで閉じることができます。子プロセスを終了します。確かに 'ProcessMessages'を呼び出すことはあまりにもかわいいわけではありません。 –

答えて

0

あなたは、クリックボタンからプロシージャを呼び出すとfinichedまでyourformを無効にすることができます

procedure yourform.Button1Click(Sender: TObject); 
var Bat:string; 
begin 
Bat:={yourCommandLine}; 
yourform.Enabled:=false; 
RunAnalysis(Bat); 
yourform.Enabled:=true; 
end; 
関連する問題