如何运用vba绘制游标卡尺

2011-05-18 11:42张小建
物理教师 2011年2期
关键词:游标卡尺文本框刻度

张小建

(江苏省木并茶高级中学,江苏 如东 226406)

游标卡尺作为基本测量工具之一,自然是考查的热点.物理教师在编制试卷时,最困难的就是绘制游标卡尺.很多教师就采用其他软件绘制然后以图片的形式复制到word里,再经过缩放等操作后往往会出现模糊、变形、锯齿等现象.实际上用word里嵌套的vba编程工具就可很准确的画出游标卡尺.下面就把笔者在实际工作中积累的一点经验介绍给大家,以供参考.

1 Word的对象及坐标系

运用vba画游标卡尺主要用到一个集合对象:Shapes.其方法又与Word坐标系有关系.

1.1 Shapes集合对象

Shapes集合对象是隶属于 Document对象.Shapes集合对象代表文档中或者文档页眉和页脚中的所有图形.本文运用Shapes集合对象的两个方法添加形状.Addline方法添加直线,AddTextbox方法添加文本框.

1.2 word的坐标系

Word坐标系的坐标原点在Document对象的左上角,横向向右为x轴正方向,纵向向下为y轴正方向.量度值为磅,允许两位小数,可以满足一般用户的精度要求.

2 Addline方法和AddTextbox方法

运用vba绘制游标卡尺主要就是用Shapes集合对象的这两种方法.

2.1 Addline方法

在文档中添加一条直线.返回一个代表该直线的Shape对象,并将其添加到Shapes集合.

语法:expression.AddLine(BeginX,BeginY,EndX,EndY)

各参数解释:

expression 必需.该表达式返回一个Shapes对象.

BeginX Single 类型,必需.直线起点相对于锁定标记的水平位置,以磅为单位.

BeginY Single 类型,必需.直线起点相对于锁定标记的垂直位置,以磅为单位.

EndX Single 类型,必需.直线终点相对于锁定标记的水平位置,以磅为单位.

EndY Single 类型,必需.直线终点相对于锁定标记的垂直位置,以磅为单位.

2.2 AddTextbox方法

在文档中添加一个文本框.返回一个代表该文本框Shape对象,并将其添加到Shapes集合.

语法:expression.AddTextbox(Orientation,Left,Top,Width,Height)

各参数解释:

expression 必需.该表达式返回“应用于”列表中的一个对象.

Orientation MsoTextOrientation 必需.指定文本的方向.

Left Single 类型,必需.文本框左侧边缘的位置,以磅为单位.

Top Single 类型,必需.文本框上部边缘的位置,以磅为单位.

Width Single 类型,必需.文本框的宽度,以磅为单位.

Height Single 类型,必需.文本框的高度,以磅为单位.

提示:在编写vba代码时,要充分利用好vba的帮助.

3 算法及主程序

以10格游标卡尺为例进行算法说明,20格、50格游标卡尺算法类似.

ybcgs=10′游标尺格数.

l=TextBox1.Text′ 通过文本框获取需要绘制游标卡尺的读数值,以mm单位.

zcl=Int(l)′ 需要绘制游标卡尺的读数值的整数部分,主尺上的第一条刻度是zcl-3.

zczxfd=10′ 主尺最小分度的屏幕长度,以磅为单位.相当于游标卡尺主尺的最小分度1 mm.

zkds=7+ybcgs′ 主尺总刻度数.

zccd=80+ybcgs*zczxfd′ 主尺总长度(磅).

If zcl<6 Then′ 通过以下算法返回主尺整厘米刻度值的第1个刻度值.

bzckd=Round((zcl/10),0)

Else

bzckd=Round((zcl/10)+0.1,0)

End If

ybzxfd=zczxfd*(1-(1/ybcgs))′ 游标卡尺最小分度的屏幕长度(磅).

Set docActive=ActiveDocument

docActive.Shapes.AddLine(80,180,80+zccd,180).Select′ 画主尺横线.

再利用line的属性设置直线的格式(代码略).

For i=1 To zkds′ 画主尺刻度线.

If(zcl-4+i)/10=bzckd Then

docActive.Shapes.AddLine(80+zczxfd*i,172,80+zczxfd*i,180).Select′画整数厘米刻度线.

docActive.Shapes.AddTextbox

(msoTextOrientationHorizontal,80+zczxfd*i-2,162,8,10).Select′在整数厘米刻度线位置添加一个文本框.再利用TextFrame属性设置文本框的格式(代码略).

Selection.TypeText Text:=bzckd′ 写整数厘米刻度值.

bzckd=bzckd+1

ElseIf l<6 And i=1 Then′ 读数值小于6mm,主尺的第一个刻度线为零值.

docActive.Shapes.AddLine(80+zczxfd*i,172,80+zczxfd*i,180).Select′ 画整数厘米刻度线

docActive.Shapes.AddTextbox

(msoTextOrientationHorizontal,80+zczxfd*i-2,162,8,10).Select′在整数厘米刻度线位置添加一个文本框.再利用TextFrame属性设置文本框的格式(代码略).Selection.TypeText Text:=bzckd′ 写整数厘米刻度值

bzckd=bzckd+1′ 刻度值加 1,返回下一个整厘米刻度值.

zcl=3′因为一般主尺的第一条刻度线是zcl-3,而读数值小于6mm的第一条刻度线是零,故要给zcl重新赋值,根据算法推算为zcl=3.

Else

docActive.Shapes.AddLine(80+zczxfd*i,175,80+zczxfd*i,180).Select′ 画主尺刻度线.

End If Next

′画游标尺刻度线

n=0

If l<6 Then′ 通过以下算法返回游标尺零刻度线的位置.

ybl=zczxfd*(l+1)

Else

ybl=zczxfd*(l-Int(l)+4)

End If

For II=0 To ybcgs ′画游标尺的刻度线.

If II=5*n Then ′每 5格标一个格数值

n=n+1

docActive.Shapes.AddLine(80+ybl+ybzxfd*II,180,80+ybl+ybzxfd*II,187).Select

docActive.Shapes.AddTextbox (msoTextOrientationHorizontal,80+ybl+ybzxfd*II-2,188,15,10).Select

再利用TextFrame属性设置文本框的格式(代码略).

Selection.TypeText Text:=II

Else

docActive.Shapes.AddLine

(80+ybl+ybzxfd*II,180,80+ybl+ybzxfd*II,185).Select

End If

Next

With docActive.Shapes′ 画游标尺的边框.

AddLine(75+ybl,180,75+ybl,200).Select

AddLine(88+ybl+ybzxfd*ybcgs,180,88+ybl+ybzxfd*ybcgs,200).Select

AddLine(75+ybl,200,88+ybl+ybzxfd*ybcgs,200).Select

End With

绘制游标卡尺的效果如图1所示:

图1

4 结束语

利用vba编程能拓展office办公软件的功能和提升工作效率,提高教学质量.此代码也可移植到PPT中制作交互性很强的课件,也可仿照着绘制其他基本测量工具的读数练习,如螺旋测微器、电表读数等.

猜你喜欢
游标卡尺文本框刻度
巧用文本框实现PPT多图片排版
关于游标卡尺读数问题易错点的剖析
PPT文本框的另类应用
浅析游标卡尺的读数策略
欧姆表的刻度真的不均匀吗?
——一个解释欧姆表刻度不均匀的好方法
被吃掉刻度的尺子
谁大谁小
测量三字歌
文本框酷变3D效果
文本框在地理课件中的应用