0

画面のスナップショットを取り、それをビットマップ画像としてフォルダーに保存するプログラムを作成しています。問題が発生しているようですが、画像が上書きされるだけです。

保存すると、数値が前回より1つ大きくなるようにする方法を誰か教えてもらえますか? 例: 保存 1: Screenshot0001.bmp 保存 2: Screenshot0002.bmp 保存 3: Screenshot0003.bmp

等々。

4

3 に答える 3

14

このようなことを達成する方法はたくさんあります。

  1. デジタルカメラと同じようにしてください。カウンターを作成し、ファイルまたはレジストリに保存します。マルチユーザーの問題が発生する可能性があり、イメージが既に存在する状況を処理する必要があります。

  2. 増分番号を使用しないでください。ただし、ファイル名に日時を記述してください。FileName := 'スクリーンショット_'+FormatDateTime('yyyymmdd-hhnnss-zzz.bmp',now());

  3. 以下のコードのようなことを実行して、最新の番号を見つけます。これはあなたが説明していることだと思いますが、このコードは、より多くの画像を書き込むほど遅くなることに注意してください。何千枚もの画像と遅いドライブまたはネットワークでは、プログラムが「ハング」する可能性があります。

..

i := 0;
while FileExists(Format('%sScreenshot%.04d.bmp',[ImgPath,i])) do
  inc(i);
于 2009-03-17T03:19:09.557 に答える
2

プログラムの起動時に、すべての Screenshot*.bmp ファイルを反復処理し、数値部分を解析して最大のものを見つけます。この値をカウンターに割り当てます。スナップショットを作成するときは、「まだ存在しない場合のみ作成する」(CREATE_NEW) セマンティクスを使用して Screenshot.bmp を作成しようとするループに入り、未使用の名前が見つかるまでカウンターを増やします。

または、カウンタの代わりにタイムスタンプを使用してください:)

于 2009-03-17T03:17:45.283 に答える
0

最初のファイルが「マイファイル」、2番目のファイルが「マイファイル(2)」、次に「マイファイル(3)」などのWindowsファイルの複製を模倣するこのようなルーチンが必要です。

function AppendDuplicationNumber( const AStr : string ) : string;
// Used to make strings unique
// This examines the string AStr for trailing '(n)' where
// 'n' is an integer.
// If the (n) part is found, n is incremented, otherwise '(2)' is
// appended to the string.
var
  iLH, iRH, I : integer;
  S           : string;
begin
  Result := AStr;
  iLH    := CharPosBackwards( '(', Result );
  If iLH > 0 then
    begin
    iRH := PosEx( ')', Result, iLH );
    If iRH > 0 then
      begin
      I := StrToIntDef( Copy( Result, iLH+1, iRH-iLH-1 ), 0 );
      If I > 0 then
        begin
        Inc(I);
        S := IntToStr( I );
        Delete( Result, iLH+1, iRH-iLH-1 );
        Insert( S, Result, iLH+1 );
        Exit;
        end;
      end;
    end;

  // Did not increment existing (n), so append it.
  Result := Result + ' (2)';
end;
于 2009-03-17T06:54:38.710 に答える