AccessTr.neT

Tam Versiyon: Analog Saat Üzerinde Mouse İle Tıklayarak Saat Seçmek
Şu anda arşiv modunu görüntülemektesiniz. Tam versiyonu görüntülemek için buraya tıklayınız.
Sayfalar: 1 2 3
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 
[Resim: do.php?img=10208]
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
Sayfalar: 1 2 3