griefforyou 发表于 2005-5-13 17:11

用VB编写简单的时钟程序(有时、分、秒针转动)

<P><a href="http://bbs.bc-cn.net/bbs/showimg.asp?BoardID=6&amp;filename=2005-5/200551311597551.gif" target="_blank" ><IMG src="http://bbs.bc-cn.net/bbs/showimg.asp?BoardID=6&amp;filename=2005-5/200551311597551.gif" border=0></A>

'/////////////////////////////////
'小闹钟示例
'Written By griefforyou
'在窗体中添加一个Timer控件,将Interval设为1000以下。
'////////////////////////////////

Option Explicit
</P>
<P>Const PI = 3.1415926
Dim BaseX As Integer, BaseY As Integer, R As Integer
Dim r1 As Integer, r2 As Integer, r3 As Integer</P>
<P>Private Sub Form_Load()
    Me.ScaleMode = 3
    Me.AutoRedraw = True
   
    If Me.Width &lt; 3000 Then Me.Width = 3000
    If Me.Height &lt; 3000 Then Me.Height = 3000
   
End Sub</P>
<P>Private Sub Init()
Dim i As Integer</P>
<P>    BaseX = Me.ScaleWidth / 2
    BaseY = Me.ScaleHeight / 2
   
    R = IIf(BaseX &gt; BaseY, BaseY * 0.8, BaseY * 0.8)
    r1 = R * 0.2
    r2 = R * 0.1
    r3 = R * 0.05</P>
<P>    For i = 0 To 360 Step 6
        
        If i Mod 30 = 0 Then    '时
            Me.DrawWidth = 2
            DrawLine BaseX + (R - 3) * Sin(i * PI / 180), BaseY - (R - 3) * Cos(i * PI / 180), BaseX + (R - 8) * Sin(i * PI / 180), BaseY - (R - 8) * Cos(i * PI / 180), 3
        Else                    '分
            Me.DrawWidth = 2
            Me.PSet (BaseX + (R - 3) * Sin(i * PI / 180), BaseY - (R - 3) * Cos(i * PI / 180))
        End If
    Next
   
    Me.DrawWidth = 1
    Me.Circle (BaseX, BaseY), R
End Sub</P>
<P>'绘制指针
Private Sub DrawClock()
Dim Second As Integer
Dim Minute As Integer
Dim Hours As Integer</P>
<P>    Second = DatePart("s", Time)
    Minute = DatePart("n", Time)
    Hours = DatePart("h", Time)
    If Hours &gt; 12 Then
        Hours = Hours - 12
    End If</P>
<P>    Me.DrawWidth = 1
    Me.Circle (BaseX, BaseY), 4</P>
<P>    DrawLine BaseX - r1 * Sin(Second * PI / 30), BaseY + r1 * Cos(Second * PI / 30), BaseX + (R - 10) * Sin(Second * PI / 30), BaseY - (R - 10) * Cos(Second * PI / 30), 0
    DrawLine BaseX - r2 * Sin(Minute * PI / 30), BaseY + r2 * Cos(Minute * PI / 30), BaseX + R * 0.8 * Sin(Minute * PI / 30), BaseY - R * 0.8 * Cos(Minute * PI / 30), 1
    DrawLine BaseX - r3 * Sin((Hours + Minute / 60) * PI / 6), BaseY + r3 * Cos((Hours + Minute / 60) * PI / 6), BaseX + R * 0.6 * Sin((Hours + Minute / 60) * PI / 6), BaseY - R * 0.6 * Cos((Hours + Minute / 60) * PI / 6), 2
End Sub</P>
<P>'画线函数
Private Sub DrawLine(x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer, Flag As Integer)
Static OldSX1 As Integer, OldSX2 As Integer, OldSY1 As Integer, OldSY2 As Integer
Static OldMX1 As Integer, OldMX2 As Integer, OldMY1 As Integer, OldMY2 As Integer
Static OldHX1 As Integer, OldHX2 As Integer, OldHY1 As Integer, OldHY2 As Integer
    Select Case Flag
        Case 0
            Me.DrawWidth = 1
            Me.Line (OldSX1, OldSY1)-(OldSX2, OldSY2), Me.BackColor
            Me.Line (x1, y1)-(x2, y2)
            OldSX1 = x1
            OldSX2 = x2
            OldSY1 = y1
            OldSY2 = y2
        Case 1
            Me.DrawWidth = 2
            Me.Line (OldMX1, OldMY1)-(OldMX2, OldMY2), Me.BackColor
            Me.Line (x1, y1)-(x2, y2)
            OldMX1 = x1
            OldMX2 = x2
            OldMY1 = y1
            OldMY2 = y2
        Case 2
            Me.DrawWidth = 3
            Me.Line (OldHX1, OldHY1)-(OldHX2, OldHY2), Me.BackColor
            Me.Line (x1, y1)-(x2, y2)
            OldHX1 = x1
            OldHX2 = x2
            OldHY1 = y1
            OldHY2 = y2
        Case Else
            Me.Line (x1, y1)-(x2, y2)
    End Select
End Sub</P>
<P>Private Sub Form_Resize()
    Me.Cls
    Call Init
End Sub</P>
<P>Private Sub Timer1_Timer()
    Call DrawClock
End Sub</P>
[align=right][color=#000066][此贴子已经被作者于2005-5-13 17:15:57编辑过][/color][/align]

ruijian1227 发表于 2005-5-13 23:40

斑竹强

天际流星 发表于 2005-5-14 12:32

佩服!!

萧凡 发表于 2005-5-15 13:43

复制下来了

lingling00 发表于 2005-5-16 18:25

<P>我也做了一个时钟,界面是用shape画了一个圆,再画上时针、分针和秒针线。可是出了一个问题,显示时间和系统时间不一致,不知道怎么改?请<FONT color=#990000><b>griefforyou</b></FONT><FONT color=#000000 size=3>帮我看看。
程序如下:
<FONT size=2>Option Explicit
Const PI = 3.14159
Private len_S As Single, len_M As Single, len_H As Single</FONT></FONT></P><P><FONT color=#000000 size=2>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</FONT></P><P><FONT color=#000000 size=3><FONT size=2>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 * Cos(PI * s / 30)
    LineS.Y2 = LineS.Y1 + len_S * Sin(PI * s / 30)
    LineM.X2 = LineM.X1 + len_M * Cos(PI * m / 30)
    LineM.Y2 = LineM.Y1 + len_M * Sin(PI * m / 30)
    If h &gt;= 12 Then h = h - 12
    LineH.X2 = LineH.X1 + len_H * Cos(PI * h / 6)
    LineH.Y2 = LineH.Y1 + len_H * Sin(PI * h / 6)
End Sub


</FONT></P></FONT>

lingling00 发表于 2005-5-16 19:40

<b><FONT color=#990000>griefforyou,你是天津红桥区的吗?我是天津河东区的。</FONT></b>

griefforyou 发表于 2005-5-18 23:10

<P>把加减号弄反了,Sin Cos也弄反了。。。
我也是河东。

Option Explicit
Const PI = 3.14159
Private len_S As Single, len_M As Single, len_H As Single</P>
<P>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</P>
<P>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 <FONT color=#ff0000>+</FONT> len_S * <FONT color=#ff0000>Sin</FONT>(PI * s / 30)
    LineS.y2 = LineS.y1 <FONT color=#ff0000>-</FONT> len_S * <FONT color=#ff0000>Cos</FONT>(PI * s / 30)
    LineM.x2 = LineM.x1 <FONT color=#ff0000>+</FONT> len_M * <FONT color=#ff0000>Sin</FONT>(PI * m / 30)
    LineM.y2 = LineM.y1 <FONT color=#ff0000>-</FONT> len_M * <FONT color=#ff0000>Cos</FONT>(PI * m / 30)
    If h &gt;= 12 Then h = h - 12
    LineH.x2 = LineH.x1 <FONT color=#ff0000>+</FONT> len_H * <FONT color=#ff0000>Sin</FONT>(PI * h / 6)
    LineH.y2 = LineH.y1 <FONT color=#ff0000>-</FONT> len_H * <FONT color=#ff0000>Cos</FONT>(PI * h / 6)
End Sub</P>
[align=right][color=#000066][此贴子已经被作者于2005-5-18 23:12:59编辑过][/color][/align]

黄鹂 发表于 2005-5-19 10:46

我复制了下来 但看不了时 分 秒针  为什么啊?

天际流星 发表于 2005-5-19 11:32

指针是画出来的!!
我是红桥区的!!有QQ吗联系呀!!!
[align=right][color=#000066][此贴子已经被作者于2005-5-19 11:36:23编辑过][/color][/align]

griefforyou 发表于 2005-5-19 13:05

你添加了一个Timer控件并设置Interval属性为500吗?

griefforyou 发表于 2005-5-19 13:12

<DIV class=quote><B>以下是引用<U>天际流星</U>在2005-5-19 11:32:29的发言:</B>
我是红桥区的!!有QQ吗联系呀!!!
</DIV>
你眼睛一定很小。
[attach]2143[/attach]

84009030 发表于 2005-5-19 17:19

我试试看`

xingmu1984 发表于 2005-5-20 10:45

顶!
复制了!

ytm2004 发表于 2005-5-21 12:11

[IMG]http://ytm2004.go2.icpcn.com/clock.gif[/IMG]

这个钟怎样?

lingling00 发表于 2005-5-21 14:26

<b><FONT color=#990000>griefforyou</FONT><FONT color=#000000>,谢谢你!我太笨了,这么简单的问题,竟然没发现。我是天津工业大学的学生。</FONT></b>

langmandewen 发表于 2005-5-21 15:04

呵呵
做的不错,
有空我也做个!!

谢谢griefforyou

风霜雪竹 发表于 2005-5-27 08:19

我是初学者,看不懂啊

dkp88 发表于 2005-5-28 22:11

好棒~~~~~~~~~~~~学习!·#¥%……—*()^o^

sfg976 发表于 2005-6-16 17:39

NO

yalison 发表于 2005-7-4 16:44

如果把窗体背景色改为黑色,指针变为紫罗蓝色,代码稍微再添加一些,再编译成scr文件,那就可以做屏保了。。。。

页: [1] 2 3 4 5 6 7

编程论坛