注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

追寻梦想的路上

人生如代码,代码如人生

 
 
 

日志

 
 
 
 

时钟制作———1,6跑哪里去了?  

2014-01-27 18:01:18|  分类: 技术篇 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
昨天晚上就开始看时钟制作的视频了(没有声音,只能看图片时钟制作———1,6跑哪里去了? - 王海鹏 - 王海鹏廊坊师范学院信息技术提高班11期),视频代码不清楚,就把有代码的那部分截了几张图,边从网上下资料边看着截图理解其大概意思了。
哎,整整搞了一天,这个表终于可以看过眼了!以下是比较正确的代码!
Option Explicit      ‘自定义圆心xx1,yy1 ,半径以及常量3.1415926……
  Dim xx1 As Long
  Dim yy1 As Long
  Dim r As Long
  Const pi = 3.1415926
Private Sub drawbiaopan()   '定义一个可以将1——12的数字围绕一圈的过程
   '需要注意将label数组放置在frame之上
   
    Dim i As Integer
    Dim X As Long                                                                时钟制作———1,6跑哪里去了? - 王海鹏 - 王海鹏廊坊师范学院信息技术提高班11期
 
    Dim Y As Long
    Dim a As Long
    For i = 1 To 12
        a = 90 - i * 30 
        X = xx1 + r * Cos((a / 180) * pi)
        Y = yy1 - r * Sin((a / 180) * pi)                        
        Label1(i - 1).Caption = i
        Label1(i - 1).Move X, Y
        Label1(i - 1).Visible = True
    Next i
    
End Sub

Private Sub Command1_Click()
    
    Timer1.Enabled = True
    
End Sub

Private Sub Form_Load()
    '确定圆心的位置和半径的值,并将三条线的起点放置在圆心位置上
    xx1 = Shapbiaopan.Width / 2 + Shapbiaopan.Left
    yy1 = Shapbiaopan.Top + Shapbiaopan.Height / 2
    r = Shapbiaopan.Width / 2
    Call drawbiaopan
    Linhour.X1 = xx1
    Linhour.Y1 = yy1
    Linminut.X1 = xx1
    Linminut.Y1 = yy1
    Linsecond.X1 = xx1
    Linsecond.Y1 = yy1
    
End Sub

Private Sub Timer1_Timer()    '此处仅是考虑数学问题
    
    Label2.Caption = Time
    Dim duhour As Double, duminut As Double, dusecond As Double
    dusecond = Second(Time) * 6 * pi / 180    '秒针一次走6度,此处换算成弧度角
    Linsecond.X2 = xx1 + (r - 200) * Sin(dusecond)
    Linsecond.Y2 = yy1 - (r - 200) * Cos(dusecond)
    
    duminut = (Minute(Time) * 6 + dusecond / 60) * pi / 180
    '分针每个格代表六度,需要注意的是将秒针加入——秒针每走一秒分针只是走了一格的1、60
    Linminut.X2 = xx1 + (r - 500) * Sin(duminut)
    Linminut.Y2 = yy1 - (r - 500) * Cos(duminut)
    
    duhour = (Hour(Time) * 30 + duminut / 12) * pi / 180
    '时针没走一格代表30度,分针没转一圈时针转12格
    Linhour.X2 = xx1 + (r - 2000) * Sin(duhour)
    Linhour.Y2 = yy1 - (r - 2000) * Cos(duhour)
       
End Sub
为啥说比较成功呢,最起码它可以走,尽管说不是很好看,控制按钮的功能没有视频上那个多,由于已经迫不及待想把这个成果分享给大家就只好先将就以下了!
在操作的过程中遇到了好多问题呢,比方说刚开始我只是查阅网上的资料制成一个不带表盘的,其中我学会了时针分针,秒针的起点终点的设定!而后就开始思考表盘的制作,刚开始由于没有仔细观察将label数组放于窗体上,结果设计过程中就无法识别了,问了同学后才猛然发现原来是将这个数组放在frame控件上的!结果问题还是没有解决,在 我运行时只是出现label1(0)和label(1)的值,经过好长时间的思想斗争终于发现按着ctrl+V进行的粘贴只有一部分落在frame控件之上,大部分都背frame覆盖了!哎,不得不把frame控件拉大,然后右击一个一个粘贴才将其全部复制下来!
哎!问题滚滚而至!本来以为大功告成的我一看运行又傻了!怎么缺了俩值?我的1和6跑哪里去了?时钟制作———1,6跑哪里去了? - 王海鹏 - 王海鹏廊坊师范学院信息技术提高班11期
 纠结了一下午,实在不知道原因了,就在上面的定义的sub  private  drawbiaopan()过程结尾for 循环语句结束后添加了这样一个神奇的语句label1(0).caption=1234545566,结果运行时这个藏起来的caption漏出来一个小尾巴5566,(恩?怎么突然像一个网站的名字?)由于太兴奋了,忘记截图了!对不住大家了啊!哈哈,终于让我明白了!我画的这个圆太小了,结果那个label的边框将1和6覆盖了(怎么突然发现vb编程覆盖问题太猖獗了)想想也是,12的边框跟1 挨得这么近,不盖住才怪呢!还有咱们倒霉的6 ,落后于人家就看不到人影喽!
解决这两个问题,基本上没有什么大问题了,我再讲昨天学习的内容与今天的表盘制作合兵一处,就创造了上面最开始的例子!不过需要提醒的是x,y坐标的问题!有时本来x坐标需要设定是sin()值的,跟y的cos()搞混了,就出现钟表倒着走,数字逆时针增大的现象了,一般实在翻不清结果你看到是这种情况,那就将x坐标用cos()计算,y坐标用sin()计算。此外还有一些瑕疵我没有搞太清楚:看最初那张图,数字有的显示在圆圈的外边,有的显示在里面,问题就出在代码爆红那条语句!尽管跟视频上那条不一样,但是作用我认为是相同的,如果强行添加if条件语句进行修改的话问题应该是能够解决,只能够根据偏移量自行判断,未免太不精确,欢迎大家各抒己见,共同将问题解决!
  评论这张
 
阅读(54)| 评论(32)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017