procedure TForm1.Button5Click(Sender: TObject);
var
MyBitmap: TBitmap;
MyBitmap2: TBitmap;
MyDC: HDC;
png: TPortableNetworkGraphic;
R: TRect;
begin
//Ermittelt den BoundsRect Bereich von Form1.
//Das geht einfacher - aber das warum einfach, wenn es auch kompliziert geht
//R := Form1.BoundsRect;
R.TopLeft := Form1.BoundsRect.TopLeft;
R.BottomRight := Form1.BoundsRect.BottomRight;
//Ermittelt Handle für einen Gerätekontext, hier Wohl von Self.Handle
MyDC := GetDC(Self.Handle);
//Zwei Bitmaps-Objekte erstellen
MyBitmap := TBitmap.Create;
MyBitmap2 := TBitmap.Create;
//Breite und Höhe für Bitmap2 zuweisen
MyBitmap2.Width := R.Right - R.Left;
MyBitmap2.Height := R.Bottom - R.Top;
//Ein Png-Objekt erstellen
png := TPortableNetworkGraphic.Create;
try
//Kenne ich nicht, läd vermutlich das Bild aus dem Gerätekontext
MyBitmap.LoadFromDevice(MyDC);
//Speichert das Bild irgendwo unter "FormsAppearance.bmp"
//Richtige Pfadangeben sind besser. Ansonsten wird in dem aktuellen Ordner gespeichert.
MyBitmap.SaveToFile('
FormsAppearance.bmp');
//Kopiert Bild von MyBitmap nach MyBitmap2 mit Rect-Bereichen (Quelle, Ziel) von ClientRect
//ClientRect ist wohl der Rect-Bereich von dem aktuellen Formular
//
//MyBitmap2.Canvas.CopyRect(ClientRect,MyBitmap.Canvas,ClientRect);
//eine Variante
########################################MyBitmap2.Canvas.copyRect(Rect(0, 0, MyBitmap2.Width, MyBitmap2.Height),MyBitmap.Canvas, R);
//MyBitmap2 speichern irgendwo
MyBitmap2.SaveToFile('
FormsAppearance2.bmp');
//An Png übergeben über Assign
png.Assign(MyBitmap2);
//Png speichern irgendwo
png.SaveToFile('
shottest.png');
finally
//Freigaben
ReleaseDC(Self.Handle, MyDC);
FreeAndNil(MyBitmap);
FreeAndNil(MyBitmap2);
png.Free;
end;
end;