如何用delphi做百叶窗?

来源:百度知道 编辑:UC知道 时间:2024/05/24 12:24:36
最好背景有可变换的图片

在应用程序中引入位图并以多种特技显示,会使程序界面生动形象,充满魅力。那么在Delphi环境中如何实现这一切呢?笔者在用Delphi开发一个多媒体系统时发现了实现位图显示特技的两种方法,下面将对这两种方法予以介绍,供Delphi爱好者参考。

一、画布Tcanvas简介

Delphi中与绘图和位图操作有关的对象是画布Tcanvas。Tcanvas对象功能强大,封装了WindowsAPI的GDI,用户可以很方便地在画布上绘制直线、矩形、椭圆、多边形等基本图形,还可以显示、拷贝位图,却不必关心设备上下文等GDI概念,极大地方便了用户。Tcanvas对象本身并不是一个构件,不单独使用,它总是作为其它对象的属性来使用的。Delphi有四个对象具有画布属性,它们是TForm、TImage、TPaintbox和Tbitmap,其中前三者是可视化构件。至于Tcanvas的详细情况,可以参考Delphi的联机帮助。

实现简单的位图显示特技,实际上就是以不同的方式逐渐将源位图拷贝到Tcanvas类型的对象上,如从位图的中央开始拷贝一个矩形区域到屏幕中央,矩形区域不断扩大直到拷贝整个位图,其视觉效果就是位图从屏幕中央向四周扩散。不同的拷贝方式就形成了多种特技形式,如扩散、拉动和百叶窗等。对于每种特技形式灵活运用,又可演变出多种花样,如扩散可以演变为从上向下、从左向右、从中间向四周和相反方向的扩散,以及从一角向对角方向扩散的特技花样。

实现上述位图显示特技的原理很简单,关键是怎样实现位图的拷贝。在Delphi中有两种拷贝位图的方法,相应地就有两种实现位图显示特技的方法,一种是用Tcanvas对象的方法CopyRect,另一种是调用WindowsAPI的BitBlt函数。下面就以两种特技的实现为例分别介绍这两种方法。

二、方法之一:调用CopyRect

Tcanvas对象与拷贝位图有关的是CopyMode属性和CopyRect方法,其中CopyMode定义拷贝的模式,而Copy?Rect执行位图拷贝的操作。当CopyMode定义为缺省值cmSrcCopy时,CopyRect将源画布上的一部分位图拷贝到目标画布上的一个矩形区域内