设计频率仪表

本节的任务是设计一个下图所示的仪表,该仪表会显示不同频率信号的强度:

这个仪表其实很简单,就三种组件,一个黑色的长方形(Rectangle)做背景,10个Caption用于显示频率,10个Marks用于显示各频率的信号幅度。

设计这个仪表的第一个关键点,是合理安排Caption和Marks的位置,避免相互遮挡。

我们知道Marks和Labels都会显示在有效工作区中(0到1),如果将Caption显示在有效工作区之外(小于0或大于1),那么Caption就不会相互遮挡了。


设计这个仪表的第二个关键点是不用指针(Pointer)了,而是通过Marks的颜色显示值的幅度,这一点我们已经在Marks和颜色值范围这一节讲过了,只是这次换成了线性仪表。

设计过程

这个仪表有10个Marks,分别对应10个频率,设计要点如下:

1、增加一个空白的线性仪表,然后:

  1,1、将Orientation设置为Vertical,使其成为垂直仪表。

  1.2、将IsReversed设置为True,使得
从Minimum到Maximum的显示方向为从下往上。

  1.3、将Pointer的Visible属性设置为False(隐藏主指针)。

  1.4、将BaseOrigin属性设置为0.025,将BaseFactor属性设置为0.95,也就是工作区宽度为0.95,两边各留空0.025

  1.5、
AxisStart属性设置为0.0,AxisLength为 默认的0.9,也就是有效工作区高度为0.9,下边留空0.1,留空的部分用于显示Caption(频率),这一步很关键。

2、增加一个Rectangle,然后:

  2.1、将其Border的LineStyle设置为None,
Filling的Color属性设置为Black使其成为一个黑色无边框的长方形。

  2.2、由于前面将
AxisLength设置为0.9,所以尽管 Rectangle的默认高度是1,但这里的1实际等于0.9,所以需要ViewPort的ScaleY属性设置为1.12,也就是高度向下扩大1.12倍, 这样Rectangle的高度就约等于实际的1。

  通过1.5和2.2两个步骤,我们将Gauge的工作区分为两部分,上面的0.9用于显示Marks,下面的0.1用于显示Caption:

  


3、在MorePointers集合中增加10个指针,每个指针的SweepTime属性设置1(因为需要动画效果) ,Visible属性设置为False(因为这里不需要显示指针)。
 
  3.1、为了方便设计,建议给每个指针的Value属性设置一个0到100之间的值,因为使用默认值为0的话,没有办法在设计过程看到Marks的变化。

4、在FaceShapes集合中增加10个Caption,Color属性为White(白色),Font属性为3,然后:

  4.1、Text属性分别为31HZ、62、125、250、500、1KHZ、2、4、6、16KHZ

  4.2、CenterPountX属性分别为0.055、0.15、0.25、0.35、0.45、0.55、0.65、0.75、0.85、0.95,也就是每个Caption的间隔约为0.1。

  4.3、所有Caption的CenterPountY属性设置为1.07,也就是Caption显示在有效工作区之外,避免其被后面增加的Marks遮挡。

现在的仪表看起来是这样的:

5、在Decorators集合中增加10个Marks,然后:

5.1、
全部Marks的IntervalWidth属性设置为3,Width属性设置为2,Length属性设置为7Shape属性设置为Round,ValueColorFalloff设置为None,请注意:
  
   A、这里用的是IntervalWidth,不是Interval。

   B、IntervalWidth为3,Width为2,也就是每隔3个逻辑宽度绘制一个Mark,每个Mark自身的逻辑宽度为2,所以相邻Mark之间会有空白,这个空白的逻辑宽度为1(3-2=1)。


5.2、各Marks的Location属性分别为5、15、25、35、45、55、65、75、85、95,也就是每个Marks的间隔为10。

5.3、开始将各个Marks的颜色绑定到对应的指针,以第一个Marks为例,编辑其ValueColors即可,增加两个项目,分别为:
 


第一个项目的意思是,这个Marks从0值开始,这个Marks的颜色为"Khaki"。

第二个项目没有设置Value,而是将其PointerIndex设置为0,意思是从第一个指针(编号为0)的值开始,这个Marks的颜色改为
DimGray(50%的透明度)。

假定第一个指针的Value为9,设置完成后,仪表的样子是:

依次设置其他Marks,按顺序绑定到对应的指针,并设置其ValueColors,最后得到的仪表为:

我把这个仪表保存为一个模板文件了,如果你按照上述步骤来无法实现,你可以下载模板文件来参考:

模版文件

现在你可以通过代码设置各个频率的幅度:

Dim ggs As WinForm.Gauges = e.Form.Controls("Guages1")
ggs.LinearGauge.MorePointers(0).Value = 37
ggs.LinearGauge.MorePointers(1).Value = 75
ggs.LinearGauge.MorePointers(2).Value = 46
ggs.LinearGauge.MorePointers(3).Value = 27
ggs.LinearGauge.MorePointers(4).Value = 62
ggs.LinearGauge.MorePointers(5).Value = 89
ggs.LinearGauge.MorePointers(6).Value = 44
ggs.LinearGauge.MorePointers(7).Value = 58
ggs.LinearGauge.MorePointers(8).Value = 50
ggs.LinearGauge.MorePointers(9).Value = 9

建议给每个指针设置Name,这样就可以通过Name来引用指针了:

ggs.LinearGauge.MorePointers("my31hz").Value = 37


本页地址:http://www.foxtable.com/webhelp/topics/3915.htm