Analog Saat Üzerinde Mouse İle Tıklayarak Saat Seçmek

1 2 3
15/05/2020, 14:48

accessman

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
15/05/2020, 17:19

berduş

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
15/05/2020, 17:35

accessman

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
15/05/2020, 17:35

berduş

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

15/05/2020, 17:47

accessman

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 

15/05/2020, 18:08

berduş

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
1 2 3