Capture de l'image d'une form et de tous ses contrôles

Contenu du snippet

Function PrintWindow(ahwnd:HWND; hdcBlt:HDC;  nFlags:UINT): Bool; Stdcall; External 'User32.dll'  name 'PrintWindow'; 
Implementation 
Uses testwnd; { juste pour tester le code } 
{$R *.dfm} 
  // Prend un  instantané du hwnd de la fenêtre, 
  //  stocké dans le contexte de périphérique hdcMem de la mémoire  
  // cette méthode fonctionne même si la fenêtre  n'est pas 
  // en avant plan ou se trouve  en dehors de la zone écran 
Function  GetFullWindowImage(aHandle : THandle):TBitmap; 
Var DC, hdcMem : HDC; 
    aRect : TRect;  
    hBMP : HBitmap; 
    aWidth, aHeight : Integer; 
Begin 
  Result := Nil; 
  dc := GetWindowDC(0); 
  If (dc >  0) Then 
  Try  
    hdcMem := CreateCompatibleDC(dc); 
    If (hdcMem > 0) Then 
    Try 
      GetWindowRect(aHandle,  aRect); 
      aWidth := aRect.Right-aRect.Left; 
      aHeight :=  aRect.Bottom-aRect.Top; 
      hBMP := CreateCompatibleBitmap(dc, aWidth,  aHeight); 
      If (hBMP > 0) Then 
      Try  
        SelectObject(hdcMem, hBMP);  
        PrintWindow(aHandle, hdcMem, 0);  
        Result := TBitmap.Create; 
        Result.Width := aWidth;  
        Result.Height := aHeight; 
        BitBlt(Result.Canvas.Handle,  0, 0, aWidth, aHeight,  hdcMem, 0, 0, srcCopy);  
      Finally  
        DeleteObject(hBMP); 
      End; 
    Finally  
      DeleteObject(hdcMem); 
    End; 
  Finally  
    ReleaseDC(0, dc); 
  End; 
End;  
{ exemple d'utilisation} 
Procedure TForm1.Button3Click(Sender: TObject);  
Var FormImage : TBitmap; 
Begin 
  FormImage :=  GetFullWindowImage(testfrm.Handle); 
  Try  
    Image1.Picture.Bitmap.Assign(FormImage); 
  Finally 
    FormImage.Free; 
  End; 
End; 



Compatibilité : Delphi 5

Disponible dans d'autres langages :

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.