Lazarus(freepascal)プロジェクトで、これらのオプションを使用してTAsyncProcessを追加しました[poUsePipes,poStderrToOutPut]
。出力をキャッチして最後の行を表示します。
イベントを使用して、ReadData
テキストを取得した場合に最後の行を表示するコードを追加しました。
procedure TForm1.AsyncProcess1ReadData(Sender: TObject);
var
aOutput: TStringList;
iCpt: integer;
sLine: string;
begin
aOutput := TStringList.Create();
aOutput.LoadFromStream(AsyncProcess1.Output);
if (aOutput.Count > 0) then
begin
setStatus(aOutput.Strings[aOutput.Count-1]);
end;
end;
次に、最後の空でない行を取得しようとしました。
procedure TForm1.AsyncProcess1ReadData(Sender: TObject);
var
aOutput: TStringList;
iCpt: integer;
sLine: string;
begin
aOutput := TStringList.Create();
aOutput.LoadFromStream(AsyncProcess1.Output);
if (aOutput.Count > 0) then
begin
// Get the last non-empty line
for iCpt := (aOutput.Count-1) to 0 do
begin
sLine := aOutput.Strings[iCpt];
if Length(Trim(sLine)) > 0 then
begin
setStatus(sLine);
Break;
end;
end;
end;
end;
どちらも何も表示しません。私はffmpegで最初のコードを使用して成功しました。ありがとう!