| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 690 人关注过本帖, 2 人收藏
标题:很详细的时钟程序(使用line控件手画表盘表针)
只看楼主 加入收藏
水到渠成VB
Rank: 1
来 自:黑龙江
等 级:新手上路
帖 子:21
专家分:5
注 册:2013-9-24
结帖率:50%
收藏(2)
已结贴  问题点数:20 回复次数:7 
很详细的时钟程序(使用line控件手画表盘表针)
Option Explicit
'Line3 表示时针
'Line1(1) 表示分针(长度960)
'Line2 表示秒针(长度1200)
'Timer 定时器周期1s
'Label2 标签显示当前系统时间
Dim xx1 As Integer '表盘圆心坐标
Dim yy1 As Integer
Dim MyTime, MyHour, MyMinute, MySecond As Integer '定义当前时间,时,分,秒
Dim S_ang, M_ang, H_ang As Single '定义角度变量
Dim S_rad, M_rad, H_rad As Single '定义弧度变量
Dim S_Length, M_Length, H_Length As Integer '定义表针长度变量
Private Sub Form_Load()
xx1 = 2280  '由属性确定圆心坐标
yy1 = 1920
Line3.X1 = xx1  '校准表盘坐标原点
Line3.Y1 = yy1
Line1(1).X1 = xx1
Line1(1).Y1 = yy1
Line2.X1 = xx1
Line2.Y1 = yy1
MyTime = Now  '暂存当前时间值
MySecond = Second(MyTime)  '读取秒
MyMinute = Minute(MyTime)  '读取分
MyHour = Hour(MyTime)      '读取时
M_ang = MyMinute * 6       '任意一点分针角度
M_rad = (3.14 / 180) * M_ang
H_ang = MyHour * 30         '任意一点时针角度
H_rad = (3.14 / 180) * H_ang
Line1(1).X2 = Line1(1).X1 + (960 * Sin(M_rad))     '计算X2,Y2转动坐标 (以单位圆Y轴为0度)
Line1(1).Y2 = Line1(1).Y1 - (960 * Cos(M_rad))
Line3.X2 = Line3.X1 + (720 * Sin(H_rad))     '计算X2,Y2转动坐标 (以单位圆Y轴为0度)
Line3.Y2 = Line3.Y1 - (720 * Cos(H_rad))
End Sub
Private Sub Timer1_Timer()
Label2.Caption = Now
MyTime = Now  '暂存当前时间值
MySecond = Second(MyTime)  '读取秒
Label15.Caption = MySecond
MyMinute = Minute(MyTime)  '读取分
Label18.Caption = MyMinute
MyHour = Hour(MyTime)      '读取时
Label20.Caption = MyHour
S_ang = MySecond * 6       '任意一点秒针角度
M_ang = MyMinute * 6       '任意一点分针角度
M_rad = (3.14 / 180) * M_ang
H_ang = MyHour * 30         '任意一点时针角度
H_rad = (3.14 / 180) * H_ang
S_rad = (3.14 / 180) * S_ang
Line2.X2 = Line2.X1 + (1200 * Sin(S_rad)) '计算X2,Y2转动坐标 (以单位圆Y轴为0度)
Line2.Y2 = Line2.Y1 - (1200 * Cos(S_rad))
If MySecond = 59 Then
Line1(1).X2 = Line1(1).X1 + (960 * Sin(M_rad))     '计算X2,Y2转动坐标 (以单位圆Y轴为0度)
Line1(1).Y2 = Line1(1).Y1 - (960 * Cos(M_rad))
ElseIf MyMinute = 59 Then
Line3.X2 = Line3.X1 + (720 * Sin(H_rad))     '计算X2,Y2转动坐标 (以单位圆Y轴为0度)
Line3.Y2 = Line3.Y1 - (720 * Cos(H_rad))
End If
End Sub
请看到的朋友们,挑毛病找缺陷。
搜索更多相关主题的帖子: 定时器 标签 
2014-02-10 11:09
Artless
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:4211
专家分:28888
注 册:2009-4-8
收藏
得分:20 
结帖率:0

无知
2014-02-10 12:03
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
网速有问题,刷新后重复发内容了。

[ 本帖最后由 lowxiong 于 2014-2-10 23:07 编辑 ]
2014-02-10 22:58
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
怎么的也应该画个表盘吧,把有类似运算的用函数调用完成,可减少很多代码,你的时针和分针应计算到小数部分,否则时针会一下跳30度,没有中间值(比如10:30,你的时针仍然指在10点,而不是在10至11点之间,分针亦如此),看我的代码,直接用画线命令写的,应该比你的精细些(新建一工程,添加一个timer控件,拷贝下列代码即可)。
图片附件: 游客没有浏览图片的权限,请 登录注册


Dim iOx As Integer, iOy As Integer    '原点坐标
Dim iOr As Single                     '秒钟长

Private Sub DrawLine(iRadiu As Single, iDeg As Single, iLen As Single, iThin As Integer, iColor As Long)
  '围绕原点画指定长度、粗细、颜色的线
  Dim j As Single, x1 As Single, y1 As Single, x2 As Single, y2 As Single
  j = 3.1415926 * iDeg / 180 '转化为弧度
  x1 = iOx + iRadiu * Sin(j): y1 = iOy - iRadiu * Cos(j)
  If iLen > 0 Then
    x2 = iOx + (iRadiu - iLen) * Sin(j): y2 = iOy - (iRadiu - iLen) * Cos(j)
  Else
    x2 = iOx + iLen * Sin(j): y2 = iOy - iLen * Cos(j)
  End If
  Me.DrawWidth = iThin
  Me.Line (x1, y1)-(x2, y2), iColor
End Sub

Private Sub Form_Load()
  Me.AutoRedraw = True
  Timer1.Interval = 1000
  iOx = Me.ScaleWidth * 0.5
  iOy = Me.ScaleHeight * 0.5
  iOr = iOy * 0.7                '根据窗口大小自动计算原点坐标和时钟半径
End Sub

Private Sub Timer1_Timer()
  Dim d As Date, s As Single, m As Single, h As Single, i As Single
  d = Time
  s = Second(d)
  m = Minute(d) + s / 60
  h = Hour(d) + m / 60
  If h > 12 Then h = h - 12
  Me.Cls
  For i = 0 To 359 Step 6
    '画表盘
    DrawLine iOr, i, 60, 2, vbBlack
    If i Mod 5 = 0 Then DrawLine iOr, i, 90, 4, vbBlue
  Next
  DrawLine iOr * 0.65, h * 30, iOr * 0.65, 6, vbRed
  DrawLine iOr * 0.85, m * 6, iOr * 0.85, 4, vbGreen
  DrawLine iOr, s * 6, -300, 2, vbBlue
  Me.Circle (iOx, iOy), 60
End Sub
2014-02-10 23:04
vbvcr51
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:18
帖 子:364
专家分:1724
注 册:2013-11-3
收藏
得分:0 
这个东懂关键是指针角度的计算问题。
2014-02-11 16:22
水到渠成VB
Rank: 1
来 自:黑龙江
等 级:新手上路
帖 子:21
专家分:5
注 册:2013-9-24
收藏
得分:0 
回复 5楼 vbvcr51
恩,对的。就是三角函数。
2014-02-14 11:42
水到渠成VB
Rank: 1
来 自:黑龙江
等 级:新手上路
帖 子:21
专家分:5
注 册:2013-9-24
收藏
得分:0 
回复 4楼 lowxiong
不错,做的的确很精细。向您学习了。
确实我没做您说的小数问题
以后有问题可以常常交流。
2014-02-14 11:45
水到渠成VB
Rank: 1
来 自:黑龙江
等 级:新手上路
帖 子:21
专家分:5
注 册:2013-9-24
收藏
得分:0 
回复 7楼 水到渠成VB
追加说明:
这个表实际上是有表盘的,只不过我用的是Line控件和shape控件,手工画的。确实不够好看。
2014-02-14 11:53
快速回复:很详细的时钟程序(使用line控件手画表盘表针)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047504 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved