关于音量显示的问题
想做个音量显示的条,是那种渐进色的条,就是下面是绿色的,然后越来越淡过渡到中间的黄色,然后由黄色过渡到红色,上面最红。
要求是这样的:随着数值的大小,渐进色条的大小也发生高低的变化,并且同时显示20个渐进色条,每100ms渐进色条改变一次(所有的渐进色条向左移动一个,就是左边的被右边的代替,最右边的总是最新音量的渐进色条,就像移动的效果一样)。大家给点意见怎么做。
[解决办法]
老妖网站有一个实例:
雕虫小计—颜色渐变的进度条
http://www.ccrun.com/article.asp?i=383&d=3p1z70
文档标题:雕虫小计—颜色渐变的进度条
原作者:佚名
更新日期:2002-12-01
浏览次数:5701
关键字:颜色渐变的进度条
在Windows2000开始或关闭的时候,有一条颜色渐变的进度条,很是好看。我们可以用简单的方法制作类似的进度条。用图片移动的方法可以很方便的实现这一功能。
首先用PhotoShop制作图片。新建一张长为300宽为20的空白图片,选择“直线渐变工具”,在选择框里打开渐变编辑器,选择渐变色的时候须注意一点,必须选择最左边的颜色和最右边的颜色相同的渐变色,这里我们选择“橙、黄、橙渐变”;拉颜色的时候一定得从图片的最左边平衡(按住Shift)地拉到图片的最右边,否则两端的颜色不同会影响效果。制作满意后可存储副本为BMP或JPG格式。
接着用C++ Builder写程序(所有对象名都取默认值)。在窗体上添加一个TPanel对象,把它的BorderStyle设为bsSingle。在Panel1里添加两个Timage对象,两者的Picture属性都指定为刚才我们制作的那张图片。添加一个TTimer对象,把它的Interval属性设为10。
在Form1的Show事件里添加如下代码:
Image1-> Top =0;
// 本文转自 C++Builder 研究 - http://www.ccrun.com/article.asp?i=383&d=3p1z70
Image1-> Left=0;
Image1-> Height=Panel1-> Height;
Image1-> Width =Panel1-> Width;
Image1-> Stretch =true;
Image2-> Top =0;
Image2-> Left=-Panel1-> Width;
Image2-> Height=Panel1-> Height;
Image2-> Width =Panel1-> Width;
Image2-> Stretch =true;
在Timer1的OnTimer事件里添加如下代码:
Image1-> Left++;
if( Image1-> Left==Image1-> Width)
Image1-> Left=-Image1-> Width;
Image2-> Left++;
if( Image2-> Left==Image1-> Width)
Image2-> Left=-Image1-> Width;
[解决办法]
用API, GradientFill, 和不惑的差不多,直观点
Start 起始色
End 终止色
LeftToRight True时从左到右填充,False时从上到下填充
void FillGradientRect(HDC hdc,const TRect &ARect,TColor Start, TColor End, bool LeftToRight) const
{
DWORD c1=ColorToRGB(Start);
DWORD c2=ColorToRGB(End);
TRIVERTEX Vertex[2]={
{
ARect.Left,
ARect.Top,
GetRValue(c1) < <8,
GetGValue(c1) < <8,
GetBValue(c1) < <8,
0
},
{
ARect.Right,
ARect.Bottom,
GetRValue(c2) < <8,
GetGValue(c2) < <8,
GetBValue(c2) < <8,
0
}
};
GRADIENT_RECT GRect={
0,
1
};
GradientFill(hdc, Vertex, 2, &GRect, 1, LeftToRight?GRADIENT_FILL_RECT_H:GRADIENT_FILL_RECT_V);
}
[解决办法]
例子是我的一个工程中的,如果Image上没有图像, 用:
DrawGraden(Image1-> Picture-> Bitmap-> Canvas-> Handle, Image1-> ClientRect, 0x00F7D7C6, 0x00D6B2A5, GRADIENT_FILL_RECT_V);