Const DX = 3500 Const DY = 2300 Const PI = 3.1415926 Private Sub Form_Load() Label1.Visible = False Dim i As Integer Shape1.Visible = False Linem.X1 = DX Linem.Y1 = DY Lines.X1 = DX Lines.Y1 = DY Lineh.X1 = DX Lineh.Y1 = DY Shape1.Left = DX - 2000 Shape1.Top = DY - 2000 Shape1.Width = 4000 Shape1.Height = 4000 img_hwid = Image1(0).Width / 2 img_hheg = Image1(0).Height / 2 Form1.Refresh End Sub Private Sub Form_Paint() Dim i As Integer Form1.DrawWidth = 4 For i = 0 To 59 If (i Mod 5) = 0 Then Form1.DrawWidth = 7 Else Form1.DrawWidth = 4 End If Form1.PSet (DX + 2000 * Cos((i - 60) * 2 * PI / 60 - PI / 2), DY + 2000 * Sin((i - 60) * 2 * PI / 60 - PI / 2)) Next i End Sub Private Sub Timer1_Timer() Dim h As Integer, s As Integer, mm As Integer s = Second(Time) '秒 mm = Minute(Time) '分 h = Hour(Time) '时 If h >= 12 Then h = h - 12 Lineh.X2 = 800 * Cos((h - 12) * 2 * PI / 12 - PI / 2) + DX Lineh.Y2 = 800 * Sin((h - 12) * 2 * PI / 12 - PI / 2) + DY Lines.X2 = 1300 * Cos((s - 60) * 2 * PI / 60 - PI / 2) + DX Lines.Y2 = 1300 * Sin((s - 60) * 2 * PI / 60 - PI / 2) + DY Linem.X2 = 1000 * Cos((mm - 60) * 2 * PI / 60 - PI / 2) + DX Linem.Y2 = 1000 * Sin((mm - 60) * 2 * PI / 60 - PI / 2) + DY End Sub窗体上放一个shape控件,三个line控件,name属性见程序
程序类别:完整的VB程序
功 能:显示一个动画时钟,该时针随着每一秒而动态变化。 程序说明 1.如何画时钟表盘上的所有直线元素?
用Load命令建立原始Line控制的14个拷贝(因为表盘有12个点和时、分、秒共15个Line),该控制数组每一个实例的端点坐标属性设置为每条线在时钟表盘上的适当位置。这些拷贝中大多数只放置一次,而3个Line控制每秒钟更新一次,产生时钟指针移动的感觉。
注意:在应用程序代码中并没有直接擦除任何一条线。当我们改变每一个Line控制的端点时,每一根针在移动时擦除和重画的所有技术工作都由VB来处理。 2.如何修改时针的形状?
通过调整代码中的属性设置,可以改变时钟的形状。例如:通过改变每一个Line控制的Borderwidth属性设置,可以建立更细或更粗的线。 3.计时器的Interval(间距)属性设置
计时器的Interval属性设置为100,即为1/10秒。程序的编写与执行 (1)新建工程
先新建一个工程(工程类型为标准EXE),然后用“工具箱”中的工具加入一个Timer1(计时器)和line1(直线),其index(指针)分别设置为空和0。然后双击Form1窗体,输入源代码。 (2)程序源代码
Option Explicit
DefDbl A-Z
Private Sub Form_Load()
timer1.Interval = 100
Width = 4000
Height = 4000
Left = Screen.Width \ 2 - 2000
Top = (Screen.Height - Height) \ 2
End Sub
Private Sub Form_Resize()
Dim i, Angle
Static flag As Boolean
If flag = False Then
flag = True
For i = 0 To 14
’画出表盘12个点和时、分、秒共15个LINE
If i > 0 Then Load Line1(i)
Line1(i).Visible = True
Line1(i).BorderWidth = 5
Line1(i).BorderColor = RGB(0, 128, 0) ’设置LINE的粗细和颜色
Next i
End If
For i = 0 To 14
Scale (-1, 1)-(1, -1)
Angle = i * 2 * Atn(1) / 3
Line1(i).X1 = 0.9 * Cos(Angle)
Line1(i).Y1 = 0.9 * Sin(Angle)
Line1(i).X2 = Cos(Angle)
Line1(i).Y2 = Sin(Angle)
Next i
End Sub
Private Sub timer1_Timer()
Const HH = 0
Const MH = 13
Const SH = 14
Dim Angle
Static LS
If Second(Now) = LS Then Exit Sub
LS = Second(Now)
Angle = 0.5236 * (15 - (Hour(Now) + Minute(Now) / 60))’设置时针
Line1(HH).X1 = 0
Line1(HH).Y1 = 0
Line1(HH).X2 = 0.3 * Cos(Angle)
Line1(HH).Y2 = 0.3 * Sin(Angle)
Angle = 0.1047 * (75 - (Minute(Now) + Second(Now) / 60))’设置分针
Line1(MH).X1 = 0
Line1(MH).Y1 = 0
Line1(MH).X2 = 0.7 * Cos(Angle)
Line1(MH).Y2 = 0.7 * Sin(Angle)
Angle = 0.5236 * (75 - Second(Now))
’设置秒针
Line1(SH).X1 = 0
Line1(SH).Y1 = 0
Line1(SH).X2 = 0.8 * Cos(Angle)
Line1(SH).Y2 = 0.8 * Sin(Angle)
form1.Caption = Str(Now())
'窗口显示精确的日期和数字化的时间
End Sub (3)程序的编译和执行
点击VB“运行”菜单中的“启动”或“全面编译”命令,即可对程序编译并运行!
注:上述程序在中文Windows 98和 VB5.0中文企业版下调试通过。
修改以下为你需要的就能限制大小了
Left = Screen.Width \ 2 - 2000
Top = (Screen.Height - Height) \ 2
Const DY = 2300
Const PI = 3.1415926
Private Sub Form_Load()
Label1.Visible = False
Dim i As Integer
Shape1.Visible = False
Linem.X1 = DX
Linem.Y1 = DY
Lines.X1 = DX
Lines.Y1 = DY
Lineh.X1 = DX
Lineh.Y1 = DY
Shape1.Left = DX - 2000
Shape1.Top = DY - 2000
Shape1.Width = 4000
Shape1.Height = 4000
img_hwid = Image1(0).Width / 2
img_hheg = Image1(0).Height / 2
Form1.Refresh
End Sub
Private Sub Form_Paint()
Dim i As Integer
Form1.DrawWidth = 4
For i = 0 To 59
If (i Mod 5) = 0 Then
Form1.DrawWidth = 7
Else
Form1.DrawWidth = 4
End If
Form1.PSet (DX + 2000 * Cos((i - 60) * 2 * PI / 60 - PI / 2), DY + 2000 * Sin((i - 60) * 2 * PI / 60 - PI / 2))
Next i
End Sub
Private Sub Timer1_Timer()
Dim h As Integer, s As Integer, mm As Integer
s = Second(Time) '秒
mm = Minute(Time) '分
h = Hour(Time) '时
If h >= 12 Then h = h - 12
Lineh.X2 = 800 * Cos((h - 12) * 2 * PI / 12 - PI / 2) + DX
Lineh.Y2 = 800 * Sin((h - 12) * 2 * PI / 12 - PI / 2) + DY
Lines.X2 = 1300 * Cos((s - 60) * 2 * PI / 60 - PI / 2) + DX
Lines.Y2 = 1300 * Sin((s - 60) * 2 * PI / 60 - PI / 2) + DY
Linem.X2 = 1000 * Cos((mm - 60) * 2 * PI / 60 - PI / 2) + DX
Linem.Y2 = 1000 * Sin((mm - 60) * 2 * PI / 60 - PI / 2) + DY
End Sub窗体上放一个shape控件,三个line控件,name属性见程序
谢谢你的答案,不过调试的时候有点小问题,帮忙解答一下:
1. img_hwid = Image1(0).Width / 2
img_hheg = Image1(0).Height / 2 这两句出现问题,我也看不懂是什么意思
2. label1在此处是起什么作用?
程序中我删除了附加功能:(