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

📄 007.htm

📁 Delphi书籍--Delphi网上教程
💻 HTM
字号:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI专题--多媒体类-->用DELPHI实现位图显示特技</TITLE>
<META NAME="keywords" CONTENT=" DELPHI专题--多媒体类 用DELPHI实现位图显示特技">
<META NAME="description" CONTENT=" - DELPHI专题--多媒体类 - 用DELPHI实现位图显示特技">

<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋体"}
.tt2 {font: 12pt/15pt "宋体"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<a href="index.html">返回</a>

<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>

<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷体_GB2312">用DELPHI实现位图显示特技</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
<p class="tt2"> 在应用程序中引入位图并以多种特技显示,会使程序界面生动形象,充满魅力。那么在Delphi环境中如何实现这一切呢?笔者在用Delphi开发一个多媒体系统时发现了实现位图显示特技的两种方法,下面将对这两种方法予以介绍,供Delphi爱好者参考。<br>
  一、画布Tcanvas简介<br> 
 Delphi中与绘图和位图操作有关的对象是画布Tcanvas。Tcanvas对象功能强大,封装了WindowsAPI的GDI,用户可以很方便地在画布上绘制直线、矩形、椭圆、多边形等基本图形,还可以显示、拷贝位图,却不必关心设备上下文等GDI概念,极大地方便了用户。Tcanvas对象本身并不是一个构件,不单独使用,它总是作为其它对象的属性<br>
来使用的。Delphi有四个对象具有画布属性,它们是TForm、TImage、TPaintbox和Tbitmap,其中前三者是可视化构件。至于Tcanvas的详细情况,可以参考Delphi的联机帮助。<br>
  实现简单的位图显示特技,实际上就是以不同的方式逐渐将源位图拷贝到Tcanvas类型的对象上,如从位图的中央开始拷贝一个矩形区域到屏幕中央,矩形区域不断扩大直到拷贝整个位图,其视觉效果就是位图从屏幕中央向四周扩散。不同的拷贝方式就形成了多种特技形式,如扩散、拉动和百叶窗等。对于每种特技形式灵活运用,又可演变出多种花样,如扩散可以演变为从上向下、从左向右、从中间向四周和相反方向的扩散,以及从一角向对角方<br>
向扩散的特技花样。<br>
  实现上述位图显示特技的原理很简单,关键是怎样实现位图的拷贝。在Delphi中有两种拷贝位图的方法,相应地就有两种实现位图显示特技的方法,一种是用Tcanvas对象的方法CopyRect,另一种是调用WindowsAPI的BitBlt函数。下面就以两种特技的实现为例分别介绍这两种方法。<br>
   二、方法之一:调用CopyRect<br> 
  Tcanvas对象与拷贝位图有关的是CopyMode属性和CopyRect方法,其中CopyMode定义拷贝的模式,而CopyRect执行位图拷贝的操作。当CopyMode定义为缺省值cmSrcCopy时,CopyRect将源画布上的一部分位图拷贝到目标画布上的一个矩形区域内。CopyRect的过程声明及参数意义如下:<br>
  procedureCopyRect(Dest:TRect;Canvas:TCanvas;Source:TRect);<br>
  Dest目标画布上的矩形区域<br>
  Canvas源画布<br>
  Source源画布上的矩形区域<br>
  下面以一个拉动特技的实现为例,说明如何用CopyRect方法实现特技。该例包括三个构件:Tform1、Teditl和Tbuttonl,变量step控制拉动的步骤。程序运行后,从Teditl中输入待显示位图文件名,然后单击Tbuttonl,这时位图从左侧出现并逐渐向右侧移动,好似位图被从左向右拉动一样,拉动结束后位图左上角坐标为(x0,y0)。该例程序清单如下所示:<br>
<br>
  procedureTForml.ButtonlClick(Sender:TObject);<br>
  const step=200;<br> 
  x0=20;<br>
  y0=20;<br>
  varbitmap:tbitmap;<br>
  midx:integer;{中间变量,当前步骤所拷贝位图的宽}<br>
  ratiox:real;{每步位图宽度增加量}<br>
  i:integer;<br>
  rect1,rect2:trect;{源、目标矩形区域}<br>
  begin<br>
  bitmap:=tbitmap.create;<br>
  bitmap.loadfromfile(edit1.text);<br>
  ratiox:=bitmap.width/step;<br>
  fori:=otostepdo<br>
  begin<br>
  midx:=round(ratiox*i);<br>
  with rect1 do<br> 
  begin<br>
  left:=bitmap.width-midx;<br>
  top:=0;<br>
  right:=bitmap.width;<br>
  bottom:=bitmap.height;<br>
  end;<br>
  with rect2 do<br> 
  begin<br>
  left:=x0;<br>
  top:=y0;<br>
  right:=x0+midx;<br>
  bottom:=yo+bitmap.height;<br>
  end;<br>
  canvas.copyrect(rect2,bitmap.canvas,rect1);<br>
  end;<br>
  bitmap.free;<br>
  end;<br>
   三、方法之二:调用BitBlt函数<br> 
  这里涉及到了在Delphi中如何调用Win

⌨️ 快捷键说明

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