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
                        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
                        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
                        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
                        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;
 |