10.3.1 坐标系
每个对象都定位于存放它的容器内
每个容器都有一个坐标系,它包括坐标原点, x 坐标轴和 y 坐标轴,默认的坐标原点 (0,0) 在容器对象的左上角
默认单位为 Twip( 缇 ) ,还可以使用磅、像素、厘米等单位
10.3.2 图形方法
使用 Pset( 画点 ) 、 Line( 画线 ) 、 Circle( 画圆 ) 等图形方法,可以在窗体和图片框上绘制简单的图形
1. Pset( 画点 ) 方法
格式: [ 对象名 .] Pset [Step](x,y)[, 颜色 ]
功能:在对象的指定位置 (x,y) 上按选定的颜色画点
示例:下列语句能在坐标位置 (500 , 900) 处画一个红点:
Pset (500,900) , RGB(255,0,0)
2. Line( 画线 ) 方法
格式: [ 对象名 .] Line [(x1,y1)]-(x2,y2)[, 颜色 ]
功能:在两个坐标点之间画一条线段。
例如,下列语句可在窗体上画一条斜线
Line (600,600)-(2000,3000)
3. Circle( 画圆 ) 方法
格式: [ 对象名 .] Circle [Step](x,y) ,半径 [ ,颜色,起点,终点,纵横比 ]
功能:在对象上画圆、椭圆或圆弧
10.3.3 图片框 (PictureBox)
图片框 (PictureBox) 和图像框 (Image) 都是用于显示图形。图片框可以作为其他控件的容器。
示例
Private Sub Form_Load()
Show
Picture1.Print " 在图片框内写字和画圆 "
Picture1.Circle(1200, 1000), 600, RGB(0, 0, 255)
Picture1.PSet(1200, 1000), RGB(255, 0, 0)
End Sub

10.3.4 图像框 (Image)
图像框 (Image) 控件的作用与图片框 PictureBox 控件相似,但它只能用于显示图形,不能作为其他控件的容器。
10.3.5 Shape 形状控件
VB 提供了画图形的基本工具,如 Shape( 形状控件 ) 、 Line( 线控件 ) 。 Shape 控件和 Line 控件只用于表面装饰,不支持任何事件
Shape 控件画出矩形、正方形、圆形等图形。
10.3.6 Line 直线控件
Line 直线控件可用来在窗体、框架和图片框中绘制简单的线段。
例 10.4 设计一个走动的时钟
(1) 分析:本例分别以 Second 、 Minite 和 Hour 函数取得系统时间 Time 的秒、分和时数,再利用计时器控件,按一定时间间隔把时间数转换为图形指针位置和显示出来
(2) 创建应用程序的用户界面
计时器 (Timer1) ,形状控件 (Shape1) ,三条线控件 (LineS, LineM, LineH) ,四个标签 ( 表示数字 )
(3) 设置对象属性
Timer1 的 Interval 属性为 1000(1 秒 )
Shape1 的 Shape 属性为 3-Circle( 圆形 ) , FillStyle 属性为 0-Solid( 实心 )
LineS, LineM, LineH 的 BorderWidth 属性为 1 , 2 , 4
(4) 编写程序代码
Option Explicit ‘ 规定所有变量都要显式声明,见 10.9.1 节
Const pi = 3.14159
Private len_S As Single, len_M As Single, len_H As Single
Private Sub Form_Load() ‘ 先取各指针的长度
len_S = Sqr((LineS.Y2 - LineS.Y1) ^ 2 + (LineS.X2 - LineS.X1) ^ 2)
' 秒针长度
len_M = Sqr((LineM.Y2 - LineM.Y1) ^ 2 + (LineM.X2 - LineM.X1) ^ 2) ' 分针长度
len_H = Sqr((LineH.Y2 - LineH.Y1) ^ 2 + (LineH.X2 - LineH.X1) ^ 2)
' 时针长度
Call Timer1_Timer
End Sub
Private Sub Timer1_Timer() ' 定时器的定时事件过程
Dim s As Single, m As Single, h As Single
Form1.Caption = Time
s = Second(Time)
m = Minute(Time)
h = Hour(Time) + m / 60
LineS.X2 = LineS.X1 + len_S * Sin(pi * s / 30) ' 绘制秒针
LineS.Y2 = LineS.Y1 - len_S * Cos(pi * s / 30)
LineM.X2 = LineM.X1 + len_M * Sin(pi * m / 30)
' 绘制分针
LineM.Y2 = LineM.Y1 - len_M * Cos(pi * m / 30)
If h >= 12 Then h = h - 12
LineH.X2 = LineH.X1 + len_H * Sin(pi * h / 6)
' 绘制时针
LineH.Y2 = LineH.Y1 - len_H * Cos(pi * h / 6)
End Sub
计算指针位置的方法
s 秒 /60 秒 = K / 2 π
K = 2 π s / 60 = π s / 30
x2 = x1 + x = x1 + L * Cos( π /2 – K ) = x1 + L * SinK
LineM.X2 = LineM.X1 + Len_s * Sin(PI * s / 30) |