Je ne sais pas si je poste au bonne endroit, voici un bout de code que je me suis amuser à faire pour afficher l'heure système dans une horloge analogique. Le graphisme (entièrement en code) n'est vraiment pas terrible (surtout le crénage dans les aiguilles) mais le code peut peut'être en inspiré certains (la base formule de rotation est reprise d'un code de Dobro un grand merci à lui).

Code : Tout sélectionner
Structure Aiguille
x.l
y.l
EndStructure
;- * Variables Globales *
Global gRayon_Horloge=50,gEpaisseur_Couronne=10,gCouleur_Horloge=$B3DEF5,gCouleur_Couronne=$696969,gCouleur_Aiguille=$000000
Global gPosX_Horloge=50,gPosY_Horloge=50,gCouleur_Chiffre=$000000,ID_FONT
Global gTaille_Canvas=(gRayon_Horloge*2)+((gRayon_Horloge*2)*25)/100
Global gEpaisseur_Aiguille=2,gBas_Aiguille_Heure=5,gMarge_Aiguille_Heure=8
Global gBas_Aiguille_Minute=5,gMarge_Aiguille_Minute=4,gEpaisseur_Aiguille_minute=2
Global gBas_Aiguille_Seconde=5,gMarge_Aiguille_seconde=2,gEpaisseur_Aiguille_Seconde=1
;-* Les listes
Global NewList Ai_Heure.Aiguille() ;Liste qui vas reprendre tous les points pour des aiguille de l'heure
Global NewList Ai_Minute.Aiguille() ;Liste qui vas reprendre tous les points pour des aiguille des minutes
Global NewList Ai_Seconde.Aiguille() ;Liste qui vas reprendre tous les points pour des aiguille des seconde
;-*Initialisation du programme *
If Not OpenWindow(0,0,0,800,800,"Horloge",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
MessageRequester("Erreur","Erreur à l'ouverture de la fenêtre principale...")
End
EndIf
;Le canvas qui vas servir de surface de dessin à l'horloge
CanvasGadget(0,gPosX_Horloge,gPosY_Horloge,gTaille_Canvas,gTaille_Canvas)
;Chargement des font
ID_FONT=LoadFont(0,"Arial",16)
;-*Déclaration des procédures
Declare Dessine_Horloge()
Declare Dessine_Chiffres()
Declare Dessine_Aguille()
Declare Init_Heure()
Declare Init_Minute()
Declare Init_Seconde()
;-* Boucle principale *
Repeat
Event=WindowEvent()
StartDrawing(CanvasOutput(0))
Box(0,0,GadgetWidth(0),GadgetHeight(0),$FFFFFF)
Dessine_Horloge()
Dessine_Chiffres()
Init_Heure()
Init_Minute()
Init_Seconde()
Dessine_Aguille()
StopDrawing()
Until Event=#PB_Event_CloseWindow
;-* Liste des procédures
Procedure Dessine_Horloge()
;Calcul du centre du canvas
Protected x,y
x=GadgetWidth(0)/2
y=GadgetHeight(0)/2
;Dessin de la couronne de l'horloge
Circle(x,y,gRayon_Horloge+gEpaisseur_Couronne,gCouleur_Couronne)
;Dessin de l'intérieur de l'horloge
Circle(x,y,gRayon_Horloge,gCouleur_Horloge)
EndProcedure
Procedure Dessine_Chiffres()
Protected x,y,N,CHI$
DrawingFont(ID_FONT)
DrawingMode(#PB_2DDrawing_Transparent)
x=GadgetWidth(0)/2
y=GadgetHeight(0)/2-gRayon_Horloge
DrawText(x-(TextWidth("12")/2),y,"12",gCouleur_Chiffre)
y=gRayon_Horloge*2-(TextHeight("9")/2)
DrawText(x-(TextWidth("9")/2),y,"9",gCouleur_Chiffre)
x=gRayon_Horloge*2
y=GadgetHeight(0)/2-(TextHeight("3")/2)
DrawText(x-(TextWidth("3")/2),y,"3",gCouleur_Chiffre)
x=gEpaisseur_Couronne
DrawText(x+(TextWidth("6")/2),y,"6",gCouleur_Chiffre)
DrawingMode(#PB_2DDrawing_Default)
EndProcedure
Procedure Dessine_Aguille()
ForEach Ai_Heure()
Plot(Ai_Heure()\x,Ai_Heure()\y,gCouleur_Aiguille)
Next
ForEach Ai_Minute()
Plot(Ai_Minute()\x,Ai_Minute()\y,gCouleur_Aiguille)
Next
ForEach Ai_Seconde()
Plot(Ai_Seconde()\x,Ai_Seconde()\y,gCouleur_Aiguille)
Next
EndProcedure
Procedure Init_Heure()
ClearList(Ai_Heure())
x3=gTaille_Canvas/2
y3=gTaille_Canvas/2
Heure$=FormatDate("%hh",Date())
Minute$=FormatDate("%ii",Date())
; Le 180° est à 12 heure les degré tourne dans le sens anti horaire d'ou le moins 30°
; Pour les minutes on decompte un 60ème de 30 degré
degres=180-((Val(Heure$)*30)+((Val(Minute$)*30)/60))
For y=(gTaille_Canvas/2)-gBas_Aiguille_Heure To gTaille_Canvas/2+(gRayon_Horloge-gMarge_Aiguille_Heure)
For x=(gTaille_Canvas/2)-(gEpaisseur_Aiguille/2) To (gTaille_Canvas/2)+gEpaisseur_Aiguille
XA=x3+(x-x3) * Cos (degres* #PI /180) +( Y-y3)* Sin (degres* #PI /180)
YA=y3-(x-x3) * Sin (degres* #PI /180) + (Y-y3)* Cos (degres* #PI /180)
AddElement(Ai_Heure())
Ai_Heure()\x=XA
Ai_Heure()\y=YA
Next
Next
EndProcedure
Procedure Init_Minute()
ClearList(Ai_Minute())
x3=gTaille_Canvas/2
y3=gTaille_Canvas/2
Minute$=FormatDate("%ii",Date())
secondes$=FormatDate("%ss",Date())
degres=180-(Val(Minute$)*6)
For y=(gTaille_Canvas/2)-gBas_Aiguille_Minute To gTaille_Canvas/2+(gRayon_Horloge-gMarge_Aiguille_Minute)
For x=(gTaille_Canvas/2)-(gEpaisseur_Aiguille_minute/2) To (gTaille_Canvas/2)+gEpaisseur_Aiguille_minute
XA=x3+(x-x3) * Cos (degres* #PI /180) +( Y-y3)* Sin (degres* #PI /180)
YA=y3-(x-x3) * Sin (degres* #PI /180) + (Y-y3)* Cos (degres* #PI /180)
AddElement(Ai_Minute())
Ai_Minute()\x=XA
Ai_Minute()\y=YA
Next
Next
EndProcedure
Procedure Init_Seconde()
ClearList(Ai_Seconde())
x3=gTaille_Canvas/2
y3=gTaille_Canvas/2
secondes$=FormatDate("%ss",Date())
degres=180-(Val(secondes$)*6)
For y=(gTaille_Canvas/2)-gBas_Aiguille_Seconde To gTaille_Canvas/2+(gRayon_Horloge-gMarge_Aiguille_seconde)
For x=(gTaille_Canvas/2)-(gEpaisseur_Aiguille_Seconde/2) To (gTaille_Canvas/2)+gEpaisseur_Aiguille_Seconde
XA=x3+(x-x3) * Cos (degres* #PI /180) +( Y-y3)* Sin (degres* #PI /180)
YA=y3-(x-x3) * Sin (degres* #PI /180) + (Y-y3)* Cos (degres* #PI /180)
AddElement(Ai_Seconde())
Ai_Seconde()\x=XA
Ai_Seconde()\y=YA
Next
Next
EndProcedure