width="84%">一个实用的Delphi屏幕拷贝程序的设计
宁波市游河巷贾学杰
----Borland公司(现改名为INPRISE公司)的DELPHI是当前最为方便的Windows程序设
计工具之一。许多人以为DELPHI是作为数据库开发工具出现的,其实用DELPHI
可以以极快的速度开发出高效的Windows程序。
----现在我们就用DELPHI来编写一个实用的屏幕拷贝程序。瞧瞧,下面的画面就是所编程序运行后进行区域屏幕拷贝的例子,还不错吧!
----Borland公司的天才设计师们用画布(Tcanvas)对象封装了Windows的大部分图形
输出功能,这使得我们可以通过他以更直观的方式和Windows的屏幕打交道,而不必关心令人头疼的WindowsAPI函数。下面的一小段程序就可以实现整个
屏幕的图象拷贝了。
var//变量声明
Fullscreen:Tbitmap;
FullscreenCanvas:TCanvas;
dc:HDC;
//------------------------------------------------------------
DC:=GetDC(0);//取得屏幕的DC,参数0指的是屏幕
FullscreenCanvas:=TCanvas.Create;//创建一个CANVAS对象
FullscreenCanvas.Handle:=DC;//将屏幕的DC赋给HANDLE
Fullscreen.Canvas.CopyRect
(Rect(0,0,screen.Width,screen.Height),
fullscreenCanvas,
Rect(0,0,Screen.Width,Screen.Height));
//把整个屏幕复制到BITMAP中
FullscreenCanvas.Free;//释放CANVAS对象
ReleaseDC(0,DC);//释放DC
//SCREEN对象是DELPHI预先定义的屏幕对象,直接使用就行了。
----看了以上代码,你就会发现用DELPHI写屏幕拷贝程序的确很简单。
----当然要写一个实用的屏幕拷贝程序,光靠上述代码是不够的,下面讲一下主要的编程思路:
----1.全屏幕拷贝的实现
----首先隐藏拷屏程序,延长一定时间后,利用上述的程序即可实现屏幕的
拷贝。
----2.区域拷贝的实现
----要实现区域拷贝要用个小技巧,首先调用全屏幕拷贝程序把整个屏幕拷
贝下来,然后把拷贝下来的图象显示在屏幕上,之后就可以让用户在上面
选择需要的区域,最后才将用户选定的区域复制下来。
----编程实现:
----1.首先用DELPHI3开一个工程。
----2.在FORM上放置一个TPANEL元件,设置ALIGN=ALTOP,再选部件条ADDITIONAL上的TSCROLLBOX,放到FORM上,设置ALIGN=ALCLIENT,然后在SCROLLBOX上放置一个TIMAGE对象。
----3.在PANEL上放置4个按钮,分别为FULLSCREEN,REGIN,SAVE,EXIT。
----4.容易干的先干,在EXIT按钮的CLICK事件里写下代码
procedure TForm1.ExitClick(Sender:TObject);
begin
close;
end;
----5.接着是实现全屏幕拷贝了,在FROM上放置一个记时器TTIMER,ENABLED设为FALSE,INTERVAL设为500,也就是半秒钟激活一次。双击TIMER部件,写上如下的代码。
procedure TForm1.Timer1Timer(Sender:TObject);
var
Fullscreen:Tbitmap;
FullscreenCanvas:TCanvas;
dc:HDC;
begin
timer1.Enabled:=false;//取消时钟
Fullscreen:=TBitmap.Create;//创建一个BITMAP来存放图象
Fullscreen.Width:=screen.width;
Fullscreen.Height:=screen.Height;
DC:=GetDC(0);//取得屏幕的DC,参数0指的是屏幕
FullscreenCanvas:=TCanvas.Create;//创建一个CANVAS对象
FullscreenCanvas.Handle:=DC;
Fullscreen.Canvas.CopyRect
(Rect(0,0,screen.Width,screen.Height),fullscreenCanvas,
Rect(0,0,Screen.Width,Screen.Height));
//把整个屏幕复制到BITMAP中
FullscreenCanvas.Free;//释放CANVAS对象
ReleaseDC(0,DC);//释放DC
//*******************************
image1.picture.Bitmap:=fullscreen;//拷贝下的图象赋给IMAGE对象
image1.Width:=fullscreen.Width;
image1.Height:=fullscreen.Height;
fullscreen.free;//释放bitmap
form1.WindowState:=wsNormal;//复原窗口状
