1

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で最初のコードを使用して成功しました。ありがとう!

4

0 に答える 0