上一篇 | 下一篇

一个实用的Delphi屏幕拷贝程序的设计

发布: 2008-6-26 20:33 | 作者: admin | 来源: | 查看: 0次

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;//复原窗口状

字号: | 推荐给好友

31/3123>

评分:0

我来说两句