自定义颜色变化进度条控件

在制作DVD时,可能会注意到编译窗口底部的“进度”指示器。它显示了光盘空间的使用情况,只要文件适合光盘,它就是绿色的。根据设置,当编译文件过大而无法适应可用的光盘空间时,它会变成黄色,然后是红色。

在当前应用程序中,需要一个类似的条形图,但找不到具有所需功能的条形图。然而,找到了一篇名为“Vista风格进度条”的文章——作者未列出——它向展示了如何制作一个外观非常漂亮的进度条。它看起来并不像Nero的空间指示器,但对颜色功能感兴趣,所以条形图本身看起来更漂亮并不重要。

上述链接是一个“普通”进度条,尽管它具有三种不同的颜色,但一次只能使用其中一种。它的值范围被硬编码在0到100之间。

最初做的工作

使用了最初用C#编写的代码,在VB.NET2005中创建了一个类似的控件。

首先,修复了控件中的两个错误(值越界检查不正确,当值设置为0时控件崩溃)。

然后添加了很多功能:

  • 最大值和最小值
  • 第四种颜色:黄色(如果需要,控件可以扩展以支持更多颜色)
  • 选择颜色段数量的可能性(1-3,其中1 = 标准进度条
  • 颜色和段阈值的属性
  • 是否在条形图中显示阈值的属性(在Nero中,它们是)

真正不满意的是颜色处理。适应了原始进度条控件的代码,但至少可以说它不是优化的。每次想添加一种颜色,都必须添加大量的代码。宁愿用户能够自由选择颜色,而不是依赖于控件中定义的颜色。问题是,为了绘制一个彩色段,控件使用该颜色的四种不同的阴影。假设用户为第1段选择了“红色”,那么控件必须计算出绘制该段所需的其他三种红色阴影。

完全不知道该怎么做,但幸运的是,在消息论坛上从“Four13 Designs”那里得到了一个代码样本。它采用给定的颜色,并使用所有三个颜色组件的校正因子计算出较浅或较深的颜色。太好了,想——可以使用已经定义的颜色来找到需要计算的三种颜色阴影的校正因子。

但事实证明做不到。原始颜色没有相同的校正因子用于不同的阴影,它们甚至没有相同的校正因子用于同一颜色的三个RGB分量。

该怎么办?希望“新改进”的控件看起来和旧的一样,固定的颜色定义。所以不希望自己动手调整校正因子,可能会创建一个看起来与原始控件不同的控件。

看不到问题的解决办法,但仍然希望用户能够自由选择颜色,所以最后说“啊,该死的……”并使用旧的改进的试错方法,想出了适合校正因子,并且——就肉眼所见——产生了与原始颜色非常相似的颜色。

最大的问题解决了。

请注意:

  • Segment1Color、Segment2Color和Segment3Color属性已更改。它们不再基于颜色枚举,而是真正的颜色对象。这意味着如果已经用以前的版本做了一个项目,可能需要在窗体设计器文件中编辑属性类型。

新版本中的其他重大变化包括:

  • 在版本1.2中,引入了一个进度百分比文本属性。在条形图中以百分比的形式显示NeroBar的值。在发布版本后,意识到如果使用颜色段来指示“太大”的值,就像在Nero中一样,那么基于控件整个宽度的百分比将不正确。假设有MinValue 0,MaxValue 100,SegmentCount 2和Segment2StartThreshold 90,以显示90是可以接受的,但90以上就太多了,那么当条形图的值为90时,百分比应该显示100%,当条形图的值为100(太多,记得吗?)时,百分比应该显示111%。
  • 所以在这个版本中,引入了一个新属性PercentageBasedOn来解决这个问题。
  • 对于制作这个控件的相同应用程序,需要某种倒计时指示器。想:为什么不也用NeroBar呢。希望条形图从最大值开始,然后倒数到0。在某个给定点,希望条形图改变颜色以指示倒计时即将结束。
  • 所以不能用不同的颜色段直接使用条形图。相反,实现了一个模式,当通过阈值时,整个条形图会改变颜色(属性:ColorChangeMode)。这很好,但觉得它看起来有点奇怪。条形图会从右到左,为了使其成为时间流逝的指示,更希望动画从左到右。所以甚至实现了一个RightToLeft属性,它反转了条形图的功能。

这些新属性也在演示应用程序中演示。只需点击底部的按钮,查看动画。

简要说明

真的没什么可解释的:属性都在演示应用程序中显示,但为了提供信息,会在这里列出想知道的属性:

  • 值(当然)
  • MinValue
  • MaxValue
  • SegmentCount
  • Segment2StartThreshold
  • Segment3StartThreshold
  • Segment1Color
  • Segment2Color
  • Segment3Color
  • DrawThresholds
  • ColorThresholds
  • GlowMode
  • GlowSpeed
  • GlowPause
  • GlowColor
  • PercentageShow(百分比文本颜色和字体由Nerobar的ForeColor、Font和TextAlign属性控制)
  • PercentageBasedOn
  • RightToLeft
  • ColorChangeMode

当使用演示应用程序时,请注意没有验证值,所以可以将属性设置为NeroBar不接受的值——从而产生异常。它只是用来演示控件的功能——而不是一个100%的防故障应用程序。

可能的改进

  • 版本1.3(2008年12月12日)
    • 添加:NeroBar.vb中的版本历史
    • 增强:100%用户定义颜色
    • 增强:当将“值”设置为高于“最大值”的值时,百分比文本将显示“> 100%”(根据PercentageBasedOn设置也可以超过100%)
    • 增强:将用户选择的GlowColor的alpha通道透明度添加到“平滑”发光
    • 增强:现在可以使用TextAlign属性对进度百分比文本进行对齐
    • 新功能:进度百分比计算可以基于段——而不仅仅是整个控件宽度
    • 新功能:ColorChangeMode - 现在可以选择整个条形图在通过阈值时是否应该改变颜色——或者像以前一样只有段
    • 新功能:RightToLeft模式
    • 新属性:PercentageBasedOn、RightToLeft、ColorChangeMode、TextAlign
    • 自定义Visual Studio工具箱图标
    • 演示应用程序的自定义图标
    • 移除:六个硬编码颜色
    • 修复:当值在0和0.5之间时控件崩溃(由“Hendrikbez”报告)
    • 从设计器属性网格中隐藏不相关的继承基属性
    • 更新演示项目
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485