Einzelnen Beitrag anzeigen

Stread

Registriert seit: 25. Jun 2011
23 Beiträge
 
Delphi XE Architect
 
#1

Image aus Image schneiden

  Alt 11. Jul 2011, 13:41
Hi, ich möchte gerne einen Screenshot nur von einem Fenster machen.
Ich drücke auf den Button lasse die Maustaste gedrückt und lasse sie auf einem anderen Fenster los.
Die Anwendung nimmt den Screenshot vom ganzen Bildschirm und stellt danach das Fenster frei.
Meine Methode funktioniert auch ganz gut, in den beiden Images wird das richtige Bild angezeigt, allerdings kann ich es nur 1x ausführen. Beim 2ten mal gibt es Fehler.
Das gleiche Problem gibt es wenn ich es einmal ausgeführt habe und dann die ganze Anwendung schließen will.
Scheint ein größerer Fehler zu sein?
Fehler: http://s7.directupload.net/file/d/2582/cw6v8mp2_jpg.htm

Delphi-Quellcode:
//Fertigt einen Screenshot vom Desktop an
procedure MakeScreenShot(const ATarget: TBitmap);
var
   DesktopDC: HDC;
begin
   DesktopDC := CreateDC('DISPLAY', nil, nil, nil);
   try
     ATarget.PixelFormat := pfDevice;
     ATarget.Width := Screen.Width;
     ATarget.Height := Screen.Height;

     BitBlt(ATarget.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DesktopDC, 0, 0, SRCCOPY);
   finally
     DeleteDC(DesktopDC);
   end;
end;

procedure TForm1.Button9MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var p:TWindowPlacement ;
h :HWND;
SourceBitmap : TBitmap;
TargetBitmap : TBitmap;
Cut : TRect;
begin
  h:=WindowFromPoint(Mouse.CursorPos);
   p.Length:=SizeOf(TWindowPlacement);
   GetWindowPlacement(h,@p);

MakeScreenShot(Image1.Picture.Bitmap);
Image1.Repaint;

 SourceBitmap:= TBitmap.Create;
 TargetBitmap:= TBitmap.Create;
 SourceBitmap:=Image1.Picture.Bitmap;

   Cut.Left := p.rcNormalPosition.Left;
   Cut.Top := p.rcNormalPosition.Top;
   Cut.Right := p.rcNormalPosition.Right;
   Cut.Bottom := p.rcNormalPosition.Bottom;

  try
   TargetBitmap.Width := Cut.Right - Cut.Left;
   TargetBitmap.Height := Cut.Bottom - Cut.Top;

   BitBlt(TargetBitmap.Canvas.Handle, 0, 0, Cut.Right, Cut.Bottom, SourceBitmap.Canvas.Handle, Cut.Left, Cut.Top, SRCCOPY);
   SourceBitmap.Canvas.Refresh;
   Image2.Picture.Bitmap:=TargetBitmap;
   Image2.Repaint;
   JPEG;
    finally
     SourceBitmap.Free;
     TargetBitmap.Free;
  end;

end;
Soll:http://s1.directupload.net/file/d/2582/e2aoyt2m_jpg.htm
Miniaturansicht angehängter Grafiken
fehler.jpeg  

Geändert von Stread (11. Jul 2011 um 16:17 Uhr)
  Mit Zitat antworten Zitat