Hodinové ručičky – Visual Basic – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Hodinové ručičky – Visual Basic – Fórum – Programujte.comHodinové ručičky – Visual Basic – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
bk26010
Duch
27. 1. 2011   #1
-
0
-

zdravím. Mám menší problém s kalibraci hodinových ručiček. Vteřinová a minutová mi funguje,ale hodinová se nějak zasekává, lépe řečeno,nefunguje mi, a nevim uz v čem je problém :(

Kod vypadá nejak takto:

Public Class Form1
Dim X, Xm, Xh As Integer
Dim Y, Ym, Yh As Integer
Dim sekundy As Integer
Dim Minuty As Integer
Dim Hodiny As Integer

Function SourX(ByVal r As Double, ByVal Alfa As Double) As Integer
SourX = r * Math.Cos(Alfa * Math.PI / 180)
End Function

Function SourY(ByVal r As Double, ByVal Alfa As Double) As Integer
SourY = r * Math.Sin(Alfa * Math.PI / 180)

End Function


Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim Datum As Date
Datum = Datum.Now
Label1.Text = Datum

Dim Grafika As Graphics
Dim Pero As Pen
Dim Pero2 As Pen
Dim Pero3 As Pen
Dim Pero4 As Pen
Dim r As Integer

sekundy = sekundy + 1
If sekundy = 60 Then
sekundy = 0
End If

If sekundy = 45 Then
Minuty = Minuty + 1

End If

If Minuty = 45 Then
Hodiny = Hodiny + 1
End If


Pero = New Pen(Color.White, 4)
Pero2 = New Pen(Color.Red, 2)
Pero3 = New Pen(Color.Green, 3)
Pero4 = New Pen(Color.Blue, 4)
Grafika = Graphics.FromHwnd(Me.Handle)
Grafika.ScaleTransform(1, 1)
Grafika.TranslateTransform(Me.Size.Width() \ 2, Me.Size.Height() \ 2)
r = Me.Size.Width() \ 4


Grafika.DrawLine(Pero, 0, 0, X, Y)
X = SourX(r, 6 * sekundy)
Y = SourY(r, 6 * sekundy)
Grafika.DrawLine(Pero2, 0, 0, X, Y)

Grafika.DrawLine(Pero, 0, 0, Xm, Ym)
Xm = SourX(r, 6 * Minuty)
Ym = SourY(r, 6 * Minuty)
Grafika.DrawLine(Pero3, 0, 0, Xm, Ym)

Grafika.DrawLine(Pero, 0, 0, Xh, Yh)
Xh = SourX(r, 6 * Hodiny)
Yh = SourY(r, 6 * Hodiny)
Grafika.DrawLine(Pero4, 0, 0, Xh, Yh)

End Sub


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Interval = 1
sekundy = 45
Minuty = 45
Hodiny = 45
End Sub

End Class


(Interval = 1 proto,abych,nemusel vždy dlouho čekat na jeden cyklus.)

Nahlásit jako SPAM
IP: 93.99.61.–
Reklama
Reklama
nervak0
Věrný člen
27. 1. 2011   #2
-
0
-

sekundy = sekundy + 1


If sekundy = 60 Then
sekundy = 0
Minuty = Minuty + 1
End If

If Minuty = 60 Then
Minuty = 0
Hodiny = Hodiny + 5
End If

Nahlásit jako SPAM
IP: 213.211.51.–
CZechBoY+4
Věrný člen
28. 1. 2011   #3
-
0
-

hodina má 15minut? :D
Hodiny = Hodiny +5 ;-)

Nahlásit jako SPAM
IP: 213.192.10.–
bk26010
Duch
29. 1. 2011   #4
-
0
-

Díky, ta mechanika funguje, ručičky se otáči tak jak by měli, jen me vrtá hlavou, proč hodinová ručička tikne vždy,kdyz je minutová na 3jce (na analogových hodinách)
Problém bude asi v této podmínce :

If Minuty = 60 Then
Minuty = 0
Hodiny = Hodiny + 5
End If

Jelikož, kdyz minuty jsou 60,tak to ten program chápe jako 60 tzn analogová ručička na 3jce,tím pádem poskoči hodinovka +5. Když změním podmínku na 45,tak se to chová uplně jinak. :(

Nahlásit jako SPAM
IP: 93.99.61.–
nervak0
Věrný člen
29. 1. 2011   #5
-
0
-

Protože nula stupňů je na třech hodinách, základní škola. Můžeš 0..60 posunout na -15..45, ale na to se vykašli. Čas počítej jako čas, pak to převeď na úhel a nakonec posuň o těch 90 stupňů.

Sec = Sec + 1

If Sec = 60 Then Sec = 0 : Min = Min + 1
If Min = 60 Then Min = 0 : Hrs = Hrs + 1
If Hrs = 12 Then Hrs = 0

ClockX = Me.ClientSize.Width \ 2
ClockY = Me.ClientSize.Height \ 2
ClockR = IIf(Me.ClientSize.Width < Me.ClientSize.Height, Me.ClientSize.Width \ 4, Me.ClientSize.Height \ 4)

gr = Graphics.FromHwnd(Me.Handle)
gr.TranslateTransform(ClockX, ClockY)

SecX = SourX(ClockR, Sec * (360 / 60) - 90)
SecY = SourY(ClockR, Sec * (360 / 60) - 90)

MinX = SourX(ClockR, Min * (360 / 60) - 90)
MinY = SourY(ClockR, Min * (360 / 60) - 90)

HrsX = SourX(ClockR, Hrs * (360 / 12) - 90)
HrsY = SourY(ClockR, Hrs * (360 / 12) - 90)

gr.Clear(Me.BackColor)
gr.DrawLine(penSec, 0, 0, SecX, SecY)
gr.DrawLine(penMin, 0, 0, MinX, MinY)
gr.DrawLine(penHrs, 0, 0, HrsX, HrsY)

Nahlásit jako SPAM
IP: 213.211.51.–
bk26010
Duch
30. 1. 2011   #6
-
0
-

nervak. Díky moc.
Ono původně to byl školní projekt,kde jsme meli jen udelat "sekundovou ručičku". Já jsem se pak doma rozhodl že zkusim udelat i ručičky,jaké jsou na analogovích hodinách.Takže díky za pomoc ;)

Nahlásit jako SPAM
IP: 212.79.105.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 9 hostů

Podobná vlákna

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý