CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

问一个有点深度的算法

楼主nnnnyyyy(海洋之心)2006-03-20 10:00:39 在 Delphi / VCL组件开发及应用 提问

请问如何实现颜色渐变?  
  我在想在自已开发button上面实现颜色从上到下,范围从RGB(45,   77,   141)   到RGB(163,   189,   250)的渐变。画布的形状可  
  以是直角长方形也可以是圆角长方形.我现在问题是其它方面没问就是颜色不好控制当高度大于渐变范围时就会出现两种完全不同的颜色。  
  而且圆角的长方形的渐变也不行。请问如何实现这个算法? 问题点数:50、回复次数:3Top

1 楼operfume(橘子香水)回复于 2006-03-20 22:56:51 得分 5

直接用PhotoShop做好图,然后贴到按扭上.Top

2 楼nnnnyyyy(海洋之心)回复于 2006-03-21 15:33:10 得分 0

用贴图会慢的。  
   
  我在一个button上面用了渐变色。但是caption的背景色和button的背景色不一致(Caption那块是白色的)。这个怎么搞呢?  
        //画形状  
        Canvas.FillRect(Rect(0,   0,   Width,   Height));  
   
        //填充渐变色  
        InitializeColor   :=   RGB(45,   77,   141);  
        TerminalColor   :=   RGB(163,   198,   250);  
        for   FillNumber   :=   0   to     Height-1   do  
            begin  
                Red   :=   GetRvalue(InitializeColor)   +   Trunc(FillNumber   *   (GetRvalue(TerminalColor)   -     GetRvalue(InitializeColor))   /   (Height   -   1));  
                Green   :=   GetGvalue(InitializeColor)   +   Trunc(FillNumber   *   (GetGvalue(TerminalColor)   -   GetGvalue(InitializeColor))   /(Height   -   1));  
                Blue   :=   GetBvalue(InitializeColor)   +   Trunc(FillNumber   *   (GetBvalue(TerminalColor)   -   GetBvalue(InitializeColor))   /   (Height   -   1));  
   
                Canvas.Pen.Color   :=   RGB(Red,   Green,   Blue);  
                Canvas.MoveTo(0,   FillNumber);  
                Canvas.lineto(Width,   FillNumber);  
            end;  
   
        //重写Caption  
        if   Trim(Caption)   <>   ''   then  
          begin  
              Canvas.Font   :=   Font;  
              FontHeight   :=   Canvas.TextHeight('X');   //得到字体高度  
              Canvas.TextOut((Width   -   Canvas.TextWidth(Caption))   div   2   ,   (Height   -   FontHeight)   div   2,   Caption);  
          end;  
   
  Top

3 楼whbo(王红波(年轻人,要有所作为))回复于 2006-03-21 16:25:19 得分 45

循环的时候,不要用1做循环,可以用按钮高度的一个比例,比如1/10,Top

相关问题

  • 问一个有点难度的算法:
  • 关于深度优先算法
  • 算法问题
  • 算法问题
  • 算法问题~~~~~~~~
  • 算法问题
  • 算法问题
  • 算法问题
  • 算法问题]
  • 算法问题

关键词

  • 渐变
  • initializecolor
  • fillnumber
  • terminalcolor
  • canvas
  • getrvalue
  • getbvalue
  • getgvalue
  • caption
  • 长方形

得分解答快速导航

  • 帖主:nnnnyyyy
  • operfume
  • whbo

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo