Frage

Ich mache ein Programm, das eine Momentaufnahme des Bildschirms einnimmt, und speichert sie in einem Ordner als Bitmap Bild. Ich scheine allerdings in ein Problem ausgeführt werden, wird das Bild nur überschreibt selbst.

Kann mir jemand sagen, wie ich es so machen kann, wenn er spart, wird die Nummer als die letzten höher sein? Zum Beispiel: Speicher 1: Screenshot0001.bmp Save 2: Screenshot0002.bmp Sie sparen 3: Screenshot0003.bmp

Und so weiter.

War es hilfreich?

Lösung

Es gibt viele Möglichkeiten, etwas zu erreichen.

  1. Machen Sie es wie Ihre Digitalkamera tut; Haben Sie einen Zähler und speichern Sie sie in einer Datei oder in der Registrierung. Sie werden wahrscheinlich für mehrere Benutzer auf Probleme stoßen, und Sie werden immer noch Situationen umgehen müssen, wo ein Bild bereits vorhanden ist.

  2. Sie keine fortlaufende Nummer, verwenden aber einen Datetime im Dateinamen schreiben. Filename: = 'Screenshot _' + Format ( 'yyyymmdd-hhnnss-zzz.bmp', jetzt ());

  3. Sie so etwas wie Sie den Code unten die aktuelle Zahl zu finden. Ich denke, das tut, was Sie beschreiben, erinnern aber, dass dieser Code erhalten wird langsamer, wie Sie mehr Bilder schreiben. Mit Tausenden von Bildern und einem langsamen Laufwerk oder Netzwerk könnte es ‚hängen‘ Ihr Programm.

..

i := 0;
while FileExists(Format('%sScreenshot%.04d.bmp',[ImgPath,i])) do
  inc(i);

Andere Tipps

Bei Programmstart durchlaufen alle Dateien .bmp Screenshot *, analysieren den numerischen Teil und den höchsten finden - diesen Wert auf Ihrem Zähler zuweisen. Wenn eine Momentaufnahme zu tun, eine Schleife gehen in die screenshot.bmp versucht crreating mit „nur erstellen, wenn nicht bereits vorhanden ist“ (CREATE_NEW) Semantik, der Zähler erhöht wird, bis Sie einen nicht verwendeten Namen.

Alternativ Verwendung Zeitstempel statt Zähler:)

Sie müssen eine Routine wie diese, die Windows-Datei-Duplizierung nachahmt, wo die erste Datei 'Meine Datei', die zweite 'My File (2)', dann 'My File (3)' etc.

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top