vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 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
Winkelberechnung für eine Uhr  
Autor: supernicky
Datum: 19.05.11 03:05

Hallo und Guten Morgen,

Vielleicht kann mir ja jemand sagen welchen Denkfehler ich hier mache..

Ich habe (aus Langerweile) eine analoge Uhr programmiert.
Dazu habe ich mir einen Kreis auf 60 Abschnitte geteilt.
Auf jeden dieser Punkte eine kleine Picturebox gesetzt und nach mehreren Versuchen es so hinbekommen
das Picturebox(0) auf 12-Uhr steht und dann alle rechts rum angereiht.

Meine Zeiger funktionieren auch, da ich ja nur die Minuten abfragen muss und dann einfach auf die
Picturebox "zeige" die den Minutenwert hat (Picturebox Nr.25 liegt ja auf der Minute 25)

Nun möchte aber noch zur besseren Übersicht, das auf jeder vollen Stunde die Picturebox weiß ist.
Da hab ich mir doch gedacht ich zähle einfach immer 5 ab und mach die dann weiß, aber der PC fängt nicht bei 12 Uhr an sondern bei 21 Uhr und dann auch noch rückwärts!!!!

Ich hoffe man versteht mich ein bisschen.
Bei 0:00 Uhr zeigt der Minutenzeigen auf die 12 oder 0, wie man will. Weil dort die Picturebox Nr. 0 ist.

Lasse ich aber nur die Picturebox(0) zeichnen, dann ist diese auf 9 Uhr, 270 Grad versetzt.

hier mal der Code dafür:

man braucht 3 Linienelemente (stunde,minute,sekunde) und einen Timer (zeit)
'mein Array für die 60er Einteilung und der Ausgangspunkt für den Mittelpunkt
Dim x(60), y(60) As Double
Dim ausgang As Integer = 150
 
'bei Klick auf die Form gehts los oder wird angehalten
Private Sub Form1_Click(sender As Object, e As System.EventArgs) Handles _
  Me.Click
        If zeit.Enabled = False Then
            zeit.Interval = 100
            zeit.Enabled = True
            zeit.Start()
        Else
            zeit.Stop()
            zeit.Enabled = False
        End If
 
 
 
    End Sub
 
 
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) _
      Handles MyBase.Load
 
        Dim grad As Integer = 270                              'ich fange oben 
        ' an 12 Uhr
        Dim bogenmass As Double                                
        Dim z As Integer = 1
        'bogenmass = 6.2831853071 / (360 / grad)              '2*pi / 360
 
        Dim n As Byte = 0                                     'mein Zähler für 
        ' die weißen Felder
 
        For z = 0 To 60
            bogenmass = 6.2831853071 / (360 / grad)            'hier wird das 
            ' Array gefüllt mit 
            x(z) = 150 + 100 * Math.Cos(bogenmass)              '60 Punkten
            y(z) = 150 + 100 * Math.Sin(bogenmass)
            grad = grad + 6                                    '1 Minute weiter 
            ' gehen
        Next
 
 
 
        Dim ball(60) As PictureBox                              '60 PBoxen 
        ' erstellen
 
        For z = 0 To 20
            ball(z) = New PictureBox
            Me.Controls.Add(ball(z))
            ball(z).Height = 5
            ball(z).Width = 5
            ball(z).Top = x(z)
            ball(z).Left = y(z)
            If n = 6 Then
                ball(z).BackColor = Color.White                 'jede 5. bitte 
                ' in weiß
                n = 1
            Else
                ball(z).BackColor = Color.Black                 'alle anderen 
                ' schwarz
            End If
            ball(z).Show()
            n = n + 1
        Next
 
        stunde.X1 = ausgang                                     'alle 3 Zeiger 
        ' in die Mitte
        stunde.Y1 = ausgang
        minute.X1 = ausgang
        minute.Y1 = ausgang
        sekunde.X1 = ausgang
        sekunde.Y1 = ausgang
 
 
    End Sub
 
    Sub uhr_stellen()
 
        Dim extra_stunde As Double                       'damit der 
        ' Stundenzeiger langsam mitgeht
        extra_stunde = CInt(Now.Minute / 12)             'abhängig der 
        ' verstrichenen Minuten
 
        If Now.Hour < 13 Then
            stunde.X2 = x(Now.Hour * 5 + extra_stunde)
            stunde.Y2 = y(Now.Hour * 5 + extra_stunde)
        End If
        If Now.Hour > 12 Then
            stunde.X2 = x((Now.Hour - 12) * 5 + extra_stunde)
            stunde.Y2 = y((Now.Hour - 12) * 5 + extra_stunde)
        End If
 
        minute.X2 = x(Now.Minute)        'bei 12 Minuten zeigt der Zeiger auf 
        ' die 12. Pbox
        minute.Y2 = y(Now.Minute)
 
        sekunde.X2 = x(Now.Second)       'siehe Minutenzeiger
        sekunde.Y2 = y(Now.Second)
 
    End Sub
Warum zeichnet er mir die Pboxen 0 - 15 nicht in dem Abschnitt von 0:00 - 3:00 Uhr???

Das einfache Dinge so schwierig sein können

Gruß, Nicky
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Winkelberechnung für eine Uhr 1.188supernicky19.05.11 03:05
Re: Winkelberechnung für eine Uhr726Snof19.05.11 04:25

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