📄 index.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Delphi</title>
<style type="text/css"><!--
.font { font-size: 9pt ; line-height:13pt;
}
A:link {color: rgb(0,0,160); font-style: normal; text-decoration: none; cursor: hand}
A:visited {color: rgb(0,0,160); font-style: normal; text-decoration: none}
A:active {color: rgb(255,0,0); font-style: normal; text-decoration: none}
A:hover {color: rgb(51,102,255); font-style:bold; text-decoration: underline}
-->
</style>
</head>
<body background="../images/hu.gif">
<!--webbot bot="Include" U-Include="../top.htm" TAG="BODY" startspan --><strong>[top.htm]</strong><!--webbot bot="Include" endspan i-checksum="11293" -->
<table border="0" width="60%" height="2590">
<tr>
<td width="100%" bgcolor="#AFE4EB" height="37"><p align="center"><font face="幼圆" color="#FF0000"><big><big><big><strong>DELPHI 学 习 园 地</strong></big></big></big></font></td>
</tr>
<tr>
<td width="100%" bgcolor="#EEF49D" height="33"><font color="#0000c0"><h2 align="center"></font><font face="幼圆" color="#0000FF" size="6"><strong>Delphi 屏幕拷贝程序</strong></font></h2>
</td>
</tr>
<tr>
<td width="100%" bgcolor="#A5CCED" height="2461"><font face="宋体" size="3"><span class="font"> 你也许使用过ScreenSnap之类的屏幕截图程序,其实在Delphi中屏幕拷贝功能实现起来并不十分困难。如第一期所述画布(Tcanvas)对象封装了Windows
的大部分图形输出功能,这使得我们可以通过它以更直观的方式和Windows
的屏幕打交道,而不必关心 令 人 头 疼的Windows API 函 数。
现在我们用DELPHI 来 编 写 一 个 实 用 的 屏 幕 拷 贝 程
序。下面的一小段程序就可以实现整个屏幕的图象拷贝了。 </span></font><pre><span class="font"><font face="宋体" size="3"> <strong>var </strong> <font color="#FF0000"> </font><font color="#0000FF">//变量声明</font>
Fullscreen:Tbitmap;
FullscreenCanvas:TCanvas;
dc:HDC;
<strong> begin</strong>
DC := GetDC (0); <font color="#FF0000"> </font><font color="#0000FF">//取得屏幕的 DC,参数0指的是屏幕</font>
FullscreenCanvas := TCanvas.Create; <font color="#0000FF"> //创建一个CANVAS对象</font>
FullscreenCanvas.Handle := DC; <font color="#0000FF"> //将屏幕的DC赋给HANDLE</font>
Fullscreen.Canvas.CopyRect(Rect (0, 0, screen.Width,screen.Height),
fullscreenCanvas,
Rect (0, 0, Screen.Width, Screen.Height));<font color="#0000FF">//把整个屏幕复制到BITMAP中</font>
FullscreenCanvas.Free; <font color="#0000FF"> //释放CANVAS对象</font>
ReleaseDC (0, DC); <font color="#0000FF"> //释放DC</font>
<font color="#FF0000"> </font><font color="#0000FF"> //SCREEN对象是DELPHI预先定义的屏幕对象,直接使用就行了。</font>
<strong>end;</strong>
下面讲一下主要的编程思路:</font></span></pre>
<pre><span class="font"><font face="宋体" size="3"><font color="#ffffff">-</font> <strong><font color="#225C5E">1. 全 屏 幕 拷 贝 的 实 现</font> </strong></font></span></pre>
<p><span class="font"><font face="宋体" size="3"><font color="#ffffff">----</font>
首先因为我们不希望将我们自己的应用程序的界面也拷贝下来,所以必须隐藏拷屏程序,延长一定时间后,利用上述的程序即可实现屏幕的拷贝。
</font></span></p>
<p><span class="font"><font color="#225C5E" face="宋体" size="3"> <strong> 2.
区 域 拷 贝 的 实 现 </strong></font></span></p>
<p><span class="font"><font face="宋体" size="3"><font color="#ffffff">----</font>
要实现区域拷贝要用个小技巧,首先调用全屏幕拷贝程序把整个屏幕拷贝下来,然后把拷贝下来的图象显示在屏幕上,之后就可以让用户在上面选择需要的区域,最后才将用户选定的区域复制下
来。 </font></span></p>
<p><span class="font"><font face="宋体" size="3"><strong><font color="#ffffff">----</font>
编 程 实 现: </strong></font></span></p>
<p><span class="font"><font face="宋体" size="3"><font color="#ffffff">----</font> 1.首先用DELPHI4开一个工程。
</font></span></p>
<p><span class="font"><font face="宋体" size="3"><font color="#ffffff">----</font> 2.在FORM上放置一个TPANEL元件,设置ALIGN=ALTOP,再选部件条STANDARD上的TSCROLLBOX,放到FORM
上, 设置ALIGN=ALCLIENT,然后在SCROLLBOX 上放置一个TIMAGE对象。 </font></span></p>
<p><span class="font"><font face="宋体" size="3"><font color="#ffffff">----</font> 3.在PANEL上放置4个按钮,分别为FULL
SCREEN,REGIN,SAVE,EXIT。 </font></span></p>
<p><span class="font"><font face="宋体" size="3"><font color="#ffffff">----</font> 4.容易干的先干,
在EXIT按钮的CLICK事件里写下代码 </font></span></p>
<pre><span class="font"><font face="宋体" size="3"><strong>procedure</strong> TForm1.ExitClick(Sender: TObject);
<strong>begin</strong>
close;
<strong>end;</strong></font></span></pre>
<pre><span class="font"><font face="宋体" size="3"><strong> </strong><font color="#ffffff">--</font>
5. 接着是实现全屏幕拷贝了,在FROM上放置一个记时器TTIMER,属性ENABLED设为FALSE,
INTERVAL设为500,也就是半秒钟激活一次。双击TIMER部件,写下如下的代码。 </font></span></pre>
<pre><span class="font"><font face="宋体" size="3"><strong>procedure</strong> TForm1.Timer1Timer(Sender: TObject);
<strong>var</strong>
Fullscreen:Tbitmap;
FullscreenCanvas:TCanvas;
dc:HDC;
<strong>begin</strong>
timer1.Enabled:=false; <font color="#0000FF">//取消时钟</font>
Fullscreen := TBitmap.Create; <font color="#0000FF">//创建一个BITMAP来存放图象</font>
Fullscreen.Width := screen.width;
Fullscreen.Height := screen.Height;
DC := GetDC (0); <font color="#0000FF"> //取得屏幕的 DC,参数0指的是屏幕</font>
FullscreenCanvas := TCanvas.Create; <font color="#0000FF">//创建一个CANVAS对象</font>
FullscreenCanvas.Handle := DC;
Fullscreen.Canvas.CopyRect(Rect (0, 0, screen.Width, screen.Height),
fullscreenCanvas, Rect (0, 0, Screen.Width, Screen.Height)); </font></span></pre>
<pre><span class="font"><font face="宋体" size="3"> <font color="#0000FF">//把整个屏幕复制到BITMAP中 </font></font></span></pre>
<pre><span class="font"><font face="宋体" size="3"> FullscreenCanvas.Free; <font color="#0000FF">//释放CANVAS对象</font> ReleaseDC (0, DC);<font color="#0000FF"> //释放DC</font> </font></span></pre>
<pre><span class="font"><font face="宋体" size="3"> image1.picture.Bitmap:=fullscreen;<font color="#0000FF">//拷贝下的图象赋给IMAGE对象</font> </font></span></pre>
<pre><span class="font"><font face="宋体" size="3"> image1.Width:=fullscreen.Width;</font></span></pre>
<pre><span class="font"><font face="宋体" size="3"> image1.Height:=fullscreen.Height;</font></span></pre>
<pre><span class="font"><font face="宋体" size="3"> fullscreen.free; <font color="#0000FF">//释放bitmap</font></font></span></pre>
<pre><span class="font"><font face="宋体" size="3"> form1.WindowState:=wsNormal;<font color="#0000FF"> //复原窗口状态 </font></font></span></pre>
<pre><span class="font"><font face="宋体" size="3"> form1.show; <font color="#0000FF">//显示窗口 </font></font></span></pre>
<pre><span class="font"><font face="宋体" size="3"> messagebeep(1); <font color="#0000FF">//BEEP叫一声,报告图象已经截取好了。</font> </font></span></pre>
<pre><span class="font"><font face="宋体" size="3"><strong>end; </strong></font></span></pre>
<p><span class="font"><font face="宋体" size="3"><font color="#ffffff">----</font> 6.接下去FULLSCREEN按钮上的代码就很简单了。
</font></span></p>
<pre><span class="font"><font face="宋体" size="3"><strong>procedure</strong> TForm1.FullscreenClick(Sender: TObject);
<strong>begin</strong>
form1.WindowState:=wsMinimized; <font color="#0000FF">//最小化程序窗口</font>
form1.hide; <font color="#0000FF">//把程序藏起来</font>
timer1.enabled:=true; <font color="#0000FF"> //打开记时器</font>
<strong>end;</strong></font></span></pre>
<p><font face="宋体" size="3"><span class="font"><font color="#ffffff">----</font> 7.
拷贝到了图象当然要存起来了,SAVE按钮就有了用武之地,我们写下如下代码。</span></font></p>
<pre><span class="font"><font face="宋体" size="3"><strong>procedure</strong> TForm1.Save1Click(Sender: TObject);
<strong>begin</strong>
if savedialog1.Execute then
<strong> begin</strong>
form1.Image1.Picture.SaveToFile(savedialog1.filename)
<strong> end;</strong>
<strong>end;</strong></font></span></pre>
<p><span class="font"><font face="宋体" size="3"><font color="#ffffff">----</font> 8.
下面是区域拷贝的实现。再New 一个FORM,BorderStype设为bsNone,这样能够显示为全屏幕,上面放置一个TIMAGE部件,ALIGN设为ALCLIENT,另外放置一个TTIMER部件,TIMER部件的程序
跟上面的很象,因为它首先要实现的是全屏幕的拷贝。 </font></span></p>
<pre><span class="font"><font face="宋体" size="3"><strong>procedure</strong> TForm2.Timer1Timer(Sender: TObject);
<strong>var</strong>
Fullscreen:Tbitmap;
FullscreenCanvas:TCanvas;
dc:HDC;
<strong>begin</strong>
timer1.Enabled:=false;
Fullscreen := TBitmap.Create;
Fullscreen.Width := screen.width;
Fullscreen.Height := screen.Height;
DC := GetDC (0);
FullscreenCanvas := TCanvas.Create;
FullscreenCanvas.Handle := DC;
Fullscreen.Canvas.CopyRect (Rect(0, 0, screen.Width, screen.Height), </font></span></pre>
<div align="left"><pre><span class="font"><font face="宋体" size="3"> fullscreenCanvas,
Rect (0, 0, Screen.Width, Screen.Height));
FullscreenCanvas.Free;
ReleaseDC (0, DC);
image1.picture.Bitmap:=fullscreen;
image1.Width:=fullscreen.Width;
image1.Height:=fullscreen.Height;
fullscreen.free;
form2.WindowState:=wsMaximized;
form2.show;
messagebeep(1);
foldx:=-1;
foldy:=-1;
image1.Canvas.Pen.mode:=pmnot;<font color="#0000FF"> //笔的模式为取反</font>
image1.canvas.pen.color:=clblack; <font color="#0000FF">//笔为黑色</font>
image1.canvas.brush.Style:=bsclear; <font color="#0000FF">//空白刷子</font>
flag:=true;
<strong>end;</strong></font></span></pre>
</div></td>
</tr>
<tr>
<td width="100%" align="right" height="35" bgcolor="#A5CCED"><a href="delphi3-2.htm"><img src="../images/goto.gif" alt="goto.gif (1211 bytes)" WIDTH="49" HEIGHT="23"><font color="#0000FF"><strong>下一页</strong></font></a></td>
</tr>
</table>
<!--webbot bot="Include" U-Include="../wei1.htm" TAG="BODY" startspan --><strong>[wei1.htm]</strong><!--webbot bot="Include" endspan i-checksum="9818" -->
<p>
</p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -