-->



实例147 制作渐变填充的进度条

进度条经常用于表示程序运行的进度,本实例演示如何制作一个颜色渐变填充的进度条。

向窗体上添加一个TTimer组件和一个TProgressBar组件。TTimer组件用来改变进度条中的进度数值,并且控制进度条的颜色。添加组件后的窗体如图8-42所示。

8-42 添加组件后的窗体

为了达到动态控制进度条的效果,在程序运行过程中自动通过TTimer组件来设置进度条的进度数值,为此需要先设置TTimer组件的Interval属性值为100Enabled属性值为True,然后添加TTimer组件的响应代码如下:

procedure TForm1.Timer1Timer(Sender: TObject);

var

color:Integer;

begin

if self.ProgressBar1.Position<100 then

self.ProgressBar1.Position:=self.ProgressBar1.Position+1

else

self.ProgressBar1.Position:=0;

color:=Trunc(self.ProgressBar1.Position*$FF/100);

SendMessage(ProgressBar1.Handle,PBM_SETBARCOLOR,0,TColor(color));

end;

TTimerEnabled属性为True的前提下,程序每隔100毫秒就会改变进度条中的进度数值。如果进度数值小于100,那么就把进度数值加1,反之就设置进度数值为0。然后程序就根据进度数值来确定进度条的颜色,使得进度条的颜色在黑色和红色之间均匀变化。最后通过SendMessage函数发送一个改变进度条颜色的消息来设置进度条的颜色。

程序代码如下:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, ComCtrls, COMMCtrl;

type

TForm1 = class(TForm)

ProgressBar1: TProgressBar;

Timer1: TTimer;

procedure Timer1Timer(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);

var

color:Integer;

begin

if self.ProgressBar1.Position<100 then

self.ProgressBar1.Position:=self.ProgressBar1.Position+1

else

self.ProgressBar1.Position:=0;

color:=Trunc(self.ProgressBar1.Position*$FF/100);

SendMessage(ProgressBar1.Handle,PBM_SETBARCOLOR,0,TColor(color));

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

progressbar1.Min:=0;

progressbar1.Max:=100;

end;

end.

保存文件,然后按F9键运行程序,程序运行结果如图8-43所示。

8-43 程序运行结果