当前位置: 源码素材网 » Delphi教程 » 详情页

Delphi绘制渐变背景

  •   时间:2019-02-13
  • 概述:渐变背景

Delphi为窗体绘制一个渐变背景,在其中可以选择渐变背景绘制的方向、起始颜色和终止颜色。在窗体上添加TMainMenu和TColorDialog组件,前者用来设计窗体的菜单,后者用来调节窗体渐变背景的起始颜色和终止颜色。

编程要点:本实例中完成渐变背景绘制的主要代码都被封装到Draw函数中,它有3个参数——StartColor、EndColor和Direction,分别用来表示起始颜色、终止颜色和绘制方向。函数代码如下:

procedure TForm1.Draw(StartColor:TColor;EndColor:TColor;Direction:Integer);
var
  i:Integer;
  Dct:TRect;
  c1,c2,c3:byte;
begin
    if Direction=0 then
    begin
        for i:=0 to self.Width-1 do
        begin
          c1:=GetRValue(StartColor)+
Trunc(i*(GetRValue(EndColor)-GetRValue(StartColor))/(self.Width-1));
          c2:=GetGValue(StartColor)+
Trunc(i*(GetGValue(EndColor)-GetGValue(StartColor))/(self.Width-1));
          c3:=GetBValue(StartColor)+
Trunc(i*(GetBValue(EndColor)-GetBValue(StartColor))/(self.Width-1));
          Canvas.Brush.Color:=RGB(c1,c2,c3);
          Dct:=Rect(i,0,i+1,self.Height);
          Canvas.FillRect(Dct);
        end;
    end
    else
    begin
     //这里忽略按垂直方向绘制渐变背景的代码
    end;
end;

如果Direction参数为0,那么表示将按照水平方向绘制渐变背景,这也是程序中绘制渐变背景的默认方向。本实例为了实现从前景色到背景色的渐变,采取了对颜色的3个分量(R、G、B)分别线性插值的方法,如R分量的控制通过语句c1:=GetRValue (StartColor)+ Trunc(i*(GetRValue(EndColor)-GetRValue(StartColor))/self.Width)完成。

计算每个颜色分量的值后,通过语句Canvas.Brush.Color:=RGB(c1,c2,c3)合成一个每次绘制操作的颜色。在每次绘制操作中只绘制大小为Rect(i,0,i+1,self.Height)的区域,最后通过Canvas.FillRect(Dct)完成绘制操作。

另外还有一个编程要点是需要说一下的:绘图程序经常遇到的问题是如果窗体被遮挡或改变了大小,原来绘制的图形或者变得无影无踪,或者面目全非。本实例为了解决窗体被遮拦后的重绘问题,在FormPaint过程中添加了如下代码以重绘图形:

procedure TForm1.FormPaint(Sender: TObject);
begin
    Draw(StartColor,EndColor,Direction);
end;

如果需改变窗体大小,则添加如下代码自动重绘图形:

procedure TForm1.FormResize(Sender: TObject);
begin
    self.Canvas.Refresh;
    Draw(StartColor,EndColor,Direction);
end;

    相关声明:

      若“Delphi绘制渐变背景”有损您的权益,请告之我们删除内容。
      部分文章来源于网络,版权归原作者所有。