⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 index.htm

📁 对于学习很有帮助
💻 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">&nbsp;&nbsp;&nbsp; 你也许使用过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">&nbsp;&nbsp;<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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  
</p> 
</body> 
</html> 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -