看不懂以下代码,谁帮我注释一下!(100分)

  • 主题发起人 主题发起人 wyic
  • 开始时间 开始时间
W

wyic

Unregistered / Unconfirmed
GUEST, unregistred user!
{截取屏幕的指定区域的函数}
procedure Tclient.screancap(leftpos,toppos,rightpos,bottompos:integer);
var
rectwidth,rectheight:integer;
sourcedc,destdc,bhandle:integer;
bitmap:tbitmap;
begin
rectwidth:=rightpos-leftpos;
rectheight:=bottompos-toppos;
sourcedc:=createDC('display','','',nil);
destdc:=createcompatibleDC(sourcedc);
bhandle:=createcompatiblebitmap(sourcedc,rectwidth,rectheight);
selectobject(destdc,bhandle);
bitblt(destDC,0,0,rectwidth,rectheight,sourceDC,leftpos,toppos,srccopy);
bitmap:=tbitmap.create;
bitmap.handle:=bhandle;
bitmap.SaveToStream(bmpstream);
bmpstream.Position:=0;
leftsize:=bmpstream.size;
bitmap.Free;
deleteDC(destdc);
releaseDC(bhandle,sourceDC);
end;

我是刚学delphi不久,看上面的代码有点吃力,谁帮我详细注释一下各函数的作用及用法,
先谢过了
 
这是拷贝屏幕的代码。
 
procedure Tclient.screancap(leftpos,toppos,rightpos,bottompos:integer);
var
rectwidth,rectheight:integer;
sourcedc,destdc,bhandle:integer;
bitmap:tbitmap;
begin
rectwidth:=rightpos-leftpos; // 截取屏幕的宽度
rectheight:=bottompos-toppos; // 截取屏幕的高度
sourcedc:=createDC('display','','',nil); // 创建一个屏幕句柄(DEVICE HANDLE)
destdc:=createcompatibleDC(sourcedc); // 创建一个内存句柄
bhandle:=createcompatiblebitmap(sourcedc,rectwidth,rectheight); // 创建一个 windows BITMAP
selectobject(destdc,bhandle); // 将这个BITMAP指定给DESTDC
bitblt(destDC,0,0,rectwidth,rectheight,sourceDC,leftpos,toppos,srccopy); // 复制屏幕到BITMAP
bitmap:=tbitmap.create; // 建立delphi bitmap对象
bitmap.handle:=bhandle; // 指定DELPHI BITMAP直接访问WINDOWS BITMAP
bitmap.SaveToStream(bmpstream); // 保存到流
bmpstream.Position:=0;
leftsize:=bmpstream.size;
bitmap.Free; // 以下都是释放分配的内存
deleteDC(destdc);
releaseDC(bhandle,sourceDC);
end;
 
能说一下为什么要创建一个屏幕句柄和一个内存句柄吗?
我对这个不理解
 
>>能说一下为什么要创建一个屏幕句柄和一个内存句柄吗?
一般来说,在WINDOWS下要绘图就要用DC;
 
用了些API,你可以看看WIN32SDK呀.

要不你可以用别的方法实现这功能.

procedure CopyScreen(top,left,width,height);
var Canvas:TCanvas;
Bitmap:TBitmap;
begin
Canvas:=TCanvas.Create;
Bitmap:=TBitmap.Create;
Canvas.handle:=GetDC(0);//得到Desktop的DC;
Bitmap.Canvas.Assign(Canvas);//
end;
呵呵!这个Canvas就是你的桌面,你可以用Copy或是Draw.
用这个比用DC好得多.








 
接受答案了.
 
后退
顶部