vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Weltzeituhr 
Autor: stefanbla80
Datum: 14.02.14 09:33

Hallo zusammen,

was ich machen möchte.

Auf meinem Formular habe ich eine analoge Uhr die "gezeichnet" wird.
Dieser Uhr möchte ich eine gewisse Zeitzone vorgeben - die dann der User mit einer ComboBox auswählen kann.

Bisher habe ich folgenden Code hierfür.
Imports System.Drawing.Drawing2D
 
Public Class Form1
 
    Dim timeUtc As Date = Date.UtcNow
    Dim cstZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Central" & _
      "Standard Time")
    Dim cstTime As Date = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone)
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles MyBase.Load
 
        PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
 
        Timer1.Enabled = True
        Timer1.Interval = 1000
 
    End Sub
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Timer1.Tick
 
        Me.Text = CStr(DateTime.Now)
 
        Dim bmp As Bitmap = New Bitmap(310, 310)
        Dim g As Graphics = Graphics.FromImage(bmp)
        Dim gFont As New Font("Meta Plus LF", 20, FontStyle.Bold)
        Dim f1 As Pen = New Pen(Color.SkyBlue, 10) ' Farbe Minutenzeiger
        Dim f2 As Pen = New Pen(Color.SkyBlue, 3)  ' Farbe Sekundenzeiger
        Dim x, y, wi, b As Int32
        Dim h As Int32 = cstTime.Hour     ' aktuelle Stunde
        Dim m As Int32 = cstTime.Minute    ' aktuelle Minute
        Dim s As Int32 = cstTime.Second   ' aktuelle Sekunde
        f1.EndCap = LineCap.Triangle
        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.DarkGray, 1, 1, 308, 308) ' Farbe Rand
        g.FillEllipse(Brushes.Silver, 15, 15, 280, 280) ' Farbe Ziffernblatt
        b = 12
        For wi = 90 To 420 Step 30
            x = CInt(132 + Math.Cos(wi * Math.PI / 180) * 120) ' Grad In 
            ' Bogenmaß
            y = CInt(136 - Math.Sin(wi * Math.PI / 180) * 120) ' Grad In 
            ' Bogenmaß
            If b = 12 Then x -= 7
            g.DrawString(Str(b), gFont, Brushes.Red, x, y) ' Stundenzahlen 
            ' anzeigen
            b -= 1
        Next wi
        gFont.Dispose()
        For wi = 90 To 450 Step 6
            x = CInt(154 + Math.Cos(wi * Math.PI / 180) * 135)
            y = CInt(154 - Math.Sin(wi * Math.PI / 180) * 135)
            g.FillEllipse(Brushes.Blue, x, y, 3, 3) ' Sekundenpunkte zeichnen
        Next wi
        g.TranslateTransform(-155, -155)    'Stundenzeiger
        g.RotateTransform(-90 + h * 30 + (m \ 2), MatrixOrder.Append)
        g.TranslateTransform(155, 155, MatrixOrder.Append)
        g.DrawLine(f1, 155, 155, 245, 155)  ' Stundenzeiger zeichnen
        g.ResetTransform()
        g.TranslateTransform(-155, -155)    ' Minutenzeiger
        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)  'Minutenenzeiger zeichnen
        f1.Dispose()
        g.ResetTransform()
        g.TranslateTransform(-155, -155)   ' Sekundenzeiger
        g.RotateTransform(-90 + s * 6, MatrixOrder.Append)
        g.TranslateTransform(155, 155, MatrixOrder.Append)
        g.DrawLine(f2, 155, 155, 280, 155) ' Sekundenzeiger zeichnen
        f2.Dispose()
        g.FillEllipse(Brushes.Red, 147, 147, 16, 16) ' Ziffernblatt
        PictureBox1.Image = bmp ' Bitmap in die PictureBox laden
 
End Sub
 
End Class
An sich läuft diese Uhr super, wenn die vorgegebene Zeit so dargestellt wird. Dann läuft auch der Sekundenzeiger.
        Dim h2 As Int32 = DateTime.Now.Hour      ' aktuelle Stunde
        Dim m2 As Int32 = DateTime.Now.Minute    ' aktuelle Minute
        Dim s2 As Int32 = DateTime.Now.Second    ' aktuelle Sekunde
Gebe ich die Zeit vor wie im oben genannten Beispiel, dann wird mir zwar die aktuelle Zeit beim Laden angezeigt, jedoch läuft die Uhr nicht sichtbar weiter.

        Dim h As Int32 = cstTime.Hour     ' aktuelle Stunde
        Dim m As Int32 = cstTime.Minute    ' aktuelle Minute
        Dim s As Int32 = cstTime.Second   ' aktuelle Sekunde
Der Hintergrund ist der, dass ich auch die verschiedenen Zeitzonen berücksichten und auch somit die Sommer-/Winterzeit.

Vielleicht laufe ich auch in die falsche Richtung - aus diesem Grund dieses Thema.

Grüße
Stefan
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Weltzeituhr1.800stefanbla8014.02.14 09:33
Re: Weltzeituhr920stefanbla8014.02.14 10:58
Re: Weltzeituhr886HenryV14.02.14 10:59
Re: Weltzeituhr892stefanbla8014.02.14 13:39

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel