Einzelnen Beitrag anzeigen

Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#1

Screenshots von 2 übereinanderliegenden Forms

  Alt 6. Jan 2015, 20:18
Hallo,

mittels dem nachfolgenden Code mach ich Screenshots von einer Form (MainForm):

Delphi-Quellcode:
procedure ScreenShot_erstellen(const Pfad: String);

  function DateiName(Pfad, Name, Endung: String): String;
  var
    i: Integer;

  begin
    //Variablen vordefinieren
    Result := '';
    i := 1;

    //Pfad mit einem Backslash enden lassen
    Pfad := IncludeTrailingPathDelimiter(Pfad);

    while true do
      begin
        //Dateinamen zusammenstellen
        Result := Pfad + Format('%s%.3d.%s', [Name, i, Endung]);

        //wenn Datei nicht vorhanden, dann Schleife beenden
        If not FileExists(Result) then
          break;

        inc(i);
      end;
  end;

 var
  Png : TPngImage;
  Bitmap : TBitmap;
  BitmapRect: TRect;
  i_Width : Integer;
  i_Height : Integer;

begin
  //Bitmap erzeugen
  Bitmap := TBitmap.Create;

  //PNG erzeugen
  Png := TPngImage.Create;

  //Höhe und Breite des Client-Bereiches ermitteln
  i_Width := Application.MainForm.ClientWidth;
  i_Height := Application.MainForm.ClientHeight;

  try
    //prüfen ob der ScreenShot-Ordner besteht, wenn nicht, dann erstellen
    //wenn er nicht erstellt werden konnte, dann Log schreiben
    If not DirectoryExists(Pfad) then
      If not CreateDir(Pfad) then
        begin
          InfoLog(Format('ScreenShot: Pfad "%s" nicht vorhanden und konnte nicht erstellt werden!', [Pfad]));

          exit;
        end;

    //Rect des Clientbereiches definieren
    BitmapRect := Rect(0, 0, i_Width, i_Height);

    //Bitmap-Größe angeben
    Bitmap.Width := i_Width;
    Bitmap.Height := i_Height;

    //Bild-Bereich in Bitmap kopieren
    Bitmap.Canvas.CopyRect(BitmapRect, Application.MainForm.Canvas, BitmapRect);

    //Bitmap als PNG speichern
    Png.Assign(Bitmap);
    Png.CompressionLevel := 7;
    Png.SaveToFile(DateiName(Pfad, 'Bild', 'png'));
  finally
    //Bitmap löschen und freigeben
    FreeAndNil(Bitmap);

    //PNG löschen und freigeben
    FreeAndNil(Png);
  end;
end;
funktioniert tadellos

Nur über die MainForm setz ich noch eine 2. Form.

Jetzt hätt ich gerne einen Screenshot von allem - also so wie ich es auf dem Bildschirm sehe
die MainForm im Hintergrund und die andere Form darüber

wie kann ich das am besten realisieren?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat