实现窗体的渐变背景

2016-02-19 15:32 49 1 收藏

图老师设计创意栏目是一个分享最好最实用的教程的社区,我们拥有最用心的各种教程,今天就给大家分享实现窗体的渐变背景的教程,热爱PS的朋友们快点看过来吧!

【 tulaoshi.com - 编程语言 】

  A:关键所在

  渐变图形是一种特殊的图形,它从窗体的一端开始移动,同时颜色缓慢变化,达到窗体的另一端,但图形已经变为另一种颜色。

  这种奇特的视觉效果制作起来相当简单,只需将屏幕分成许多行,每一行显示不同的颜色就可以了。渐变图形可以有许多种形式,有圆形渐变、矩形渐变、对角渐变等多种显示效果。要显示渐变,需使用到RGB 宏,每次使颜色值的各颜色分量稍有变化。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  B:实现与应用

  选择菜单 File | New Application,创建一个新的项目文件。在窗体 Form1 上放置一个 TColorDialog 控件,然后切换到Unit1.h,在 TForm1 的 private 部分加入两个变量的定义,分别用于设置起始颜色和终止颜色。

  private: // User declarations

  TColor StartColor,EndColor;

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  然后双击窗体,创建窗体的 OnCreate 事件处理函数,在其中加入如下代码,用于让用户选择起始颜色和结束颜色。

  

//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 if(ColorDialog1-Execute())
  StartColor=ColorDialog1-Color;
 if(ColorDialog1-Execute())
  EndColor=ColorDialog1-Color;
}
//---------------------------------------------------------------------------

  最后创建窗体 Form1 的 OnPaint 事件处理函数,在其中加入如下代码,用稍有变化的颜色值画一系列的垂直线,达到渐变的效果。

  

//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
 float pwidth;
 int redstart,greenstart,bluestart,redend,greenend, blueend;
 float redinc,greeninc,blueinc;
 pwidth=float(Width);
 redstart=GetRValue(StartColor);
 greenstart=GetGValue(StartColor);
 bluestart=GetBValue(StartColor);
 redend=GetRValue(EndColor);
 greenend=GetGValue(EndColor);
 blueend=GetBValue(EndColor);
 redinc=(redend-redstart)/pwidth;
 greeninc=(greenend-greenstart)/pwidth;
 blueinc=(blueend-bluestart)/pwidth;
 for(int i=0;iWidth;i++)
 {
  Canvas-Pen-Color=TColor(RGB(redstart+int(redinc*i),
  greenstart+int(greeninc*i),
  bluestart+int(blueinc*i)));
  Canvas-MoveTo(i,0);
  Canvas-LineTo(i,Height);
 }
}
//---------------------------------------------------------------------------

  C:专家点评

  程序中设渐变开始的颜色为 StartColor,结束的颜色为 EndColor。利用GetRValue、GetGValue、GetBValue 函数分别获得开始颜色的红、绿、蓝三原色分量 redstart greenstart bluestart 和结束颜色的三原色红、绿、蓝分量 redend greenend blueend。如果矩形的宽度为 pwidth 象素,则每次变化的各颜色分量值应分别为(redend-redstart)/pwidth、(greenend-greenstart)/pwidth、(blueend-bluestart)/pwidth,最后写一个循环,画一系列直线。

  这里介绍的仅仅是颜色渐变的一种形式,读者完全可以参照其实现方法,改变数学运算,实现如从上至下逐步加深、从左至右逐步加深等颜色渐变形式,此外,还可以通过画一系列颜色不断变化的圆,制作圆形渐变效果。首先画一个最大的圆,然后依次画半径比前一个圆小一个象素的圆,然后依次画半径比前一个圆小一个象素的圆,同时圆的颜色也发生变化。

来源:https://www.tulaoshi.com/n/20160219/1609839.html

延伸阅读
标签: 办公软件
笔者学校需要经常打印学生毕业证、在教案纸上书写教案等。我们想出一种办法:在所编辑的文档里把原表内容和需要填写的内容都输入,而在打印到现成的表格上时只打印填写的内容,不再把原表内容打印出来,这可以用Word2000的窗体及对窗体域的打印控制来实现。以打印学生毕业证为例,学生毕...
'分割区的宽度 PrivateConstSPLITTERWIDTH=45 '最小移动宽度 PrivateConstHMIN=15 'picLeft和picRight的宽度相对于窗体的比例 PrivatePercentAsSingle '正在拖动的标志 PrivateDragFlagAsBoolean '每次拖动后需要重排窗体上的控件 PrivateSubRedrawMe() DimNewWidthAsSingle ...
标签: Web开发
所以要引入JQUERY框架。 把我的这个控件代码放到一个js文件里面直接引入就可以了 控件代码 代码如下: $.fn.myDrag = function() { var self = $(this); self.css("position", "absolute"); var p = self.position(); self.css({ left: p.left, top: p.top }); self.mousedown( function(event) { // debugger; self.data("ifDary...
标签: Web开发
下面是我从网上搜索下来的关于网页的背景色从上下到由蓝色到白色的渐变的代码,但其中的一些参数我不懂,我琢磨不透如果要由下至上的渐变效果到底是修改哪个参数,我试过修改gradientType的值,但没能实现从下到上的渐变效果,只有从左至右的。 希望各位能指点一下,先谢过大家!! body leftmargin="0" topmargin="0" mar...
现在许多程序的窗体都有自动隐藏/显示的功能(比如OICQ)。 实现这样的功能其实很简单,原理是:判断鼠标是否移到了屏幕的最左边或最右边,如果移到了则显示窗体,如果鼠标移开了窗体则隐藏窗体。在本程序中,我们将用到GetCursorPos这个API函数熓鞘迪终飧龉δ茏钪匾的一步牐这个函数的作用就是获取当前鼠标的坐标值,我们可以通过这个值来判...

经验教程

543

收藏

20
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部