第3章 图形与多媒体处理实例 实例49 跳跃的曲线
本实例将介绍如何绘制一个会跳跃的曲线。
向窗体上添加一个TImage组件和一个TTImer组件,在程序运行的过程中,TTimage组件上会有一个椭圆不停地跳跃和变化。添加组件后的窗体如图3-8所示。
图3-8 添加组件后的窗体
程序首先定义4个Integer类型的全局变量——X1,X2,Y1,Y2,它们用于存储上一个时间循环中椭圆的左上角和右下角的坐标。 然后在程序的初始化过程中添加self.Canvas.Brush.Style:=bsClear语句,这样绘制出来的椭圆除了边框之外不会遮挡后面的绘图区。 最后添加TTimer组件响应代码如下: procedure TForm1.Timer1Timer(Sender: TObject); begin Image1.Canvas.Pen.Mode:=pmNotXor; Image1.Canvas.Ellipse(X1,Y1,X2,Y2); X1:=Random(Image1.Width); X2:=Random(Image1.Width); Y1:=Random(Image1.Height); Y2:=Random(Image1.Height); Image1.Canvas.Pen.Mode:=pmCopy; Image1.Canvas.Ellipse(X1,Y1,X2,Y2); end; 窗体上的TTimer组件的Interval属性设置为1000,这样没有1000毫秒就会激活上面的响应过程。程序首先通过pmNotXor的方式擦除掉前一个时间循环中绘制的椭圆。然后利用随机数产生了新的椭圆的坐标。最后用pmCopy的方式在新的坐标点上绘制椭圆,从而产生跳跃的效果。
程序代码如下: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, math;
type TForm1 = class(TForm) Timer1: TTimer; Image1: TImage; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; X1,X2,Y1,Y2:Integer;
implementation {$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin Randomize(); self.Canvas.Brush.Style:=bsClear; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin Image1.Canvas.Pen.Mode:=pmNotXor; Image1.Canvas.Ellipse(X1,Y1,X2,Y2); X1:=Random(Image1.Width); X2:=Random(Image1.Width); Y1:=Random(Image1.Height); Y2:=Random(Image1.Height); Image1.Canvas.Pen.Mode:=pmCopy; Image1.Canvas.Ellipse(X1,Y1,X2,Y2); end;
end.
保存文件,然后按F9键运行程序。在程序运行过程中,会有一个椭圆不停地变换大小和位置,运行结果如图3-9所示。
图3-9 程序运行结果
通过本例读者可以了解到,通过设置Pen对象的Mode属性,在绘图操作中不但可以绘制新的图形,还可以擦除旧的图形。当然,由于本实例中TTImage组件的背景色是白色,所以Pen对象的Mode属性设置为pmNotXor可以擦除旧的图形,如果TTImage组件的背景色是黑色,那么Pen对象的Mode属性设置为pmXor才可以擦除旧的图形。 |