就
網(wǎng)站建設、基于H5技術技術的Web開發(fā)、手機站開發(fā)、微信開發(fā)等互聯(lián)網(wǎng)應用服務。成都創(chuàng)新互聯(lián)公司始終關注著互聯(lián)網(wǎng)行業(yè)的前沿動態(tài),創(chuàng)新互聯(lián)堅信:真誠的態(tài)度,勤奮的工作是我們贏得客戶信賴的基礎;而不斷創(chuàng)新、力求完美,才是創(chuàng)新互聯(lián)共同邁向美好未來的保證。
是
這
個
了
!
Hand類的代碼:
Public MustInherit Class Hand
Protected gp As GraphicsPath = New GraphicsPath()
Protected gpBase As GraphicsPath = Nothing
Protected midX As Integer = 150 ‘默認的窗體
Protected midY As Integer = 150 ‘中心位置
‘構造器,得到窗體中心位置
Public Sub New(ByVal theForm As Form1)
midX = (theForm.ClientRectangle.Left + theForm.ClientRectangle.Right) / 2
midY = (theForm.ClientRectangle.Top + theForm.ClientRectangle.Bottom) / 2
End Sub
MustOverride Sub Transform(ByVal d As DateTime)
‘繪制指針路徑
Overridable Sub Draw(ByVal g As Graphics)
Dim aPen As Pen = New Pen(Brushes.Black, 4F)
g.DrawPath(aPen, gp)
g.FillPath(Brushes.Black, gp)
aPen.Dispose()
End Sub
‘使用矩陣實現(xiàn)路徑(gp)的旋轉
Public Sub Rotate(ByVal angle As Double)
gp = CType(gpBase.Clone(), GraphicsPath)
Dim mTransform As Matrix = New Matrix()
mTransform.RotateAt(CType(angle,Single),NewPointF(midX,midY))
gp.Transform(mTransform)
End Sub
End Class
為了節(jié)省篇幅,上面的代碼省略了引入命名空間的語句。
下面是分針(MinuteHand)類的定義:
Public Class MinuteHand
Inherits Hand
‘構造器,生成繪制分針的路徑(gp)
Public Sub New(ByVal myForm As Form1)
MyBase.New(myForm)
gp.AddLine(midX, midY, midX, 45)
gp.AddLine(midX, 45, midX - 3, 50)
gp.AddLine(midX - 3, 50, midX + 3, 50)
gp.AddLine(midX + 3, 50, midX, 45)
gpBase = CType(gp.Clone(), GraphicsPath)
End Sub
‘Transform方法取得系統(tǒng)當前時間,并旋轉時鐘指針。
Public Overrides Sub Transform(ByVal d As DateTime)
Dim minuteTime As Double = (CDbl(d.Minute) + CDbl(d.Second / 60))
Dim angle As Double = (CDbl(minuteTime) / 60) * 360
Rotate(angle)
End Sub
End Class
對所有的指針旋轉的方法都是相同的,因此在基類中實現(xiàn)。由于時針和秒針的實現(xiàn)與分針相似,所不同者,只在于構造器中繪制的指針路徑不同和Transform方法中轉動的角度不同,在這里就不在贅述了。
另外還需要提一下的是畫時鐘表面的代碼,時鐘表面用ClockFace類來實現(xiàn)。這個類首先畫一個圓代表時鐘,然后畫上米老鼠的圖案,最后在相應的位置畫上數(shù)字1~12代表12個小時。
Public Sub Draw(ByVal g As Graphics)
DrawClockFace(g)
DrawImage(g)
DrawNumbers(g)
DrawPin(g)
End Sub
下面是ClockFace類的屬性:
Private ClockRectangle As Rectangle
Private ClockFont As Font = New Font("Arial", 12)
Private midPoint As Point
Private ClockImage As Bitmap
Private Const IMAGEX As Integer = 50
Private Const IMAGEY As Integer = 50
DrawClockFace方法用來畫時鐘表面:
Private Sub DrawClockFace(ByVal g As Graphics)
g.FillEllipse(Brushes.White, ClockRectangle.Left + 10, ClockRectangle.Top + 10, ClockRectangle.Width - 20, ClockRectangle.Height - 20)
g.DrawEllipse(Pens.Black, ClockRectangle.Left + 10, ClockRectangle.Top + 10, ClockRectangle.Width - 20, ClockRectangle.Height - 20)
End Sub
然后用Graphics對象的DrawImage方法畫出米老鼠的圖片:
Private Sub DrawImage(ByVal g As Graphics)
Dim nWidth As Integer = ClockImage.Width
Dim nHeight As Integer = ClockImage.Height
Dim destRect As Rectangle = New Rectangle(midPoint.X - IMAGEX / 2, midPoint.Y - IMAGEY / 2, IMAGEX, IMAGEY)
g.DrawImage(ClockImage, destRect)
End Sub
數(shù)字在時鐘上的位置是用sin和cos函數(shù)計算的:
Private Sub DrawNumbers(ByVal g As Graphics)
Dim count As Integer = 1
Dim a As Double
For a = 0 To 2 * Math.PI Step 2 * Math.PI / 12
Dim x As Double = (ClockRectangle.Width - 70) / 2 * Math.Cos(a - Math.PI / 3) + (ClockRectangle.Width - 70) / 2 + 25
Dim y As Double = (ClockRectangle.Width - 70) / 2 * Math.Sin(a - Math.PI / 3) + (ClockRectangle.Width - 70) / 2 + 20
g.DrawString(Convert.ToString(count), ClockFont, Brushes.Black, CType(x, Single), CType(y, Single), New StringFormat())
count += 1
Next
End Sub
最后是窗體文件(Form1.vb):
Public Class Form1
Inherits System.Windows.Forms.Form
Private MyMinuteHand As MinuteHand
Private MyHourHand As HourHand
Private MySecondHand As SecondHand
Private TheClockFace As ClockFace
Private FirstTick As Boolean = False
‘在窗體的OnPaint事件中取得Graphics對象
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
If (FirstTick = False) Then Exit Sub
Dim g As Graphics = e.Graphics
TheClockFace.Draw(g)
MyHourHand.Draw(g)
MyMinuteHand.Draw(g)
MySecondHand.Draw(g)
TheClockFace.DrawPin(g)
End Sub
‘計時器事件
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
MySecondHand.Transform(DateTime.Now)
MyHourHand.Transform(DateTime.Now)
MyMinuteHand.Transform(DateTime.Now)
FirstTick = True
Invalidate()
Private
Sub
Form_Load()
Form1.AutoRedraw
=
True
Form1.Height
=
3500
Form1.Width
=
3500
Form1.Scale
(-100,
100)-(100,
-100)
'這里VB是以正X和負Y開始原始坐標,就是Y坐標和我們平時畫的相反
Line1.X1
=
0:
Line1.Y1
=
Line2.X1
=
0:
Line2.Y1
=
Line3.X1
=
0:
Line3.Y1
=
Line1.BorderColor
=
RGB(0,
0,
0)
Line1.BorderWidth
=
3
Line2.BorderColor
=
RGB(0,
0,
255)
Line2.BorderWidth
=
2
Line3.BorderColor
=
RGB(255,
0,
0)
Shape1.Top
=
95
'這里因為Y坐標是相反的,所以要正數(shù)
Shape1.Left
=
-95
Line3.BorderWidth
=
1
Shape1.BorderStyle
=
3
Shape1.BorderWidth
=
3
Shape1.Width
=
190
Shape1.Height
=
190
Shape1.BorderColor
=
RGB(0,
0,
255)
Timer1.Interval
=
1000
End
Sub
Private
Sub
Timer1_Timer()
sx
=
Cos((180
-
6
*
Second(Time))
*
3.14159
/
180)
*
65
'COS。不知道怎么說
sy
=
Sin((180
-
6
*
Second(Time))
*
3.14159
/
180)
*
65
'同上,的秒針反方向轉了
Line3.X2
=
sx
Line3.Y2
=
sy
mx
=
Cos((180
-
6
*
Minute(Time))
*
3.14159
/
180)
*
65
my
=
Sin((180
-
6
*
Minute(Time))
*
3.14159
/
180)
*
65
Line2.X2
=
mx
Line2.Y2
=
my
hx
=
Cos((180
-
(30
*
Hour(Time)
+
30
*
Minute(Time)
/
60))
*
3.14159
/
180)
*
40
hy
=
Sin((180
-
(30
*
Hour(Time)
+
30
*
Minute(Time)
/
60))
*
3.14159
/
180)
*
40
Line1.X2
=
hx
Line1.Y2
=
hy
Form1.CurrentX
=
-2
Form1.CurrentY
=
80
Form1.Print
"12"
Form1.CurrentX
=
75
Form1.CurrentY
=
-8
Form1.Print
"3"
Form1.CurrentX
=
-80
Form1.CurrentY
=
-8
Form1.Print
"9"
End
Sub
'添加一個label標簽名字label1 用來顯示時間
'再添加一個timer控件 名字timer1 interval屬性=1000 用來計時
'窗體添加代碼
Dim t As Date '用來記錄時間
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Timer1.Tick
t = t.AddSeconds(1)
Label1.Text = "登錄時間:" t.TimeOfDay.ToString
End Sub
分享名稱:關于vb.net時鐘代碼的信息
當前URL:http://www.rwnh.cn/article32/doohgpc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供自適應網(wǎng)站、網(wǎng)站營銷、全網(wǎng)營銷推廣、云服務器、網(wǎng)站排名、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)