改变对象的坐标系统

可用对象的刻度属性和 Scale 方法,设置特定对象(窗体或控件)的坐标系统。使用坐标系统有以下三种不同的方法:

改变坐标系统的刻度,使得在窗体上缩放图形和定位图形变得更容易。例如,一个在图片框里创建条形图的应用程序,能改变坐标系统,把控件分成四列,每列代表图表中的一条。以下部分,说明如何设置缺省、标准和自定义刻度,来改变坐标系统。

使用缺省刻度

每个窗体和图片框都有几个刻度属性(ScaleLeft、ScaleTopScaleWidthScaleHeight 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、ScaleTopScaleWidth 和 ScaleHeight 这些属性,来创建自定义刻度。与 Scale 方法不同,这些属性能用来设定刻度,或取得有关坐标系统当前刻度的详细信息。

使用 ScaleLeft 和 ScaleTop 属性

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 和 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 > x2y1 > y2 的值,与设置 ScaleWidth 或 ScaleHeight 为负值的效果相同。