我记得可以用API时间FORM颜色渐变地效果,不知道谁知道,谢谢

解决方案 »

  1.   

    这段代码可以实现。
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ActnMan, ActnColorMaps, ExtCtrls, Menus;type
      TForm1 = class(TForm)
        MainMenu1: TMainMenu;
        N1: TMenuItem;
        mnu_Horizontal: TMenuItem;
        mnu_Vertical: TMenuItem;
        N2: TMenuItem;
        mnu_StartColor: TMenuItem;
        mnu_EndColor: TMenuItem;
        ColorDialog1: TColorDialog;
        procedure Draw(StartColor:TColor;EndColor:TColor;Direction:Integer);
        procedure mnu_StartColorClick(Sender: TObject);
        procedure mnu_VerticalClick(Sender: TObject);
        procedure mnu_HorizontalClick(Sender: TObject);
        procedure mnu_EndColorClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormPaint(Sender: TObject);
        procedure FormResize(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      StartColor:TColor;
      EndColor:TColor;
      Direction:Integer;
    implementation{$R *.DFM}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
            for i:=0 to self.Height-1 do
            begin
                c1:=GetRValue(StartColor)+Trunc(i*(GetRValue(EndColor)-GetRValue(StartColor))/(self.Height-1));
                c2:=GetGValue(StartColor)+Trunc(i*(GetGValue(EndColor)-GetGValue(StartColor))/(self.Height-1));
                c3:=GetBValue(StartColor)+Trunc(i*(GetBValue(EndColor)-GetBValue(StartColor))/(self.Height-1));
                Canvas.Brush.Color:=RGB(c1,c2,c3);
                //每次画矩形的画刷颜色
                Dct:=Rect(0,i,self.Width,i+1);
                //每次刷绘的矩形区域
                Canvas.FillRect(Dct);
                //填充颜色
            end;
        end;
    end;procedure TForm1.mnu_StartColorClick(Sender: TObject);
    begin
        if ColorDialog1.Execute then
            StartColor:=ColorDialog1.Color;
        Draw(StartColor,EndColor,Direction);
    end;procedure TForm1.mnu_VerticalClick(Sender: TObject);
    begin
        Direction:=1;
        Draw(StartColor,EndColor,Direction);
    end;procedure TForm1.mnu_HorizontalClick(Sender: TObject);
    begin
        Direction:=0;
        Draw(StartColor,EndColor,Direction);
    end;procedure TForm1.mnu_EndColorClick(Sender: TObject);
    begin
        if ColorDialog1.Execute then
            EndColor:=ColorDialog1.Color;
        Draw(StartColor,EndColor,Direction);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
        StartColor:=RGB(0,0,0);
        EndColor:=RGB(255,255,255);
        Direction:=0;
    end;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;end.
      

  2.   

    用这个API:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      AnimateWindow(Self.Handle, 1000, AW_BLEND or AW_ACTIVATE);
    end;{
    这个函数默认使用卷帘效果,但是你可以用AW_SLIDE获得幻灯效果,用AW_CENTER获得垮塌或扩展效果,用AW_BLEND获得平滑的淡入淡出效果。
    还有,你可以加上AW_ACTIVATE标志如果你的窗体正在出现,或是AW_HIDE如果你的窗体将要被隐藏,这一标志颠倒动画的方向。
    当你使用卷帘和淡入淡出效果时,你可以指定效果在水平和垂直轴发生的方向,添加AW_HOR_POSITIVE和AW_HOR_NEGATIVE设置x轴,添加W_VER_POSITIVE或是AW_VER_NEGATIVE设置y轴。
    当你用AW_CENTER标志时,所有这些标志都可以省略。
    }
      

  3.   

    //画渐层色
    procedure drawzc(form:Tform);
    var i:word;
    yy:real;
    r,g:Byte;
    begin
    yy:=0;
    r:=random(255);
    g:=random(255);
    if r<100 then r:=255;
    if g<100 then g:=255;
    for i:=0 to form.clientheight do
    begin
    form.canvas.brush.color:=rgb(r,g,255-MulDiv(i,255,form.clientheight));
    form.canvas.fillrect(rect(0,round(yy),form.clientwidth,round(yy+1)));
    yy:=yy+1;
    end;
    end;procedure TForm1.FormPaint(Sender: TObject);
    begin
      drawzc(self);
    end;