eklediğim analog saat örneklerinde
Analog Saat Ve Trigonometri
cizgilerin yerini belirlerken saatin saniya dakika saat değerleri kullanılıyor
yani cizgilerin uzerinde herhangi bir yere tıklarsak o zamankıi saate gideceğiz demektir değil mi
mesela analog sattin akrebi 2 dakikada 1 derecelik bir ilerleme kaydediyor değil mi
diyelim ki biz analog saatin 2 ile 3 arasında bir yere tıkladık.
mouse x, y değerlerine göre 2:35 seçmiş olacağız veya 2:20 veya 2:51 vb
mouse analog saatin üzerinde gezerken Label içindeki saat değeri sürekli değişecek
bizde istediğimiz saat değerine ulaşınca mouse tuşunu bırakacağız ve saat alanına uygun saat değerini girmiş olacağız
nasıl yapabiliriz
dosyanıza metin kutusu ekleyip aşağıdaki kodları eklerseniz isteğiniz olur bence
Dim XTan, YTan As Long
Private Sub Resim0_Click()
Dim SonDgr As Single
Dim Aci As Integer
SonDgr = Atn(XTan / YTan) * 180 / 3.142857
If XTan > 0 And YTan < 0 Then Aci = 180
If XTan < 0 And YTan < 0 Then Aci = 180
If XTan < 0 And YTan > 0 Then Aci = 360
SonDgr = 2 * (Aci + SonDgr)
Me.Metin10 = SonDgr \ 60 & ":" & SonDgr Mod 60
End Sub
Private Sub Resim0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Const pi = 3.142857
Const nCentreLeft = (7 * 567), nCentreUp = (7 * 567)
XTan = X - nCentreLeft
YTan = nCentreUp - Y
End Sub
Private Sub goster()
Dim SonDgr As Single
Dim Aci As Integer
SonDgr = Atn(XTan / YTan) * 180 / 3.142857
If XTan > 0 And YTan < 0 Then Aci = 180
If XTan < 0 And YTan < 0 Then Aci = 180
If XTan < 0 And YTan > 0 Then Aci = 360
SonDgr = 2 * (Aci + SonDgr)
Me.Metin20 = SonDgr \ 60 & ":" & SonDgr Mod 60
End Sub
Private Sub Resim0_Click()
Me.Metin21 = Me.Metin20
End Sub
Private Sub Resim0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Const pi = 3.142857
Const nCentreLeft = (840), nCentreUp = (840)
XTan = X - nCentreLeft
YTan = nCentreUp - Y
goster
End Sub
böyle olsa mouse gezerken kaç olduğu görülür tıklatıncada değeri kutuya yazar
ama bazen şu satır
SonDgr = Atn(XTan / YTan) * 180 / 3.142857
divizion by zero hatasına düşüyor
birkaç ufak değişiklikle dosya aşağıdadır
Private Sub Resim0_Click()
Me.Metin10 = SaatBul ' SonDgr \ 60 & ":" & SonDgr Mod 60
End Sub
Private Sub Resim0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Const pi = 3.142857
Const nCentreLeft = (7 * 567), nCentreUp = (7 * 567)
XTan = X - nCentreLeft
YTan = nCentreUp - Y
Me.LblSaat.Caption = SaatBul
End Sub
Function SaatBul() As String
Dim SonDgr As Single
Dim Aci As Integer
SaatBul = ""
If YTan = 0 Then Exit Function
SonDgr = Atn(XTan / YTan) * 180 / 3.142857
If XTan > 0 And YTan < 0 Then Aci = 180
If XTan < 0 And YTan < 0 Then Aci = 180
If XTan < 0 And YTan > 0 Then Aci = 360
SonDgr = 2 * (Aci + SonDgr)
SaatBul = IIf(SonDgr \ 60 = 0, 12, SonDgr \ 60) & ":" & SonDgr Mod 60
End Function
tam olarak kaçtayken 0'a bölme hatası veriyor?
kodu düzelttim dilerim hata vermez
dosya
12. mesajdaki
AnalogSaat_hy2 dosyasında
buda benden yardımlarınız için teşekkürler
peki şöyle olsa içteki rkamların üzerine gelince 13-24 arasını gösterse
Olur da onun için dış çember için yarıçapı bilmek gerekiyor
Uzunluk= (xtan^2 + ytan^2)^0.5 formulunu kullanip çember yarıçapından büyükse +12 ile saat 0-24 formatina donusturebilirsiniz
dosyanın son hali çemberin dışında 12-24, içinde 0-12 gösterir