Page 1 sur 2

[Résolu] Tracer les chiffres d'une horloge 24 heures

Publié : mer. 27/nov./2013 15:59
par Micoute
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é:

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

Re: Tracer les chiffres d'une horloge 24 heures

Publié : mer. 27/nov./2013 16:11
par Ar-S
Salut Micoute,

Tu n'aurais pas meilleurs compte à utiliser une image fixe pour le background et à faire gigoter tes aiguilles dessus.
Je pense que le rendu ne pourra être que plus beau et la réalisation plus aisée.

Ex en te basant sur une image de ce genre

Re: Tracer les chiffres d'une horloge 24 heures

Publié : mer. 27/nov./2013 16:34
par Micoute
Merci beaucoup Ar-s, tu as raison, c'est surement la meilleure idée !

Re: [Presque résolu] Tracer les chiffres d'une horloge 24 he

Publié : mer. 27/nov./2013 16:44
par Ar-S
Je t'ai fait un petit BackGround en png (500x500 avec transparence autour de l'horloge) en me basant sur la photo du lien.
http://stock.ldvmultimedia.com/h.png

Re: [Presque résolu] Tracer les chiffres d'une horloge 24 he

Publié : mer. 27/nov./2013 16:56
par Micoute
Merci Ar-s, ça fait franchement génial !

Re: [Presque résolu] Tracer les chiffres d'une horloge 24 he

Publié : mer. 27/nov./2013 17:03
par falsam
Pas mal ce code Micoute et associé au background d'Ar-S le rendu devrait être intéressant.

Re: [Presque résolu] Tracer les chiffres d'une horloge 24 he

Publié : mer. 27/nov./2013 18:07
par falsam
Ar-S en relisant je crois que Microute souhaitait un cadran 23 heures.
Micoute a écrit :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,

Re: [Presque résolu] Tracer les chiffres d'une horloge 24 he

Publié : mer. 27/nov./2013 18:12
par Micoute
Bonsoir falsam, oui effectivement, c'est vraiment top, j'ai trouvé aussi un cadran 24 heures et c'est encore mieux !

Re: [Presque résolu] Tracer les chiffres d'une horloge 24 he

Publié : mer. 27/nov./2013 18:19
par falsam
C'est pas très simple mais tu aurais pu tracer tes chiffres avec une formule permettant de tracer un cercle.

Re: [Presque résolu] Tracer les chiffres d'une horloge 24 he

Publié : mer. 27/nov./2013 18:31
par falsam
Avant qu'on me reproche que c'est facile à dire, petit code qui peut servir de base

Code : Tout sélectionner

EnableExplicit

Enumeration
  #Mainform
  #BackGround
EndEnumeration

Define.l Event, GEvent

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered
Global Image.i
Global XC.i, YC.i, Radius.i ;Coordonnées et rayon du point central du cercle
Global X.f, Y.f ;Coordonnées des points sur le cercle 
Global N.i

OpenWindow(#Mainform, 0, 0, 400, 400, "New Form", WindowStyle)
Image = CreateImage(#PB_Any, 400, 400)

;Coordonnées et rayon du point central du cercle
XC = 200
YC = 200

StartDrawing(ImageOutput(Image))

;Point central
Circle(XC, YC, 2, RGB(255, 69, 0))

;Les heures 
Radius = 100
For N = 0 To 345 Step 15
  X = XC + Radius * Cos(N * #PI / 180)
  Y = YC + Radius * Sin(N * #PI / 180)
  Circle(X,Y,3, RGB(255, 69, 0))
Next

;Les minutes
Radius = 110
For N = 0 To 364 Step 6
  X = XC + Radius * Cos(N * #PI / 180)
  Y = YC + Radius * Sin(N * #PI / 180)
  Circle(X,Y,3, RGB(152, 251, 152))
Next

StopDrawing()
ImageGadget(#BackGround, 0, 0, 400, 400, ImageID(Image))

Repeat
  Event  = WaitWindowEvent(10)
  GEvent = EventGadget()
  Select Event
    Case #PB_Event_Gadget
      Select GEvent
      EndSelect
        
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver

Re: [Presque résolu] Tracer les chiffres d'une horloge 24 he

Publié : jeu. 28/nov./2013 2:14
par falsam
Micoute a écrit :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
Ton code avec quelques modifications pour répondre à ta demande.

Code : Tout sélectionner

;##################
;#      Horloge murale        #
;##################
Enumeration Font
  #FontHour
  #FontMinute
EndEnumeration

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 XC.i, YC.i, Radius.i ;Coordonnées et rayon du point central du cercle
Global X.f, Y.f ;Coordonnées des points sur le cercle 
Global Digit.i
Global Buffer.s

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)
    
    LoadFont(#FontHour, "Arial", 18, #PB_Font_Bold)
    LoadFont(#FontMinute, "Arial", 15)
    
    If StartDrawing(SpriteOutput(#Fond)) ;- fond
      
      ;Coordonnées du point central du cercle
      XC = 400
      YC = 400

      ;Point central
      Circle(XC, YC, 2, RGB(255, 69, 0))

      ;Les heures 
      Radius = 220
      For N = 0 To 345 Step 15
        X = XC + Radius * Cos(N * #PI / 180)
        Y = YC + Radius * Sin(N * #PI / 180)
        Circle(X,Y,3, RGB(255, 69, 0))
      Next

      ;Les minutes
      Radius = 360
      For N = 0 To 364 Step 6
        X = XC + Radius * Cos(N * #PI / 180)
        Y = YC + Radius * Sin(N * #PI / 180)
        Circle(X,Y,3, RGB(128, 128, 128))
      Next

      ;Les Chiffres des heures 
      Digit=5
      Radius = 260
      DrawingFont(FontID(#FontHour))
      For N = 0 To 345 Step 15
        Digit+1
        If Digit>24
          Digit = 1
        EndIf
  
        X = XC + Radius * Cos(N * #PI / 180)
        Y = YC + Radius * Sin(N * #PI / 180)
        Buffer=Str(Digit)
  
        DrawingMode(#PB_2DDrawing_Transparent)
        DrawText(X-TextWidth(Buffer)/2, Y-TextHeight(Buffer)/2, Buffer, RGB(255, 255, 255))
        DrawingMode(#PB_2DDrawing_Default)
      Next
      
      ;Les Chiffres des minutes
      Digit=15
      Radius = 380
      DrawingFont(FontID(#FontMinute))
      For N = 0 To 364 Step 6
        Digit+1
        If Digit>60
          Digit = 1
        EndIf
  
        X = XC + Radius * Cos(N * #PI / 180)
        Y = YC + Radius * Sin(N * #PI / 180)
        Buffer=Str(Digit)
  
        DrawingMode(#PB_2DDrawing_Transparent)
        DrawText(X-TextWidth(Buffer)/2, Y-TextHeight(Buffer)/2, Buffer, RGB(255, 255, 255))
        DrawingMode(#PB_2DDrawing_Default)
      Next
      
      
      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

Re: [Presque résolu] Tracer les chiffres d'une horloge 24 he

Publié : jeu. 28/nov./2013 9:55
par Micoute
Bonjour falsam et merci énormément car là, c'est vraiment ce que je souhaitais faire, du même coup, ça me raccourcit vraiment mon programme, car j'ai nettoyé tout ce qui ne servait plus !

Voici mon horloge murale:

Code : Tout sélectionner

;##################
;#      Horloge murale        #
;##################
Enumeration Font
  #FontHour
  #FontMinute
EndEnumeration

Enumeration Fenetre
  #Fenetre_principale
EndEnumeration

Enumeration Sprites
  #Trotteuse
  #GrandeAiguille
  #PetiteAiguille
  #Fond
EndEnumeration

Global TailleImage = 720 ; Toujours carrée et en pixels

Global XC.i, YC.i, Radius.i ;Coordonnées et rayon du point central du cercle
Global X.f, Y.f ;Coordonnées des points sur le cercle 
Global Digit.i
Global Buffer.s


If InitSprite()
Else
  End
EndIf

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)
    
    LoadFont(#FontHour, "Arial", 24, #PB_Font_Bold)
    LoadFont(#FontMinute, "Arial", 15)
    
    If StartDrawing(SpriteOutput(#Fond)) ;- fond
      
      ;Coordonnées du point central du cercle
      XC = 400
      YC = 400

      ;Point central
      Circle(XC, YC, 2, RGB(255, 69, 0))

      ;Les points des heures 
      Radius = 220
      For N = 0 To 345 Step 15
        X = XC + Radius * Cos(N * #PI / 180)
        Y = YC + Radius * Sin(N * #PI / 180)
        Circle(X,Y,3, RGB(255, 69, 0))
      Next

      ;Les points des minutes
      Radius = 360
      For N = 0 To 364 Step 6
        X = XC + Radius * Cos(N * #PI / 180)
        Y = YC + Radius * Sin(N * #PI / 180)
        Circle(X,Y,3, RGB(128, 128, 128))
      Next

      ;Les Chiffres des heures 
      Digit=5
      Radius = 260
      DrawingFont(FontID(#FontHour))
      For N = 0 To 345 Step 15
        Digit+1
        If Digit>23
          Digit = 0
        EndIf
  
        X = XC + Radius * Cos(N * #PI / 180)
        Y = YC + Radius * Sin(N * #PI / 180)
        Buffer=Str(Digit)
  
        DrawingMode(#PB_2DDrawing_Transparent)
        DrawText(X-TextWidth(Buffer)/2, Y-TextHeight(Buffer)/2, Buffer, RGB(255, 255, 255))
        DrawingMode(#PB_2DDrawing_Default)
      Next
      
      ;Les Chiffres des minutes
      Digit=15
      Radius = 380
      DrawingFont(FontID(#FontMinute))
      For N = 1 To 359 Step 6
        Digit+1
        If Digit>60
          Digit = 1
        EndIf
  
        X = XC + Radius * Cos(N * #PI / 180)
        Y = YC + Radius * Sin(N * #PI / 180)
        Buffer=Str(Digit-1)
  
        DrawingMode(#PB_2DDrawing_Transparent)
        DrawText(X-TextWidth(Buffer)/2, Y-TextHeight(Buffer)/2, Buffer, RGB(255, 255, 255))
        DrawingMode(#PB_2DDrawing_Default)
      Next
      
      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

Je vous envie tous, vous les programmeurs qui n'ont pas eut d'avc !

Re: [Résolu] Tracer les chiffres d'une horloge 24 heures

Publié : jeu. 28/nov./2013 10:12
par MLD
Superbe :D :D
Merci a vous trois pour le partage :lol:

Re: [Résolu] Tracer les chiffres d'une horloge 24 heures

Publié : jeu. 28/nov./2013 12:09
par kernadec
bonjour
D' abort Merci pour le partage! :D
Peut être une option pour cette horloge car on pourrait avoir une lecture plus simple
en se disant que pour heure qui est en cours l'aiguille des heures devrait rester sur le chiffe de l'heure
exemple: pour 11h59 l'aiguille devrait être sur le 11 et passerai sur le 12 en même temps que les aiguilles des minutes et des secondes arrive sur le 60
qu'en pensez vous

Cordialement

Re: [Résolu] Tracer les chiffres d'une horloge 24 heures

Publié : jeu. 28/nov./2013 13:35
par Backup
...........