Hier zwei Tipps wie man man ein ScreenShot eines beliebigen Fensters erstellen kann. Benötigt werden dafür nur das Handle des Fensters. Es muß sich dabei also nicht unbedingt um das eigene Fenster handeln. Man sollte auch bemerken, daß unter Windows vieles eine Fenster ist: ein Formular, ein Button oder z.B. der Desktop.
Nicht unwichtig ist, daß man sich hier selbst darum kümmern sollte vorher das Fenster in den Vordergrund zu bringen. Hier wird nur der Fensterbereich angelichtet, nicht das Fenster selbst. Befindet sich das Fenster im Vordergrund, dann wird das Fenster abgespeichet. Befindet sich etwas davor, dann wird etwas anders abgebildet.
ScreenShot eines Fensters erstellen und speichern:
Hier wird ein ScreenShot erstellt und gespeichert.
Benötigt werden zwei Parameter:
- Pfad zum speichern der Bitmap
- Handle des Fenster
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| function FormularSaveScreenShot(FileName: String; h : hWnd): Boolean; var Rec: TRect; iWidth, iHeight: Integer; begin with TBitmap.Create do try GetWindowRect(h, Rec);
iWidth := Rec.Right - Rec.Left; iHeight := Rec.Bottom - Rec.Top;
Width := iWidth; Height := iHeight;
BitBlt(Canvas.Handle, 0, 0, iWidth, iHeight, GetWindowDC(h), 0, 0, SRCCOPY);
Result := True;
try SaveToFile(Filename) except Result := False end; finally ReleaseDC(h, GetWindowDC(h)); Free; end; end; |
Beispiel:
ScreenShot des eigenen Fensters erstellen:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin FormularSaveScreenShot('c:\formshot.bmp', Handle); end; |
ScreenShot eines Fensters erstellen:
Hier eine Abwandlung der oberen Funktion. Hier wird das Ergebnis nicht gespeichet, sondern in eine Bitmap geladen:
Benötigt werden zwei Parameter:
- Bitmap als Behälter
- Handle des Fenster
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| function FormularScreenShot(Bmp: TBitmap; h : hWnd): Boolean; var Rec: TRect; iWidth, iHeight: Integer; begin with Bmp do try GetWindowRect(h, Rec);
iWidth := Rec.Right - Rec.Left; iHeight := Rec.Bottom - Rec.Top;
Width := iWidth; Height := iHeight;
BitBlt(Canvas.Handle, 0, 0, iWidth, iHeight, GetWindowDC(h), 0, 0, SRCCOPY);
Result := True; finally ReleaseDC(h, GetWindowDC(h)); end; end; |
Beispiel:
ScreenShot eines Buttons erstellen und auf den Formular zeichnen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button1Click(Sender: TObject); var Bmp: TBitmap; begin Bmp := TBitmap.Create; try FormularScreenShot(Bmp, Button1.Handle); Canvas.Draw(20, 20, Bmp); finally Bmp.Free; end; end; |