标题:[求助]关于griefforyou发的时钟有些不懂,请帮帮我。
只看楼主
kenan
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-4-13
 问题点数:0 回复次数:3 
[求助]关于griefforyou发的时钟有些不懂,请帮帮我。
R = IIf(BaseX > BaseY, BaseY * 0.8, BaseX * 0.8) 算出来的R是表示什么呀?后面为什么还要算r1,r2,r3呢?BaseX与BaseY又是表示什么呢?我是新手,希望好心人给我解释一下上面的问题。
搜索更多相关主题的帖子: 时钟 griefforyou 
2005-07-24 02:21
kenan
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-4-13
得分:0 
怎么没人帮我呀!!!我把他写的程序再贴一下。 '///////////////////////////////// '小闹钟示例 'Written By griefforyou '在窗体中添加一个Timer控件,将Interval设为1000以下。 '//////////////////////////////// Option Explicit

Const PI = 3.1415926 Dim BaseX As Integer, BaseY As Integer, R As Integer Dim r1 As Integer, r2 As Integer, r3 As Integer

Private Sub Form_Load() Me.ScaleMode = 3 Me.AutoRedraw = True If Me.Width < 3000 Then Me.Width = 3000 If Me.Height < 3000 Then Me.Height = 3000 End Sub

Private Sub Init() Dim i As Integer

BaseX = Me.ScaleWidth / 2 BaseY = Me.ScaleHeight / 2 R = IIf(BaseX > BaseY, BaseY * 0.8, BaseY * 0.8) r1 = R * 0.2 r2 = R * 0.1 r3 = R * 0.05

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

'绘制指针 Private Sub DrawClock() Dim Second As Integer Dim Minute As Integer Dim Hours As Integer

Second = DatePart("s", Time) Minute = DatePart("n", Time) Hours = DatePart("h", Time) If Hours > 12 Then Hours = Hours - 12 End If

Me.DrawWidth = 1 Me.Circle (BaseX, BaseY), 4

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

'画线函数 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

Private Sub Form_Resize() Me.Cls Call Init End Sub

Private Sub Timer1_Timer() Call DrawClock End Sub


2005-07-24 11:21
griefforyou
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:3336
专家分:0
注 册:2004-4-15
得分:0 

天津网站建设 http://www./
2005-07-24 15:53
griefforyou
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:3336
专家分:0
注 册:2004-4-15
得分:0 
    BaseX = Me.ScaleWidth / 2         
    BaseY = Me.ScaleHeight / 2

BaseX和BaseY就是窗体横、纵方向的中点。

R = IIf(BaseX &gt; BaseY, BaseY * 0.8, BaseX * 0.8) 取窗体长、宽一半中小的那个的80%做为钟的直径。

[此贴子已经被作者于2005-7-24 15:58:13编辑过]



天津网站建设 http://www./
2005-07-24 15:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-23507-1-1.html




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

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