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