Horloge analogique paramètrable
Publié : sam. 05/oct./2024 17:45
Forme des aiguilles personnalisables
Couleur des aiguilles personnalisables
aiguilles pleines ou creuses
Sens de rotation des aiguilles inversable
Ajout possible de textes sur l'horloge
Ajout possible de décalage horaire pour chacune des horloges
Adaptation automatique aux ImageGadget
ATTENTION !
Dans la version précédente, un plantage se produisait après quelques heure de fonctionnement.
En effet, Dans l'objet Horloge : "Obj Horloge.pb", la mémoire graphique du cadran de l'horloge n'est pas libéré et surchargeait la mémoire lors de la CopyImage provocant un plantage.
C'est ici qu'il manquait la ligne suivante : FreeImage( \CadranHorloge )
A saisir manuellement ou téléchargez le nouveau code complet
Voici maintenant le code corrigé
L'objet Horloge : "Obj Horloge.pb"
Pour toutes information concernant la POO
veuillez consulter le forum de PureBasic.
Le code principal : "Horloge Principal.pb"
Le formulaire : "Horloge Form.pbf"
Couleur des aiguilles personnalisables
aiguilles pleines ou creuses
Sens de rotation des aiguilles inversable
Ajout possible de textes sur l'horloge
Ajout possible de décalage horaire pour chacune des horloges
Adaptation automatique aux ImageGadget
ATTENTION !

En effet, Dans l'objet Horloge : "Obj Horloge.pb", la mémoire graphique du cadran de l'horloge n'est pas libéré et surchargeait la mémoire lors de la CopyImage provocant un plantage.
C'est ici qu'il manquait la ligne suivante : FreeImage( \CadranHorloge )
A saisir manuellement ou téléchargez le nouveau code complet
Code : Tout sélectionner
Procedure Obj_Horloge_DessineAiguille ( *This.Obj_Horloge_Typ )
Protected .i i
With *This
FreeImage( \CadranHorloge ) ; Ligne ajoutee pour corriger le bug
\CadranHorloge = CopyImage ( \CadranFond , #PB_Any )
StartDrawing ( ImageOutput( \CadranHorloge ) )
SetOrigin ( \DimX / 2 , \DimY / 2 ) ; Place l'origine du tracé
DrawingMode( #PB_2DDrawing_Outlined )
Voici maintenant le code corrigé
L'objet Horloge : "Obj Horloge.pb"
Pour toutes information concernant la POO
veuillez consulter le forum de PureBasic.
Code : Tout sélectionner
;
; Programmation POO avec PureBasic V6.12
; Pour toutes information concernant la POO
; veuillez consulter le forum PureBasic.
; Il sera facile pour les initiés
; d'apporter les modifications dont ils auront besoins
;
Interface NewObj_Horloge
NewAiguille ( Typ.s )
AddPointAiguille ( Typ.s , Dx.w , Dy.w )
SetFill ( Typ.s , Dx.w , Dy.w )
SetColor ( Typ.s , Coul.i )
SetTime ( Time.q )
SetTexte ( Dx.w , Dy.w , Txt.s )
Free ( )
EndInterface
Structure Coordonnee
x .w
y .w
Ray .f
Arg .f
CoulOn .a
EndStructure
Structure Obj_Horloge_Typ
*DSVT
Diametre .f
Rayon .f
RadParSeconde_H .f
RadParSeconde_M .f
RadParSeconde_S .f
Sens .f
Couleur_H .l
Couleur_M .l
Couleur_S .l
CouleurFond .l
CouleurRepereCadran .l
NbPointAigui .a
NbPointAigui_H .b
NbPointAigui_M .b
NbPointAigui_S .b
GadgetImage .i
CadranFond .i
CadranHorloge .i
DimX .w
DimY .w
RayonMini .w
RayonMaxi .w
RayonUnit .w
OldSec .u
FillHeure .Coordonnee
FillMinute .Coordonnee
FillSeconde .Coordonnee
Array AiguilleHeure .Coordonnee ( 1 )
Array AiguilleMinute .Coordonnee ( 1 )
Array AiguilleSeconde .Coordonnee ( 1 )
EndStructure
; Procedures Privees
Procedure .f GetAngleRad ( Dx.f , Dy.f )
Protected .f ValTmp
ValTmp = ATan2( Dx, Dy)
If ValTmp < 0 : ValTmp + ( 2* #PI ) : EndIf
ProcedureReturn ValTmp
EndProcedure
Procedure .f GetModule ( Dx.f , Dy.f )
ProcedureReturn Sqr( Dx*Dx + Dy*Dy )
EndProcedure
Procedure .w GetCoordX ( Modul.f , Argum.f )
ProcedureReturn Modul * Cos( Argum )
EndProcedure
Procedure .w GetCoordY ( Modul.f , Argum.f )
ProcedureReturn Modul * Sin( Argum )
EndProcedure
Procedure Obj_Horloge_CalcPtsAiguille ( *This.Obj_Horloge_Typ , Rad_H.f , Rad_M.f , Rad_S.f )
Protected .i i
With *This
For i = 0 To \NbPointAigui_H
\AiguilleHeure( i )\x = GetCoordX( \AiguilleHeure( i )\Ray , \AiguilleHeure( i )\Arg + Rad_H )
\AiguilleHeure( i )\y = GetCoordY( \AiguilleHeure( i )\Ray , \AiguilleHeure( i )\Arg + Rad_H )
Next
\FillHeure\x = GetCoordX( \FillHeure\Ray , \FillHeure\Arg + Rad_H )
\FillHeure\y = GetCoordY( \FillHeure\Ray , \FillHeure\Arg + Rad_H )
For i = 0 To \NbPointAigui_M
\AiguilleMinute( i )\x = GetCoordX( \AiguilleMinute( i )\Ray , \AiguilleMinute( i )\Arg + Rad_M )
\AiguilleMinute( i )\y = GetCoordY( \AiguilleMinute( i )\Ray , \AiguilleMinute( i )\Arg + Rad_M )
Next
\FillMinute\x = GetCoordX( \FillMinute\Ray , \FillMinute\Arg + Rad_M )
\FillMinute\y = GetCoordY( \FillMinute\Ray , \FillMinute\Arg + Rad_M )
For i = 0 To \NbPointAigui_S
\AiguilleSeconde( i )\x = GetCoordX( \AiguilleSeconde( i )\Ray , \AiguilleSeconde( i )\Arg + Rad_S )
\AiguilleSeconde( i )\y = GetCoordY( \AiguilleSeconde( i )\Ray , \AiguilleSeconde( i )\Arg + Rad_S )
Next
\FillSeconde\X = GetCoordX( \FillSeconde\Ray , \FillSeconde\Arg + Rad_S )
\FillSeconde\Y = GetCoordY( \FillSeconde\Ray , \FillSeconde\Arg + Rad_S )
EndWith
EndProcedure
Procedure Obj_Horloge_DessineAiguille ( *This.Obj_Horloge_Typ )
Protected .i i
With *This
FreeImage( \CadranHorloge ) ; Ligne ajoutee pour corriger le bug
\CadranHorloge = CopyImage ( \CadranFond , #PB_Any )
StartDrawing ( ImageOutput ( \CadranHorloge ) )
SetOrigin ( \DimX / 2 , \DimY / 2 ) ; Place l'origine du tracé
DrawingMode( #PB_2DDrawing_Outlined )
FrontColor( \Couleur_S )
If \NbPointAigui_S > 0
For i = 0 To \NbPointAigui_S - 1
LineXY( \AiguilleSeconde( i )\x , -\AiguilleSeconde( i )\y , \AiguilleSeconde( i + 1 )\x , -\AiguilleSeconde( i + 1 )\y )
Next
ElseIf \NbPointAigui_S = 0
Circle ( \AiguilleSeconde( 0 )\x , -\AiguilleSeconde( i )\y , \RayonUnit )
EndIf
If \FillSeconde\CoulOn
FillArea( \FillSeconde\x , -\FillSeconde\y , \Couleur_S )
EndIf
FrontColor( \Couleur_M )
If \NbPointAigui_M > 0
For i = 0 To \NbPointAigui_M - 1
LineXY( \AiguilleMinute( i )\x , -\AiguilleMinute( i )\y , \AiguilleMinute( i + 1 )\x , -\AiguilleMinute( i + 1 )\y )
Next
ElseIf \NbPointAigui_M = 0
Circle ( \AiguilleMinute( 0 )\x , -\AiguilleMinute( i )\y , \RayonUnit )
EndIf
If \FillMinute\CoulOn
FillArea( \FillMinute\x , -\FillMinute\y , \Couleur_M )
EndIf
FrontColor( \Couleur_H )
If \NbPointAigui_H > 0
For i = 0 To \NbPointAigui_H - 1
LineXY( \AiguilleHeure( i )\x , -\AiguilleHeure( i )\y , \AiguilleHeure( i + 1 )\x , -\AiguilleHeure( i + 1 )\y )
Next
ElseIf \NbPointAigui_H = 0
Circle ( \AiguilleHeure( 0 )\x , -\AiguilleHeure( i )\y , \RayonUnit )
EndIf
If \FillHeure\CoulOn
FillArea( \FillHeure\x , -\FillHeure\y , \Couleur_H )
EndIf
FrontColor( \CouleurRepereCadran )
DrawingMode( #PB_2DDrawing_Default )
Circle ( 0, 0, 2 ) ; Trace L'axe des aiguilles sur le cadran
StopDrawing()
EndWith
EndProcedure
; Procedures Publiques
Procedure Obj_Horloge_NewAiguille ( *This.Obj_Horloge_Typ , Typ.s )
With *This
Select UCase( Typ )
Case "H"
\NbPointAigui_H = -1
\FillHeure\CoulOn = #False
;CaseEnd Utilisé uniquement pour le pliage du code
Case "M"
\NbPointAigui_M = -1
\FillMinute\CoulOn = #False
;CaseEnd Utilisé uniquement pour le pliage du code
Case "S"
\NbPointAigui_S = -1
\FillSeconde\CoulOn = #False
;CaseEnd Utilisé uniquement pour le pliage du code
Default
\NbPointAigui_H = -1
\NbPointAigui_M = -1
\NbPointAigui_S = -1
;DefaultEnd Utilisé uniquement pour le pliage du code
EndSelect
EndWith
EndProcedure
Procedure Obj_Horloge_AddPointAiguille ( *This.Obj_Horloge_Typ , Typ.s , Dx.w , Dy.w )
Protected .w X , Y
Protected .w Dmin , Dmax , DifX , DifY
With *This
X = \Rayon * Dx / 100
Y = \Rayon * Dy / 100
Select UCase( Typ )
Case "H"
\NbPointAigui_H + 1
If \NbPointAigui_H > \NbPointAigui
\NbPointAigui_H - 1
MessageRequester( "Limite atteinte" , Str( \NbPointAigui + 1 ) + " Points MAXI" , #PB_MessageRequester_Ok )
ProcedureReturn -1
Else
\AiguilleHeure ( \NbPointAigui_H )\X = X
\AiguilleHeure ( \NbPointAigui_H )\Y = Y
\AiguilleHeure ( \NbPointAigui_H )\Ray = GetModule ( X , Y )
\AiguilleHeure ( \NbPointAigui_H )\Arg = GetAngleRad ( X , Y )
EndIf
;CaseEnd Utilisé uniquement pour le pliage du code
Case "M"
\NbPointAigui_M + 1
If \NbPointAigui_M > \NbPointAigui
\NbPointAigui_M - 1
MessageRequester( "Limite atteinte" , Str( \NbPointAigui + 1 ) + " Points MAXI" , #PB_MessageRequester_Ok )
ProcedureReturn -1
Else
\AiguilleMinute ( \NbPointAigui_M )\X = X
\AiguilleMinute ( \NbPointAigui_M )\Y = Y
\AiguilleMinute ( \NbPointAigui_M )\Ray = GetModule ( X , Y )
\AiguilleMinute ( \NbPointAigui_M )\Arg = GetAngleRad ( X , Y )
EndIf
;CaseEnd Utilisé uniquement pour le pliage du code
Case "S"
\NbPointAigui_S + 1
If \NbPointAigui_S > \NbPointAigui
\NbPointAigui_S - 1
MessageRequester( "Limite atteinte" , Str( \NbPointAigui + 1 ) + " Points MAXI" , #PB_MessageRequester_Ok )
Else
\AiguilleSeconde ( \NbPointAigui_S )\X = X
\AiguilleSeconde ( \NbPointAigui_S )\Y = Y
\AiguilleSeconde ( \NbPointAigui_S )\Ray = GetModule ( X , Y )
\AiguilleSeconde ( \NbPointAigui_S )\Arg = GetAngleRad ( X , Y )
EndIf
;CaseEnd Utilisé uniquement pour le pliage du code
EndSelect
EndWith
EndProcedure
Procedure Obj_Horloge_SetFill ( *This.Obj_Horloge_Typ , Typ.s , Dx.w , Dy.w )
Protected .w X , Y
With *This
X = \Rayon * Dx / 100
Y = \Rayon * Dy / 100
Select UCase( Typ )
Case "H"
If \NbPointAigui_H > -1
\FillHeure\x = X
\FillHeure\y = Y
\FillHeure\Ray = GetModule ( X , Y )
\FillHeure\Arg = GetAngleRad ( X , Y )
\FillHeure\CoulOn = #True
EndIf
;CaseEnd Utilisé uniquement pour le pliage du code
Case "M"
If \NbPointAigui_M > -1
\FillMinute\x = X
\FillMinute\y = Y
\FillMinute\Ray = GetModule ( X , Y )
\FillMinute\Arg = GetAngleRad ( X , Y )
\FillMinute\CoulOn = #True
EndIf
;CaseEnd Utilisé uniquement pour le pliage du code
Case "S"
If \NbPointAigui_S > -1
\FillSeconde\x = X
\FillSeconde\y = Y
\FillSeconde\Ray = GetModule ( X , Y )
\FillSeconde\Arg = GetAngleRad ( X , Y )
\FillSeconde\CoulOn = #True
EndIf
;CaseEnd Utilisé uniquement pour le pliage du code
EndSelect
EndWith
EndProcedure
Procedure Obj_Horloge_SetColor ( *This.Obj_Horloge_Typ , Typ.s , Coul.i )
With *This
Select UCase( Typ )
Case "H"
\Couleur_H = Coul
;CaseEnd Utilisé uniquement pour le pliage du code
Case "M"
\Couleur_M = Coul
;CaseEnd Utilisé uniquement pour le pliage du code
Case "S"
\Couleur_S = Coul
;CaseEnd Utilisé uniquement pour le pliage du code
EndSelect
EndWith
EndProcedure
Procedure Obj_Horloge_SetTime ( *This.Obj_Horloge_Typ , Time.q )
Protected .u Heures , Minutes , Seconds
Protected .f AngleHeures , AngleMinutes , AngleSecondes
Heures = Hour ( Time )
Minutes = Minute ( Time )
Seconds = Second ( Time )
With *This
; Si changement de second
If Seconds <> \OldSec
; Calcule l'angle de chacunes des aiguilles
AngleHeures = -\Sens * \RadParSeconde_H * ( 3600 * Heures + 60 * Minutes + Seconds )
AngleMinutes = -\Sens * \RadParSeconde_M * ( 60 * Minutes + Seconds )
AngleSecondes = -\Sens * \RadParSeconde_S * Seconds
Obj_Horloge_CalcPtsAiguille ( *This , AngleHeures , AngleMinutes , AngleSecondes )
Obj_Horloge_DessineAiguille ( *This )
; Rafraichi l'affichage en Plaqant le fichier image dans l'objet ImageGadget
SetGadgetState ( \GadgetImage , ImageID( \CadranHorloge ) )
\OldSec = Seconds
EndIf
EndWith
EndProcedure
Procedure Obj_Horloge_SetTexte ( *This.Obj_Horloge_Typ , Dx.w , Dy.w , Txt.s )
StartDrawing ( ImageOutput( *This\CadranFond ) )
DrawText( Dx , Dy , Txt , #White , #Black )
StopDrawing()
EndProcedure
Procedure Obj_Horloge_Free ( *This.Obj_Horloge_Typ )
FreeMemory( *This )
EndProcedure
; Procedures d'initialisation de l'objet
Procedure .i Obj_Horloge_Init ( GadImg.i , ColFond.i , SensRot.f=1 )
Protected *Object.Obj_Horloge_Typ
*Object = AllocateMemory( SizeOf( Obj_Horloge_Typ ) )
If *Object
With *Object
\DSVT = ?Obj_Horloge_Class
\DimX = GadgetWidth ( GadImg )
\DimY = GadgetHeight ( GadImg )
If \DimX < \DimY : \Diametre = \DimX
Else : \Diametre = \DimY
EndIf
\Rayon = Int( \Diametre / 2.0 )
\RadParSeconde_H = #PI / 21600.0
\RadParSeconde_M = #PI / 1800.0
\RadParSeconde_S = #PI / 30.0
If SensRot > 0 : \Sens = 1
Else : \Sens = -1
EndIf
\Sens = Sign( SensRot )
\Couleur_H = $00ff00 ; ( B, V, R ) Vert
\Couleur_M = $ff0000 ; ( B, V, R ) Bleu
\Couleur_S = $0000ff ; ( B, V, R ) Rouge
\CouleurFond = ColFond
\CouleurRepereCadran = \CouleurFond ! $FFFFFF
\NbPointAigui = 31 ; ( 32 points maxi de 0 a 31 )
\NbPointAigui_H = -1
\NbPointAigui_M = -1
\NbPointAigui_S = -1
\GadgetImage = GadImg
\CadranFond = CreateImage ( #PB_Any , \DimX , \DimY , 32 , \CouleurFond )
\CadranHorloge = CopyImage ( \CadranFond , #PB_Any )
\RayonMini = 0.95 * \Rayon
\RayonMaxi = 0.99 * \Rayon
\RayonUnit = 0.05 * \Rayon
\OldSec = 0
\FillHeure\x = 0
\FillHeure\y = 0
\FillHeure\Ray = 0
\FillHeure\Arg = 0
\FillHeure\CoulOn = #False
\FillMinute\x = 0
\FillMinute\y = 0
\FillMinute\Ray = 0
\FillMinute\Arg = 0
\FillMinute\CoulOn = #False
\FillSeconde\x = 0
\FillSeconde\y = 0
\FillSeconde\Ray = 0
\FillSeconde\Arg = 0
\FillSeconde\CoulOn = #False
Dim \AiguilleHeure .Coordonnee( \NbPointAigui )
Dim \AiguilleMinute .Coordonnee( \NbPointAigui )
Dim \AiguilleSeconde .Coordonnee( \NbPointAigui )
; Initialise des aiguilles par defaut
; Aiguille des heures
Obj_Horloge_AddPointAiguille( *Object , "H" , 0 , 70 ) ; 0
Obj_Horloge_AddPointAiguille( *Object , "H" , 10 , 0 ) ; 1
Obj_Horloge_AddPointAiguille( *Object , "H" , 0 , -10 ) ; 2
Obj_Horloge_AddPointAiguille( *Object , "H" , -10 , 0 ) ; 3
Obj_Horloge_AddPointAiguille( *Object , "H" , 0 , 70 ) ; 4
; Aiguille des minutes
Obj_Horloge_AddPointAiguille( *Object , "M" , 0 , 80 ) ; 0
Obj_Horloge_AddPointAiguille( *Object , "M" , 5 , - 5 ) ; 1
Obj_Horloge_AddPointAiguille( *Object , "M" , 0 , -15 ) ; 2
Obj_Horloge_AddPointAiguille( *Object , "M" , - 5 , - 5 ) ; 3
Obj_Horloge_AddPointAiguille( *Object , "M" , 0 , 80 ) ; 4
; Aiguille des secondes
Obj_Horloge_AddPointAiguille( *Object , "S" , 0 , 90 ) ; 0
Obj_Horloge_AddPointAiguille( *Object , "S" , 5 , 0 ) ; 1
Obj_Horloge_AddPointAiguille( *Object , "S" , 0 , -30 ) ; 2
Obj_Horloge_AddPointAiguille( *Object , "S" , - 5 , 0 ) ; 3
Obj_Horloge_AddPointAiguille( *Object , "S" , 0 , 90 ) ; 4
; Initialise le cadran
Protected .w X1 , Y1 , X2 , Y2
Protected .f ValCos , ValSin
Protected .i i
StartDrawing ( ImageOutput( \CadranFond ) ) ; Demarre la procedure de tracé dans le fichier image
SetOrigin ( \DimX / 2 , \DimY / 2 ) ; Place l'origine du tracé
; Dessine les repère sur le cadran
FrontColor( \CouleurRepereCadran )
For i = 0 To 59
ValCos = Cos( i * \RadParSeconde_S )
ValSin = Sin( i * \RadParSeconde_S )
; Les repaires 1 minutes
X1 = \RayonMini
Y1 = \RayonMini
; Les repaires 5 minutes
If i % 5 = 0 : X1 - \RayonUnit : Y1 - \RayonUnit : EndIf
; Les repaires 15 minutes
If i % 15 = 0 : X1 - \RayonUnit : Y1 - \RayonUnit : EndIf
; Calcule les coordonnées du point 1
X1 = X1 * ValCos
Y1 = Y1 * ValSin
; Calcule les coordonnées du point 2
X2 = \RayonMaxi * ValCos
Y2 = \RayonMaxi * ValSin
; Trace les repaires sur le cadran
LineXY( X1 , -Y1 , X2 , -Y2 )
Next
Circle ( 0, 0, 2 ) ; Trace L'axe des aiguilles sur le cadran
StopDrawing( ) ; Termine la procedure de tracé dans le fichier image
EndWith
EndIf
ProcedureReturn *object
EndProcedure
DataSection
Obj_Horloge_Class:
Data.i @Obj_Horloge_NewAiguille ( )
Data.i @Obj_Horloge_AddPointAiguille ( )
Data.i @Obj_Horloge_SetFill ( )
Data.i @Obj_Horloge_SetColor ( )
Data.i @Obj_Horloge_SetTime ( )
Data.i @Obj_Horloge_SetTexte ( )
Data.i @Obj_Horloge_Free ( )
EndDataSection
; *******************
; *** Utilisation ***
; *******************
;
; MonHorloge .NewObj_Horloge = Obj_Horloge_Init ( GadImg.i , ColFond.i , SensRot.f=1 )
; MonHorloge\NewAiguille ( Typ.s )
; MonHorloge\AddPointAiguille ( Typ.s , Dx.w , Dy.w ) ; 32 points maxi
; MonHorloge\SetFill ( Typ.s , Dx.w , Dy.w )
; MonHorloge\SetTime ( Time.q )
; MonHorloge\SetColor ( Typ.s , Coul.i )
; MonHorloge\SetTexte ( Dx.w , Dy.w , Txt.s )
; MonHorloge\Free ( )
Code : Tout sélectionner
; PureBasic version 6.12
;
; Liste des fichier utilisés
; Ce fichier
; "Obj Horloge.pb"
; "Horloge Form.pbf"
;
; 7 horloges affiché dans une fenêtre
; Forme des aiguilles personnalisables
; Couleur des aiguilles personnalisables
; aiguilles pleines ou creuses
; Sens de rotation des aiguilles inversable
; Ajout possible de textes sur l'horloge
; Ajout possible de décalage horaire pour chacune des horloges
XIncludeFile "Obj Horloge.pb"
; Les commandes de l'objet :
; MonHorloge .NewObj_Horloge = Obj_Horloge_Init ( GadImg.i , ColFond.i , SensRot.f=1 )
; MonHorloge\NewAiguille ( Typ.s )
; MonHorloge\AddPointAiguille ( Typ.s , Dx.w , Dy.w ) ; 32 points maxi
; MonHorloge\SetFill ( Typ.s , Dx.w , Dy.w )
; MonHorloge\SetTime ( Time.q )
; MonHorloge\SetColor ( Typ.s , Coul.i )
; MonHorloge\SetTexte ( Dx.w , Dy.w , Txt.s )
; MonHorloge\Free ( )
XIncludeFile "Horloge Form.pbf"
OpenWindow_0( )
; ***********************
; * Horloge N°1 *
; * *
CouleurDuFond .i = #Black
SensDeRotation .b = -1 ; Sens inverse
Global MonHorloge1 .NewObj_Horloge = Obj_Horloge_Init ( #ImageGadget_1 , CouleurDuFond , SensDeRotation )
MonHorloge1\SetTexte ( 5 , 5 , "N°1" )
MonHorloge1\SetTexte ( 160 , 5 , "PB 6.12" )
; une seule coordonnée dessinera un cercle vide ou plein
; Aiguille des heures
MonHorloge1\NewAiguille ( "H" ) ; Remise à 0 de l' aiguilles des Heures
MonHorloge1\AddPointAiguille ( "H" , 0 , 70 ) ; Place un point au coordonnées x et y
MonHorloge1\SetFill ( "H" , 0 , 70 ) ; Active le remplissage à cette coordonnée
; Aiguille des minutes
MonHorloge1\NewAiguille ( "M" ) ; Remise à 0 de l' aiguilles des Minutes
MonHorloge1\AddPointAiguille ( "M" , 0 , 80 )
;MonHorloge1\SetFill ( "M" , 0 , 80 ) ; Si non défini alors le remplissage n'est pas activé
; Aiguille des secondes
MonHorloge1\NewAiguille ( "S" ) ; Remise à 0 de l' aiguilles des Secondes
MonHorloge1\AddPointAiguille ( "S" , 0 , 90 )
;MonHorloge1\SetFill ( "S" , 0 , 90 )
; ***********************
; * Horloge N°2 *
; * *
CouleurDuFond .i = $000080
SensDeRotation .b = 1 ; Sens normal
Global MonHorloge2 .NewObj_Horloge = Obj_Horloge_Init ( #ImageGadget_2 , CouleurDuFond , SensDeRotation )
MonHorloge2\SetTexte ( 5 , 5 , "N°2" )
MonHorloge2\NewAiguille ( "" ) ; Remise à 0 de toutes les aiguilles
; Aiguille des heures
MonHorloge2\AddPointAiguille ( "H" , 0 , 70 ) ; Point 1
MonHorloge2\AddPointAiguille ( "H" , 0 , -10 ) ; Point 2
; Aiguille des minutes
MonHorloge2\AddPointAiguille ( "M" , 0 , 80 ) ; Point 1
MonHorloge2\AddPointAiguille ( "M" , 0 , -20 ) ; Point 2
; Aiguille des secondes
MonHorloge2\AddPointAiguille ( "S" , 0 , 90 ) ; Point 1
MonHorloge2\AddPointAiguille ( "S" , 0 , -30 ) ; Point 2
; ***********************
; * Horloge N°3 *
; * *
CouleurDuFond .i = RGB( $00 , $80 , $00 )
SensDeRotation .b = 1
Global MonHorloge3 .NewObj_Horloge = Obj_Horloge_Init ( #ImageGadget_3 , CouleurDuFond , SensDeRotation )
MonHorloge3\SetTexte ( 5 , 5 , "N°3" )
MonHorloge3\NewAiguille ( "" ) ; Remise à 0 de toutes les aiguilles
; Aiguille des heures
MonHorloge3\AddPointAiguille ( "H" , -15 , -10 ) ; Point 1
MonHorloge3\AddPointAiguille ( "H" , 0 , 70 ) ; Point 2
MonHorloge3\AddPointAiguille ( "H" , 15 , -10 ) ; Point 3
; Aiguille des minutes
MonHorloge3\AddPointAiguille ( "M" , -10 , -20 ) ; Point 1
MonHorloge3\AddPointAiguille ( "M" , 0 , 80 ) ; Point 2
MonHorloge3\AddPointAiguille ( "M" , 10 , -20 ) ; Point 3
; Aiguille des secondes
MonHorloge3\AddPointAiguille ( "S" , - 5 , -30 ) ; Point 1
MonHorloge3\AddPointAiguille ( "S" , 0 , 90 ) ; Point 2
MonHorloge3\AddPointAiguille ( "S" , 5 , -30 ) ; Point 3
; ***********************
; * Horloge N°4 *
; * *
CouleurDuFond .i = $800000
SensDeRotation .b = 1
Global MonHorloge4 .NewObj_Horloge = Obj_Horloge_Init ( #ImageGadget_4 , CouleurDuFond , SensDeRotation )
MonHorloge4\SetTexte ( 5 , 5 , "N°4" )
MonHorloge4\NewAiguille ( "" ) ; Remise à 0 de toutes les aiguilles
; Aiguille des heures
MonHorloge4\AddPointAiguille ( "H" , -15 , -10 ) ; Point 1
MonHorloge4\AddPointAiguille ( "H" , 0 , 70 ) ; Point 2
MonHorloge4\AddPointAiguille ( "H" , 15 , -10 ) ; Point 3
MonHorloge4\AddPointAiguille ( "H" , -15 , -10 ) ; Point 4
MonHorloge4\SetColor ( "H" , $FFFF00 ) ; Redéfinition de la couleur de l'aiguille
MonHorloge4\SetFill ( "H" , 0 , 0 ) ; Active le remplissage à cette coordonnée
; Aiguille des minutes
MonHorloge4\AddPointAiguille ( "M" , -10 , -20 ) ; Point 1
MonHorloge4\AddPointAiguille ( "M" , 0 , 80 ) ; Point 2
MonHorloge4\AddPointAiguille ( "M" , 10 , -20 ) ; Point 3
MonHorloge4\AddPointAiguille ( "M" , -10 , -20 ) ; Point 4
MonHorloge4\SetColor ( "m" , $FF00FF ) ; Redéfinition de la couleur de l'aiguille
MonHorloge4\SetFill ( "M" , 0 , 0 ) ; Active le remplissage à cette coordonnée
; Aiguille des secondes
MonHorloge4\AddPointAiguille ( "S" , - 5 , -30 ) ; Point 1
MonHorloge4\AddPointAiguille ( "S" , 0 , 90 ) ; Point 2
MonHorloge4\AddPointAiguille ( "S" , 5 , -30 ) ; Point 3
MonHorloge4\AddPointAiguille ( "S" , - 5 , -30 ) ; Point 4
MonHorloge4\SetColor ( "s" , $00FFFF ) ; Redéfinition de la couleur de l'aiguille
MonHorloge4\SetFill ( "S" , 0 , 0 ) ; Active le remplissage à cette coordonnée
; ***********************
; * Horloge N°5 *
; * *
CouleurDuFond .i = $008080
SensDeRotation .b = 1
Global MonHorloge5 .NewObj_Horloge = Obj_Horloge_Init ( #ImageGadget_5 , CouleurDuFond , SensDeRotation )
MonHorloge5\SetTexte ( 5 , 5 , "N°5" )
MonHorloge5\NewAiguille ( "" ) ; Remise à 0 de toutes les aiguilles
; Aiguille des heures
MonHorloge5\AddPointAiguille ( "H" , 0 , 70 ) ; Point 1
MonHorloge5\AddPointAiguille ( "H" , 5 , -10 ) ; Point 2
MonHorloge5\AddPointAiguille ( "H" , 0 , 0 ) ; Point 3
MonHorloge5\AddPointAiguille ( "H" , - 5 , -10 ) ; Point 4
MonHorloge5\AddPointAiguille ( "H" , 0 , 70 ) ; Point 5
MonHorloge5\SetFill ( "H" , 0 , 5 ) ; Active le remplissage à cette coordonnée
; Aiguille des minutes
MonHorloge5\AddPointAiguille ( "M" , 0 , 80 ) ; Point 1
MonHorloge5\AddPointAiguille ( "M" , 5 , -20 ) ; Point 2
MonHorloge5\AddPointAiguille ( "M" , 0 , 0 ) ; Point 3
MonHorloge5\AddPointAiguille ( "M" , - 5 , -20 ) ; Point 4
MonHorloge5\AddPointAiguille ( "M" , 0 , 80 ) ; Point 5
MonHorloge5\SetFill ( "M" , 0 , 5 ) ; Active le remplissage à cette coordonnée
; Aiguille des secondes
MonHorloge5\AddPointAiguille ( "S" , 0 , 90 ) ; Point 1
MonHorloge5\AddPointAiguille ( "S" , 5 , -30 ) ; Point 2
MonHorloge5\AddPointAiguille ( "S" , 0 , 0 ) ; Point 3
MonHorloge5\AddPointAiguille ( "S" , - 5 , -30 ) ; Point 4
MonHorloge5\AddPointAiguille ( "S" , 0 , 90 ) ; Point 5
MonHorloge5\SetFill ( "S" , 0 , 5 ) ; Active le remplissage à cette coordonnée
; ***********************
; * Horloge N°6 *
; * *
CouleurDuFond .i = $800080
SensDeRotation .b = -1
Global MonHorloge6 .NewObj_Horloge = Obj_Horloge_Init ( #ImageGadget_6 , CouleurDuFond , SensDeRotation )
MonHorloge6\SetTexte ( 5 , 5 , "N°6" )
MonHorloge6\NewAiguille ( "" ) ; Remise à 0 de toutes les aiguilles
; Aiguille des heures
MonHorloge6\AddPointAiguille ( "H" , -10 , -10 ) ; Point 1
MonHorloge6\AddPointAiguille ( "H" , -10 , 60 ) ; Point 2
MonHorloge6\AddPointAiguille ( "H" , 0 , 70 ) ; Point 3
MonHorloge6\AddPointAiguille ( "H" , 10 , 60 ) ; Point 4
MonHorloge6\AddPointAiguille ( "H" , 10 , -10 ) ; Point 5
MonHorloge6\AddPointAiguille ( "H" , -06 , -10 ) ; Point 6
MonHorloge6\AddPointAiguille ( "H" , -06 , 58 ) ; Point 7
MonHorloge6\AddPointAiguille ( "H" , 0 , 64 ) ; Point 8
MonHorloge6\AddPointAiguille ( "H" , 6 , 58 ) ; Point 9
MonHorloge6\AddPointAiguille ( "H" , 6 , - 6 ) ; Point 10
; Aiguille des minutes
MonHorloge6\AddPointAiguille ( "M" , -10 , -10 ) ; Point 1
MonHorloge6\AddPointAiguille ( "M" , -10 , 70 ) ; Point 2
MonHorloge6\AddPointAiguille ( "M" , 0 , 80 ) ; Point 3
MonHorloge6\AddPointAiguille ( "M" , 10 , 70 ) ; Point 4
MonHorloge6\AddPointAiguille ( "M" , 10 , -10 ) ; Point 5
MonHorloge6\AddPointAiguille ( "M" , - 6 , -10 ) ; Point 6
MonHorloge6\AddPointAiguille ( "M" , - 6 , 68 ) ; Point 7
MonHorloge6\AddPointAiguille ( "M" , 0 , 74 ) ; Point 8
MonHorloge6\AddPointAiguille ( "M" , 6 , 68 ) ; Point 9
MonHorloge6\AddPointAiguille ( "M" , 6 , - 6 ) ; Point 10
; Aiguille des secondes
MonHorloge6\AddPointAiguille ( "S" , -10 , -10 ) ; Point 1
MonHorloge6\AddPointAiguille ( "S" , -10 , 80 ) ; Point 2
MonHorloge6\AddPointAiguille ( "S" , 0 , 90 ) ; Point 3
MonHorloge6\AddPointAiguille ( "S" , 10 , 80 ) ; Point 4
MonHorloge6\AddPointAiguille ( "S" , 10 , -10 ) ; Point 5
MonHorloge6\AddPointAiguille ( "S" , - 6 , -10 ) ; Point 6
MonHorloge6\AddPointAiguille ( "S" , -06 , 78 ) ; Point 7
MonHorloge6\AddPointAiguille ( "S" , 0 , 84 ) ; Point 8
MonHorloge6\AddPointAiguille ( "S" , 6 , 78 ) ; Point 9
MonHorloge6\AddPointAiguille ( "S" , 6 , - 6 ) ; Point 10
; ***********************
; * Horloge N°7 *
; * *
CouleurDuFond .i = #White
SensDeRotation .b = -1
Global MonHorloge7 .NewObj_Horloge = Obj_Horloge_Init ( #ImageGadget_7 , CouleurDuFond , SensDeRotation )
MonHorloge7\SetTexte ( 5 , 5 , "N°7" )
MonHorloge7\NewAiguille ( "" ) ; Remise à 0 de toutes les aiguilles
; Aiguille des heures
MonHorloge7\AddPointAiguille ( "H" , 0 , -10 ) ; Point 1
MonHorloge7\AddPointAiguille ( "H" , -15 , -10 ) ; Point 2
MonHorloge7\AddPointAiguille ( "H" , 0 , 70 ) ; Point 3
MonHorloge7\AddPointAiguille ( "H" , 15 , -10 ) ; Point 4
MonHorloge7\AddPointAiguille ( "H" , 0 , -10 ) ; Point 5
MonHorloge7\AddPointAiguille ( "H" , 0 , - 5 ) ; Point 6
MonHorloge7\AddPointAiguille ( "H" , -10 , - 5 ) ; Point 7
MonHorloge7\AddPointAiguille ( "H" , 0 , 50 ) ; Point 8
MonHorloge7\AddPointAiguille ( "H" , 10 , - 5 ) ; Point 9
MonHorloge7\AddPointAiguille ( "H" , 0 , - 5 ) ; Point 10
MonHorloge7\SetColor ( "H" , $000080 ) ; Redéfinition de la couleur de l'aiguille
MonHorloge7\SetFill ( "H" , 5 , - 7 ) ; Active le remplissage à cette coordonnée
; Aiguille des minutes
MonHorloge7\AddPointAiguille ( "M" , 0 , -15 ) ; Point 1
MonHorloge7\AddPointAiguille ( "M" , -15 , -15 ) ; Point 2
MonHorloge7\AddPointAiguille ( "M" , 0 , 80 ) ; Point 3
MonHorloge7\AddPointAiguille ( "M" , 15 , -15 ) ; Point 4
MonHorloge7\AddPointAiguille ( "M" , 0 , -15 ) ; Point 5
MonHorloge7\AddPointAiguille ( "M" , 0 , -10 ) ; Point 6
MonHorloge7\AddPointAiguille ( "M" , -10 , -10 ) ; Point 7
MonHorloge7\AddPointAiguille ( "M" , 0 , 60 ) ; Point 8
MonHorloge7\AddPointAiguille ( "M" , 10 , -10 ) ; Point 9
MonHorloge7\AddPointAiguille ( "M" , 0 , -10 ) ; Point 10
MonHorloge7\SetColor ( "M" , $008000 ) ; Redéfinition de la couleur de l'aiguille
MonHorloge7\SetFill ( "M" , 5 , -12 ) ; Active le remplissage à cette coordonnée
; Aiguille des secondes
MonHorloge7\AddPointAiguille ( "S" , 0 , -20 ) ; Point 1
MonHorloge7\AddPointAiguille ( "S" , -15 , -20 ) ; Point 2
MonHorloge7\AddPointAiguille ( "S" , 0 , 90 ) ; Point 3
MonHorloge7\AddPointAiguille ( "S" , 15 , -20 ) ; Point 4
MonHorloge7\AddPointAiguille ( "S" , 0 , -20 ) ; Point 5
MonHorloge7\AddPointAiguille ( "S" , 0 , -15 ) ; Point 6
MonHorloge7\AddPointAiguille ( "S" , -10 , -15 ) ; Point 7
MonHorloge7\AddPointAiguille ( "S" , 0 , 70 ) ; Point 8
MonHorloge7\AddPointAiguille ( "S" , 10 , -15 ) ; Point 9
MonHorloge7\AddPointAiguille ( "S" , 0 , -15 ) ; Point 10
MonHorloge7\SetColor ( "s" , $800000 ) ; Redéfinition de la couleur de l'aiguille
MonHorloge7\SetFill ( "S" , 5 , -17 ) ; Active le remplissage à cette coordonnée
#PL_Timer_1 = 1
AddWindowTimer ( #Window_0 , #PL_Timer_1 , 100 )
;*********************
;* Boucle principale *
;*********************
;- Boucle de gestion des evenements
Repeat
; On attend qu'un évènement se produise
Evenement = WaitWindowEvent( )
; Si le Timer " #PL_Timer_1 " a cree l'évènement alors ont met l'horloge a jour
If Evenement = #PB_Event_Timer And EventTimer( ) = #PL_Timer_1
; Ajout d'un décalage horaire aux horloges
Date1.q = Date ( ) ; Date du jour
Date1 = AddDate ( Date1 ,#PB_Date_Hour , 2 ) ; Date du jour + 2 heures
Date1 = AddDate ( Date1 ,#PB_Date_Minute , -15 ) ; Date du jour - 15 Minutes
Date1 = AddDate ( Date1 ,#PB_Date_Second , -45 ) ; Date du jour - 45 secondes
MonHorloge1\SetTime ( Date1) ; Mise à jour de l'horloge 1
Date1.q = Date ( )
Date1 = AddDate ( Date1 ,#PB_Date_Hour , 4 )
Date1 = AddDate ( Date1 ,#PB_Date_Minute , -30 )
Date1 = AddDate ( Date1 ,#PB_Date_Second , -30 )
MonHorloge2\SetTime ( Date1 ) ; Mise à jour de l'horloge 2
Date1.q = Date ( )
Date1 = AddDate ( Date1 ,#PB_Date_Hour , 6 )
Date1 = AddDate ( Date1 ,#PB_Date_Minute , -45 )
Date1 = AddDate ( Date1 ,#PB_Date_Second , -15 )
MonHorloge3\SetTime ( Date1 ) ; Mise à jour de l'horloge 3
Date1.q = Date ( )
Date1 = AddDate ( Date1 ,#PB_Date_Hour , - 6 )
Date1 = AddDate ( Date1 ,#PB_Date_Minute , 45 )
Date1 = AddDate ( Date1 ,#PB_Date_Second , 15 )
MonHorloge4\SetTime ( Date1 ) ; Mise à jour de l'horloge 4
Date1.q = Date ( )
Date1 = AddDate ( Date1 ,#PB_Date_Hour , - 2 )
Date1 = AddDate ( Date1 ,#PB_Date_Minute , 15 )
Date1 = AddDate ( Date1 ,#PB_Date_Second , 45 )
MonHorloge5\SetTime ( Date1 ) ; Mise à jour de l'horloge 5
Date1.q = Date ( )
Date1 = AddDate ( Date1 ,#PB_Date_Hour , - 4 )
Date1 = AddDate ( Date1 ,#PB_Date_Minute , 30 )
Date1 = AddDate ( Date1 ,#PB_Date_Second , 30 )
MonHorloge6\SetTime ( Date1 ) ; Mise à jour de l'horloge 6
; Date et heure courante du système
Date1.q = Date ( )
MonHorloge7\SetTime ( Date1 ) ; Mise à jour de l'horloge 7
EndIf
Until Evenement = #PB_Event_CloseWindow ; Ferme la fenêtres en quittant
Code : Tout sélectionner
;
; This code is automatically generated by the Form Designer.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures need to be put in another source file.
;
Enumeration FormWindow
#Window_0
EndEnumeration
Enumeration FormGadget
#ImageGadget_1
#ImageGadget_3
#ImageGadget_7
#ImageGadget_4
#ImageGadget_5
#ImageGadget_6
#ImageGadget_2
EndEnumeration
Procedure OpenWindow_0(x = 0, y = 0, width = 728, height = 440)
OpenWindow(#Window_0, x, y, width, height, "Horloge", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ImageGadget(#ImageGadget_1, 10, 10, 214, 134, 0, #PB_Image_Border)
ImageGadget(#ImageGadget_3, 8, 152, 216, 112, 0, #PB_Image_Border)
ImageGadget(#ImageGadget_7, 232, 8, 260, 256, 0, #PB_Image_Border)
ImageGadget(#ImageGadget_4, 8, 272, 484, 161, 0, #PB_Image_Border)
ImageGadget(#ImageGadget_5, 504, 8, 212, 137, 0, #PB_Image_Border)
ImageGadget(#ImageGadget_6, 504, 152, 212, 137, 0, #PB_Image_Border)
ImageGadget(#ImageGadget_2, 504, 296, 212, 137, 0, #PB_Image_Border)
EndProcedure