如何截取当前屏幕的图像? up 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 unit ScreenCapture_san;interfaceuses Windows,classes,sysutils,Graphics,jpeg,ExtCtrls;//////////////constDefaultJPEGCompressionQuality=80;//////////////type TScreenCapture_San=class private protected BMP:Tbitmap; CVS:TCanvas; procedure CaptureIt(ARect:TRect); function GetScreenWidth:integer; function GetScreenHeight:integer; function GetScreenRect:TRect; function GetBMPRect:TRect; ////////// // function GetOnlyName:string; public Scale:boolean; /////////////////// procedure Capture(ABmp:TBitMap);overload; procedure Capture(ABmp:TBitMap;ARect:TRect);overload;////////////////////////////////////////// procedure Capture(ACanvas:TCanvas);overload; procedure Capture(ACanvas:TCanvas;ARect:TRect);overload; procedure Capture(Image:TImage);overload; procedure Capture(Image:TImage;ARect:TRect);overload; //////////// procedure CaptureToStream(Stream:TStream);overload; procedure CaptureToScream(Stream:TStream;ARect:TRect);overload; //////////// function CaptureToFile(FileName:string;ARect:TRect):boolean; overload; function CaptureToFile(FileName:string):boolean;overload; //////////// procedure CaptureJPEG(AJPG:TJpegImage;Quality:TJPEGQualityRange=DefaultJPEGCompressionQuality);overload; procedure CaptureJPEG(AJPG:TJpegImage;ARect:TRect;Quality:TJPEGQualityRange=DefaultJPEGCompressionQuality);overload; procedure CaptureJPEG(Image:TImage;Quality:TJPEGQualityRange=DefaultJPEGCompressionQuality);overload; procedure CaptureJPEG(Image:TImage;ARect:TRect;Quality:TJPEGQualityRange=DefaultJPEGCompressionQuality);overload; /////////// procedure CaptureJPEGToStream(Stream:TStream;Quality:TJPEGQualityRange=DefaultJPEGCompressionQuality);overload; procedure CaptureJPEGToStream(Stream:TStream;ARect:TRect;Quality:TJPEGQualityRange=DefaultJPEGCompressionQuality);overload; ////////// function CaptureJPEGToFile(FileName:string;Quality:TJPEGQualityRange=DefaultJPEGCompressionQuality):boolean;overload; function CaptureJPEGToFile(FileName:string;ARect:TRect;Quality:TJPEGQualityRange=DefaultJPEGCompressionQuality):boolean;overload; ////////////////////////// constructor Create; destructor Destroy;override; end;implementation{ TScreenCapture_San }procedure TScreenCapture_San.Capture(ABmp: TBitMap);begin self.Capture(abmp,getscreenrect);end;procedure TScreenCapture_San.Capture(ABmp: TBitMap; ARect: TRect);begin self.CaptureIt(arect); abmp.Height:=bmp.Height; abmp.Width:=bmp.Width; abmp.Canvas.CopyRect(getbmprect,bmp.Canvas,getbmprect);end;procedure TScreenCapture_San.CaptureJPEG(AJPG: TJpegImage; Quality: TJPEGQualityRange);begin self.CaptureJPEG(ajpg,getscreenrect,quality);end;procedure TScreenCapture_San.CaptureJPEG(AJPG: TJpegImage; ARect: TRect; Quality:TJPEGQualityRange);begin self.CaptureIt(arect); ajpg.Assign(self.bmp); ajpg.CompressionQuality:=quality; ajpg.Compress;end;procedure TScreenCapture_San.CaptureIt(ARect:TRect);vardc:hdc;therect:trect;begin dc:=getdc(0); cvs.Handle:=dc; if scale then therect:=getscreenrect else therect:=arect; bmp.width:=arect.Right-arect.Left; bmp.height:=arect.Bottom-arect.Top; bmp.Canvas.CopyRect(rect(0,0,bmp.Width,bmp.Height),cvs,therect); releasedc(0,dc); cvs.Handle:=0;end;procedure TScreenCapture_San.CaptureJPEGToStream(Stream: TStream; Quality: TJPEGQualityRange);begin self.CaptureJPEGToStream(stream,getscreenrect,quality);end;function TScreenCapture_San.CaptureToFile(FileName: string): boolean;begin result:=self.CaptureToFile(filename,getscreenrect);end;function TScreenCapture_San.CaptureToFile(FileName: string; ARect: TRect): boolean;begin result:=false; self.CaptureIt(arect); setfileattributes(pchar(filename),32); try bmp.SaveToFile(filename); except exit; end; result:=true;end;procedure TScreenCapture_San.CaptureToScream(Stream: TStream; ARect: TRect);begin self.CaptureIt(arect); //stream.Size:=0; bmp.SaveToStream(stream);end;procedure TScreenCapture_San.CaptureToStream(Stream: TStream);begin self.CaptureToScream(stream,getscreenrect);end;constructor TScreenCapture_San.Create;begin inherited create; bmp:=tbitmap.Create; cvs:=tcanvas.Create; scale:=false;end;destructor TScreenCapture_San.Destroy;begin bmp.Free; cvs.Free; inherited;end;function TScreenCapture_San.GetScreenHeight: integer;begin Result := GetSystemMetrics(SM_CYSCREEN);end;function TScreenCapture_San.GetScreenWidth: integer;begin result:=GetSystemMetrics(SM_CXSCREEN);end;procedure TScreenCapture_San.CaptureJPEGToStream(Stream: TStream; ARect: TRect; Quality: TJPEGQualityRange);varjpg:tjpegimage;begin jpg:=tjpegimage.Create; self.CaptureJPEG(jpg,arect,quality); jpg.SaveToStream(stream); jpg.Free;end;function TScreenCapture_San.CaptureJPEGToFile(FileName: string; Quality: TJPEGQualityRange):boolean;begin result:=self.CaptureJPEGToFile(filename,getscreenrect,quality);end;function TScreenCapture_San.CaptureJPEGToFile(FileName: string; ARect: TRect; Quality: TJPEGQualityRange):boolean;varjpg:tjpegimage;begin result:=false; jpg:=tjpegimage.Create; self.CaptureJPEG(jpg,arect,quality); try jpg.SaveToFile(filename); except exit; end; jpg.Free; result:=true;end;procedure TScreenCapture_San.Capture(Image: TImage);begin self.Capture(image,getscreenrect);end;procedure TScreenCapture_San.Capture(Image: TImage; ARect: TRect);begin self.CaptureIt(arect); image.Picture.Bitmap.Width:=self.BMP.Width; image.Picture.Bitmap.Height:=self.BMP.Height; image.Picture.Bitmap.Canvas.CopyRect(getbmprect,bmp.Canvas,getbmprect);end;procedure TScreenCapture_San.CaptureJPEG(Image: TImage; Quality: TJPEGQualityRange);begin self.CaptureJPEG(image,getscreenrect,quality);end;procedure TScreenCapture_San.CaptureJPEG(Image: TImage; ARect: TRect; Quality: TJPEGQualityRange);varjpg:tjpegimage;//s:string;mm:tmemorystream;begin jpg:=tjpegimage.Create; mm:=tmemorystream.Create; self.CaptureJPEGtostream(mm,arect,quality); mm.Position:=0; jpg.loadfromstream(mm); mm.Free; // msg2(mm.size); image.Picture.Assign(jpg); jpg.Free;end;function TScreenCapture_San.GetScreenRect: TRect;begin result:=rect(0,0,getscreenwidth,getscreenheight);end;function TScreenCapture_San.GetBMPRect: TRect;begin result:=rect(0,0,bmp.Width,bmp.Height);end;procedure TScreenCapture_San.Capture(ACanvas: TCanvas);begin capture(acanvas,getscreenrect);end;procedure TScreenCapture_San.Capture(ACanvas: TCanvas; ARect: TRect);begin captureit(arect); acanvas.CopyRect(getbmprect,bmp.Canvas,getbmprect);end;end. //使用比较简单,看如下例子://////////////////////////unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,screencapture_san;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDblClick(Sender: TObject); private sc:tscreencapture_san; public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);beginsc:=tscreencapture_san.Create;end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);beginsc.Free;end;procedure TForm1.FormDblClick(Sender: TObject);begin sc.Capture(canvas);end;end. 呵呵,老问题了。找了一篇,楼主去看看吧:http://dhome.myrice.com/Tips/Others/tip26.htm 原来是用代码我误解了用:Alt + Print Screen SysRq<打印键>也可以抓取当前屏幕图像 请问哪里有关于 用 TCPclient/TCPserver 做文件传输的 例子啊 ADO连接ACCESS数据库,INSERT插入数据出错,高手帮我看看那里出错啊!!! 如何判断在Edit中输入的内容都是数字 如何钩(hook)上某个程序,然后吞掉改程序首到的某条消息?! 一个很痛苦的打印问题,帮解决。 可分少,,帮帮忙,,,急呀,,谢放了,,,@@@@50分,,@@@谢谢了 JT(JohnTam),请进来接分 用Delphi如何写ASP组件 怎样使自己编的程序作为某一种文件的默认打开程序(如*.rtf) delphi form edit 光标 你们知道不知道!?? 请问窗体之间怎样传递变量?
uses
Windows,classes,sysutils,Graphics,jpeg,ExtCtrls;
//////////////
const
DefaultJPEGCompressionQuality=80;
//////////////
type
TScreenCapture_San=class
private
protected
BMP:Tbitmap;
CVS:TCanvas;
procedure CaptureIt(ARect:TRect);
function GetScreenWidth:integer;
function GetScreenHeight:integer;
function GetScreenRect:TRect;
function GetBMPRect:TRect;
//////////
// function GetOnlyName:string;
public
Scale:boolean;
/////////////////// procedure Capture(ABmp:TBitMap);overload;
procedure Capture(ABmp:TBitMap;ARect:TRect);overload;
//////////////////////////////////////////
procedure Capture(ACanvas:TCanvas);overload;
procedure Capture(ACanvas:TCanvas;ARect:TRect);overload;
procedure Capture(Image:TImage);overload;
procedure Capture(Image:TImage;ARect:TRect);overload;
////////////
procedure CaptureToStream(Stream:TStream);overload;
procedure CaptureToScream(Stream:TStream;ARect:TRect);overload;
////////////
function CaptureToFile(FileName:string;ARect:TRect):boolean; overload;
function CaptureToFile(FileName:string):boolean;overload;
////////////
procedure CaptureJPEG(AJPG:TJpegImage;Quality:TJPEGQualityRange=DefaultJPEGCompressionQuality);overload;
procedure CaptureJPEG(AJPG:TJpegImage;ARect:TRect;Quality:TJPEGQualityRange=DefaultJPEGCompressionQuality);overload;
procedure CaptureJPEG(Image:TImage;Quality:TJPEGQualityRange=DefaultJPEGCompressionQuality);overload;
procedure CaptureJPEG(Image:TImage;ARect:TRect;Quality:TJPEGQualityRange=DefaultJPEGCompressionQuality);overload; ///////////
procedure CaptureJPEGToStream(Stream:TStream;Quality:TJPEGQualityRange=DefaultJPEGCompressionQuality);overload;
procedure CaptureJPEGToStream(Stream:TStream;ARect:TRect;Quality:TJPEGQualityRange=DefaultJPEGCompressionQuality);overload;
//////////
function CaptureJPEGToFile(FileName:string;Quality:TJPEGQualityRange=DefaultJPEGCompressionQuality):boolean;overload;
function CaptureJPEGToFile(FileName:string;ARect:TRect;Quality:TJPEGQualityRange=DefaultJPEGCompressionQuality):boolean;overload; ////////////////////////// constructor Create;
destructor Destroy;override;
end;
implementation{ TScreenCapture_San }procedure TScreenCapture_San.Capture(ABmp: TBitMap);
begin
self.Capture(abmp,getscreenrect);
end;procedure TScreenCapture_San.Capture(ABmp: TBitMap; ARect: TRect);
begin
self.CaptureIt(arect);
abmp.Height:=bmp.Height;
abmp.Width:=bmp.Width;
abmp.Canvas.CopyRect(getbmprect,bmp.Canvas,getbmprect);
end;procedure TScreenCapture_San.CaptureJPEG(AJPG: TJpegImage; Quality: TJPEGQualityRange);
begin
self.CaptureJPEG(ajpg,getscreenrect,quality);
end;procedure TScreenCapture_San.CaptureJPEG(AJPG: TJpegImage; ARect: TRect;
Quality:TJPEGQualityRange);
begin
self.CaptureIt(arect);
ajpg.Assign(self.bmp);
ajpg.CompressionQuality:=quality;
ajpg.Compress;
end;procedure TScreenCapture_San.CaptureIt(ARect:TRect);
var
dc:hdc;
therect:trect;
begin
dc:=getdc(0);
cvs.Handle:=dc; if scale then
therect:=getscreenrect
else
therect:=arect; bmp.width:=arect.Right-arect.Left;
bmp.height:=arect.Bottom-arect.Top;
bmp.Canvas.CopyRect(rect(0,0,bmp.Width,bmp.Height),cvs,therect); releasedc(0,dc);
cvs.Handle:=0;
end;procedure TScreenCapture_San.CaptureJPEGToStream(Stream: TStream;
Quality: TJPEGQualityRange);
begin
self.CaptureJPEGToStream(stream,getscreenrect,quality);
end;function TScreenCapture_San.CaptureToFile(FileName: string): boolean;
begin
result:=self.CaptureToFile(filename,getscreenrect);end;function TScreenCapture_San.CaptureToFile(FileName: string;
ARect: TRect): boolean;
begin
result:=false;
self.CaptureIt(arect);
setfileattributes(pchar(filename),32);
try
bmp.SaveToFile(filename);
except
exit;
end;
result:=true;
end;procedure TScreenCapture_San.CaptureToScream(Stream: TStream; ARect: TRect);
begin
self.CaptureIt(arect);
//stream.Size:=0;
bmp.SaveToStream(stream);
end;procedure TScreenCapture_San.CaptureToStream(Stream: TStream);
begin
self.CaptureToScream(stream,getscreenrect);
end;
constructor TScreenCapture_San.Create;
begin
inherited create;
bmp:=tbitmap.Create;
cvs:=tcanvas.Create;
scale:=false;
end;destructor TScreenCapture_San.Destroy;
begin
bmp.Free;
cvs.Free;
inherited;
end;function TScreenCapture_San.GetScreenHeight: integer;
begin
Result := GetSystemMetrics(SM_CYSCREEN);
end;function TScreenCapture_San.GetScreenWidth: integer;
begin
result:=GetSystemMetrics(SM_CXSCREEN);
end;procedure TScreenCapture_San.CaptureJPEGToStream(Stream: TStream;
ARect: TRect; Quality: TJPEGQualityRange);
var
jpg:tjpegimage;
begin
jpg:=tjpegimage.Create;
self.CaptureJPEG(jpg,arect,quality);
jpg.SaveToStream(stream);
jpg.Free;
end;function TScreenCapture_San.CaptureJPEGToFile(FileName: string;
Quality: TJPEGQualityRange):boolean;
begin
result:=self.CaptureJPEGToFile(filename,getscreenrect,quality);
end;function TScreenCapture_San.CaptureJPEGToFile(FileName: string;
ARect: TRect; Quality: TJPEGQualityRange):boolean;
var
jpg:tjpegimage;
begin
result:=false;
jpg:=tjpegimage.Create;
self.CaptureJPEG(jpg,arect,quality);
try
jpg.SaveToFile(filename);
except
exit;
end;
jpg.Free;
result:=true;
end;procedure TScreenCapture_San.Capture(Image: TImage);
begin
self.Capture(image,getscreenrect);
end;procedure TScreenCapture_San.Capture(Image: TImage; ARect: TRect);
begin
self.CaptureIt(arect);
image.Picture.Bitmap.Width:=self.BMP.Width;
image.Picture.Bitmap.Height:=self.BMP.Height;
image.Picture.Bitmap.Canvas.CopyRect(getbmprect,bmp.Canvas,getbmprect);
end;procedure TScreenCapture_San.CaptureJPEG(Image: TImage;
Quality: TJPEGQualityRange);
begin
self.CaptureJPEG(image,getscreenrect,quality);
end;procedure TScreenCapture_San.CaptureJPEG(Image: TImage; ARect: TRect;
Quality: TJPEGQualityRange);
var
jpg:tjpegimage;
//s:string;
mm:tmemorystream;
begin jpg:=tjpegimage.Create;
mm:=tmemorystream.Create;
self.CaptureJPEGtostream(mm,arect,quality); mm.Position:=0;
jpg.loadfromstream(mm);
mm.Free; // msg2(mm.size);
image.Picture.Assign(jpg);
jpg.Free;end;function TScreenCapture_San.GetScreenRect: TRect;
begin
result:=rect(0,0,getscreenwidth,getscreenheight);
end;function TScreenCapture_San.GetBMPRect: TRect;
begin
result:=rect(0,0,bmp.Width,bmp.Height);
end;procedure TScreenCapture_San.Capture(ACanvas: TCanvas);
begin
capture(acanvas,getscreenrect);
end;procedure TScreenCapture_San.Capture(ACanvas: TCanvas; ARect: TRect);
begin
captureit(arect);
acanvas.CopyRect(getbmprect,bmp.Canvas,getbmprect);
end;end.
//////////////////////////
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,screencapture_san;type TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDblClick(Sender: TObject);
private
sc:tscreencapture_san;
public
{ Public declarations }
end;var
Form1: TForm1;implementation
{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
sc:=tscreencapture_san.Create;end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
sc.Free;
end;procedure TForm1.FormDblClick(Sender: TObject);
begin
sc.Capture(canvas);
end;end.
http://dhome.myrice.com/Tips/Others/tip26.htm
我误解了用:Alt + Print Screen SysRq<打印键>也可以抓取当前屏幕图像