[Résolu] Tracer les chiffres d'une horloge 24 heures
Publié : mer. 27/nov./2013 15:59
Bonjour à tous, en ce moment j'ai un projet d'horloge 24 heures, mais j'ai un problème pour aligner les chiffres, car je souhaiterais un cadran de 00 à 23 qui servirait d'index pour l'aiguille des heures et je souhaiterais aussi faire un deuxième cadran de 0 à 55 pour les minutes et secondes, auriez-vous un théorème à me proposer ? Je ne vous en remercierai jamais assez !
voici mon projet inachevé:
voici mon projet inachevé:
Code : Tout sélectionner
;##################
;# Horloge murale #
;##################
Enumeration
#Fenetre_principale
EndEnumeration
Enumeration
#Trotteuse
#GrandeAiguille
#PetiteAiguille
#Fond
EndEnumeration
Global TailleImage = 720 ; Toujours carrée et en pixels
Global Font.l,Font1.l,hdc,n.u, Dim bufrx.a(100), ang.f=-215
Global comport.s, i.a, r.u, teta.f, Pen.l
Global lBrush1.LOGBRUSH
With lBrush1
\lbStyle = #BS_SOLID
\lbColor = #Yellow
EndWith
Pen=0
Font=LoadFont(0, "Arial", 18)
Font1=LoadFont(0, "Arial", 12,#PB_Font_Bold)
If InitSprite()
Else
End
EndIf
Procedure fnmaxint(x.a, y.a)
If x > y
ProcedureReturn x
Else
ProcedureReturn y
EndIf
EndProcedure
Procedure set_pen(couleur.l, largeur.l)
With lBrush1
\lbStyle = #BS_SOLID
\lbColor = couleur
EndWith
If Pen <> 0
DeleteObject_(Pen)
EndIf
Pen = ExtCreatePen_(#PS_GEOMETRIC|#PS_ENDCAP_ROUND|#PS_JOIN_MITER|#PS_SOLID, largeur, lBrush1, 0, 0)
SelectObject_(hdc, Pen)
EndProcedure
Procedure set_font(font.s, taille.l)
LoadFont(0, font, taille)
DrawingFont(FontID(0))
EndProcedure
If OpenWindow(#Fenetre_principale, 0, 0, TailleImage, TailleImage, "Horloge murale", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(#Fenetre_principale), 0, 0, TailleImage, TailleImage, 1, 0, 0)
CreateSprite(#Trotteuse, 800, 800)
CreateSprite(#GrandeAiguille, 800, 800)
CreateSprite(#PetiteAiguille, 800, 800)
CreateSprite(#Fond, 800, 800)
If StartDrawing(SpriteOutput(#Fond)) ;- fond
set_pen( 0,5)
DrawingFont(Font1)
For i=0 To 360 Step 15
tet = i
;DrawText(400-210*Cos(tet),400+210*Sin(tet), Str(i/15),$02FFFF,$0) ; affichage sur le cadran
Next
;Circle(400, 400, 360, $FFFFFF) ; Minutes
;Circle(400, 400, 358, 0)
;Circle(400, 400, 345, $FFFFFF) ; Secondes
;Circle(400, 400, 343, 0)
;Circle(400, 400, 210, $FFFFFF) ; Heures
;Circle(400, 400, 208, 0)
StopDrawing()
EndIf
If StartDrawing(SpriteOutput(#Trotteuse))
LineXY(398, 550, 398, 65, RGB(200, 35, 35))
LineXY(399, 550, 399, 60, RGB(200, 35, 35))
LineXY(400, 550, 400, 55, RGB(200, 35, 35))
LineXY(401, 550, 401, 60, RGB(200, 35, 35))
LineXY(402, 550, 402, 65, RGB(200, 35, 35))
Circle(400, 530, 10, RGB(200, 35, 35))
Circle(400, 535, 9, RGB(200, 35, 35))
Circle(400, 540, 8, RGB(200, 35, 35))
Circle(400, 545, 7, RGB(200, 35, 35))
Circle(400, 550, 6, RGB(200, 35, 35))
Circle(400, 400, 15, RGB(200, 35, 35))
StopDrawing()
EndIf
If StartDrawing(SpriteOutput(#GrandeAiguille))
LineXY(390, 400, 380, 180, RGB(255, 255, 255))
LineXY(380, 180, 390, 170, RGB(255, 255, 255))
LineXY(390, 170, 390, 50, RGB(255, 255, 255))
LineXY(390, 50, 400, 42, RGB(255, 255, 255))
LineXY(400, 42, 410, 50, RGB(255, 255, 255))
LineXY(410, 50, 410, 170, RGB(255, 255, 255))
LineXY(410, 170, 420, 180, RGB(255, 255, 255))
LineXY(420, 180, 410, 400, RGB(255, 255, 255))
LineXY(410, 400, 390, 400, RGB(255, 255, 255))
FillArea(400, 300, RGB(255, 255, 255), RGB(255, 255, 255))
Circle(400, 400, 30, RGB(200, 35, 35))
StopDrawing()
EndIf
If StartDrawing(SpriteOutput(#PetiteAiguille))
LineXY(390, 400, 375, 280, RGB(255, 255, 255))
LineXY(375, 280, 390, 260, RGB(255, 255, 255))
LineXY(390, 260, 390, 210, RGB(255, 255, 255))
LineXY(390, 210, 400, 195, RGB(255, 255, 255))
LineXY(400, 195, 410, 210, RGB(255, 255, 255))
LineXY(410, 210, 410, 260, RGB(255, 255, 255))
LineXY(410, 260, 425, 280, RGB(255, 255, 255))
LineXY(425, 280, 410, 400, RGB(255, 255, 255))
LineXY(410, 400, 390, 400, RGB(255, 255, 255))
FillArea(400, 300, RGB(255, 255, 255), RGB(255, 255, 255))
StopDrawing()
EndIf
EndIf
EndIf
Repeat
Evenement = WindowEvent()
ClearScreen(RGB(0, 0, 0))
xsec.s = FormatDate("%ss", Date())
xmin.s = FormatDate("%ii", Date())
xheure.s = FormatDate("%hh", Date())
If Val(xheure) > 11
xheure = Str(Val(xheure)-12)
EndIf
s = Val(xsec) * 6
m = (Val(xmin) * 60 + Val(xsec)) / 10
;h = (Val(xheure) * 60 + Val(xmin)) / 4 ; système 24 h
h = (Val(xheure) * 60 + Val(xmin)) / 2 ; système 12 h
ZoomSprite(#Trotteuse, TailleImage, TailleImage)
ZoomSprite(#GrandeAiguille, TailleImage, TailleImage)
ZoomSprite(#PetiteAiguille, TailleImage, TailleImage)
ZoomSprite(#Fond, TailleImage, TailleImage)
RotateSprite(#Trotteuse, s, 0)
RotateSprite(#GrandeAiguille, m, 0)
RotateSprite(#PetiteAiguille, h, 0)
DisplayTransparentSprite(#Fond, 0, 0, 255)
DisplayTransparentSprite(#PetiteAiguille, 0, 0, 255)
DisplayTransparentSprite(#GrandeAiguille, 0, 0, 255)
DisplayTransparentSprite(#Trotteuse, 0, 0, 255)
FlipBuffers()
Delay(20)
Until Evenement = #PB_Event_CloseWindow
End