当前位置: 首页 > 开发语言 > Delphi > Delphi实例为窗体绘制渐变背景(1)

Delphi实例为窗体绘制渐变背景(1)

时间:2020-11-16 16:21来源:未知 点击:
分享到:
本实例演示如何为窗体绘制一个渐变背景,在其中可以选择渐变背景绘制的方向、起始颜色和终止颜色。

在窗体上添加TMainMenu和TColorDialog组件,前者用来设计窗体的菜单,后者用来调节窗体渐变背景的起始颜色和终止颜色。添加组件后的窗体如图1-4所示。

图1-4  添加组件后的窗体

本实例中完成渐变背景绘制的主要代码都被封装到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;
(责任编辑:admin)
推荐教程
关于我们--广告服务--免责声明--本站帮助-友情链接--版权声明--联系我们--网站地图          黑ICP备17004983号-1