Hier mal eine Uhr:
Imports System.Drawing.Drawing2D
Public Class Form1
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Timer1.Tick
Dim bmp As Bitmap = New Bitmap(310, 310) ' legt
' eine neue Bitmap an
Dim g As Graphics = Graphics.FromImage(bmp) ' g wird
' nun zur Zeichenfläche
Dim gFont As New Font("New curier", 20, FontStyle.Bold) ' für
' die Stundenzahlen
Dim f1 As Pen = New Pen(Color.Yellow, 10) ' für
' die gelben Zeiger
Dim f2 As Pen = New Pen(Color.Red, 3) ' für
' den Sekundenzeiger
Dim x, y, wi, b As Int32
Dim h As Int32 = DateTime.Now.Hour '
' aktuelle Stunde
Dim m As Int32 = DateTime.Now.Minute '
' aktuelle Minute
Dim s As Int32 = DateTime.Now.Second '
' aktuelle Sekunde
f1.EndCap = LineCap.Triangle ' Spitze
' für das Zeigerende
f1.StartCap = LineCap.RoundAnchor ' Kreis
' für den Zeigeranfang
g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality '
' Antialiasingmodus
g.TextRenderingHint = Drawing.Text.TextRenderingHint.ClearTypeGridFit '
' Schriftglättung
If h > 12 Then h -= 12 '
' 12 Stundenanzeige
g.FillEllipse(Brushes.Blue, 1, 1, 308, 308) ' der
' blaue Rand
g.FillEllipse(Brushes.Black, 15, 15, 280, 280) ' das
' schwarze Zifferblatt
b = 12
For wi = 90 To 420 Step 30
x = 135 + Math.Cos(wi * Math.PI / 180) * 120 ' Grad
' in Bogenmaß
y = 140 - Math.Sin(wi * Math.PI / 180) * 120 ' Grad
' in Bogenmaß
If b = 12 Then x -= 7
g.DrawString(Str(b), gFont, Brushes.Yellow, x, y) ' die
' Stundenzahlen anzeigen
b -= 1
Next wi
gFont.Dispose()
For wi = 90 To 450 Step 6
x = 154 + Math.Cos(wi * Math.PI / 180) * 135
y = 154 - Math.Sin(wi * Math.PI / 180) * 135
g.FillEllipse(Brushes.Yellow, x, y, 3, 3) ' die
' Sekundenpunkte zeichnen
Next wi
g.TranslateTransform(-155, -155)
g.RotateTransform(-90 + h * 30 + (m \ 2), MatrixOrder.Append)
g.TranslateTransform(155, 155, MatrixOrder.Append)
g.DrawLine(f1, 155, 155, 245, 155) ' den
' Stundenzeiger zeichnen
g.ResetTransform()
g.TranslateTransform(-155, -155)
g.RotateTransform(-90 + m * 6 + (s \ 10), MatrixOrder.Append)
g.TranslateTransform(155, 155, MatrixOrder.Append)
f1.Width = 8
g.DrawLine(f1, 155, 155, 280, 155) ' dann
' den Minutenenzeiger
f1.Dispose()
g.ResetTransform()
g.TranslateTransform(-155, -155)
g.RotateTransform(-90 + s * 6, MatrixOrder.Append)
g.TranslateTransform(155, 155, MatrixOrder.Append)
g.DrawLine(f2, 155, 155, 280, 155) ' und
' den Sekundenzeiger
f2.Dispose()
g.FillEllipse(Brushes.Red, 147, 147, 16, 16) ' den
' roten Kreis
PictureBox1.Image = bmp ' nun in
' die PictureBox
End Sub
Private Sub Form1_Resize(ByVal sender As Object, ByVal e As _
System.EventArgs) Handles Me.Resize
PictureBox1.Width = Me.Width - 30
PictureBox1.Height = Me.Height - 50
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
Me.Size = New Size(350, 350)
PictureBox1.Location = New Size(10, 10)
PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
Timer1.Enabled = True
Timer1.Interval = 1000
End Sub
End Class GPM |