可用对象的刻度属性和 Scale 方法,设置特定对象(窗体或控件)的坐标系统。使用坐标系统有以下三种不同的方法:
改变坐标系统的刻度,使得在窗体上缩放图形和定位图形变得更容易。例如,一个在图片框里创建条形图的应用程序,能改变坐标系统,把控件分成四列,每列代表图表中的一条。以下部分,说明如何设置缺省、标准和自定义刻度,来改变坐标系统。
每个窗体和图片框都有几个刻度属性(ScaleLeft、ScaleTop、ScaleWidth、ScaleHeight 和 ScaleMode)和一个方法(Scale),它们可用来定义坐标系统。对于 Visual Basic 中的对象,缺省刻度把坐标(0,0)放置在对象的左上角。缺省刻度单位为缇。
若要返回缺省刻度,可使用无参数的 Scale 方法。
若不直接定义单位,可通过设置 ScaleMode 属性,用标准刻度来定义它们。属性设置值见下表。
ScaleMode 设置值 | 描述 |
0 | 用户定义。若直接设置了 ScaleWidth、ScaleHeight、ScaleTop 或 ScaleLeft,则 ScaleMode 属性自动设为 0。 |
1 | 缇。这是缺省刻度。1,440 缇等于一英寸。 |
2 | 磅。72 磅等于一英寸。 |
3 | 像素。像素是监视器或打印机分辨率的最小单位。每英寸里像素的数目由设备的分辨率决定。 |
4 | 字符。打印时,一个字符有 1/6 英寸高、1/12 英寸宽。 |
5 | 英寸。 |
6 | 毫米。 |
7 | 厘米。 |
除了 0 和 3,表中的所有模式都是打印长度。例如,一个对象长为两个单位,当 ScaleMode 设为 7 时,打印时就是两厘米长。
'
设该窗体的刻度单位为英寸。ScaleMode = 5
'
设picPicture1
的刻度单位为像素。picPicture1.ScaleMode = 3
设置 ScaleMode Screen 的值后,Visual Basic 会重定义 ScaleWidth 和 ScaleHeight,使它们与新刻度保持一致。然后,ScaleTop 和 ScaleLeft 设置为 0。直接设置 ScaleWidth、ScaleHeight、ScaleTop 或 ScaleLeft,将自动设置 ScaleMode 为 0。
可使用对象的 ScaleLeft、ScaleTop、ScaleWidth 和 ScaleHeight 这些属性,来创建自定义刻度。与 Scale 方法不同,这些属性能用来设定刻度,或取得有关坐标系统当前刻度的详细信息。
ScaleLeft 和 ScaleTop 属性,用来给对象指定左上角的数字值。例如,这些语句给当前窗体的左上角,和名为 picArena 图片框的左上角设定数值。
ScaleLeft = 100
ScaleTop = 100
picArena.ScaleLeft = 100
picArena.ScaleTop = 100
这些刻度值显示在图 12.4 中。
图 12.4 窗体和控件的 ScaleLeft 和 ScaleTop 属性
这些语句定义左上角为(100,100)。虽然这些语句不直接改变那些对象的大小或位置,但它们改变其后一些语句的作用。例如,其后的一条设置控件 Top 属性为 100 的语句,将把对象置于它的容器的最上端。
ScaleWidth 和 ScaleHeight 属性,将根据绘图区的当前宽度和高度定义单位。例如:
ScaleWidth = 1000
ScaleHeight = 500
这些语句定义的是,当前窗体内部宽度的 1/1,000 为水平单位;当前窗体内部高度的 1/500 为垂直单位。如果窗体的大小以后被调整,这些单位保持原状。
注意 ScaleWidth 和 ScaleHeight 是按照对象的内部尺寸来定义单位的,这些尺寸不包括边框厚度或菜单(或标题)的高度。因此,ScaleWidth 和 ScaleHeight 总是指对象内的可用空间的大小。内部尺寸和外部尺寸(尺寸由 Width 和 Height 指定)的区别,对于有宽厚边框的窗体特别重要。这些单位也可不同:Width 和 Height 总是按照容器的坐标系统来表示;ScaleWidth 和
ScaleHeight 决定了对象本身的坐标系统。
所有的四个刻度属性,都可包括分数,也可是负数。对于 ScaleWidth 和 ScaleHeight 属性,设置值为负数则改变坐标系统的方向。
图 12.5 中所示的刻度,有 ScaleLeft、ScaleTop、ScaleWidth 和 Scale Height,都设置为 100。
图 12.5 刻度从(100,100)变化到(200,200)
一个更有效的改变坐标系统的途径,不是设置个别属性,而是使用 Scale 方法。可使用下述的语法,指定自定义刻度:
[object.]Scale (x1, y1) – (x2, y2)
x1 和 y1 的值,决定了 ScaleLeft 和 ScaleTop 属性的设置值。两个 x-坐标之间的差值和两个 y-坐标之间的差值,分别决定了 ScaleWidth 和 ScaleHeight 属性的设置值。例如,假定要为一窗体设置坐标系统,而将两个端点设置为(100,100)和(200,200):
Scale (100, 100)-(200, 200)
该语句定义窗体为 100 单位宽和 100 单位高。用该刻度,下述语句将一个形状控件移动窗体宽度行程的五分之一:
shpMover.Left = shpMover.Left + 20
指定 x1 > x2 或 y1 > y2 的值,与设置 ScaleWidth 或 ScaleHeight 为负值的效果相同。