Calendrier
Publié : mer. 28/janv./2004 21:28
un "petit" code pour faire un calendrier (320 lignes quoi, c petit pour moi)
cela donne ceci :

cela donne ceci :

Code : Tout sélectionner
Global Date.s, heure.s, Texte.s, Fichier.s, PosFenX.l, PosFenY.l, Creation.l
Enumeration
; Windows
#Postit
#Edition
; Image
#Calendrier
#Image_Heure
#Image_Min
#Image_Texte
; Gadget
#Texte
#Heure
#Min
#Valider
#Annuler
#DateJour
; PopupMenu
#Menu_Option
#Menu_Option_Edition
#Menu_Option_Jeter
; Police d'écriture
EndEnumeration
#TailleX = 150
#TailleY = 108
#Angle = 20
#Bordure = 5
#Espace_bouton = 40
#LigneMax = 5
Procedure.s Jour(n.l)
Select n
Case 0 : Jour.s = "Dim"
Case 1 : Jour.s = "Lun"
Case 2 : Jour.s = "Mar"
Case 3 : Jour.s = "Mer"
Case 4 : Jour.s = "Jeu"
Case 5 : Jour.s = "Ven"
Case 6 : Jour.s = "Sam"
EndSelect
ProcedureReturn Jour
EndProcedure
Procedure.s Mois(n.l)
Select n
Case 1 : Mois.s = "Jan."
Case 2 : Mois.s = "Fev."
Case 3 : Mois.s = "Mars"
Case 4 : Mois.s = "Avr."
Case 5 : Mois.s = "Mai"
Case 6 : Mois.s = "Juin"
Case 7 : Mois.s = "Juil."
Case 8 : Mois.s = "Août"
Case 9 : Mois.s = "Sep."
Case 10 : Mois.s = "Oct."
Case 11 : Mois.s = "Nov."
Case 12 : Mois.s = "Déc."
EndSelect
ProcedureReturn Mois
EndProcedure
Procedure.l NumeroMois(n.s)
Select n
Case "Jan." : Mois = 1
Case "Fev." : Mois = 2
Case "Mars" : Mois = 3
Case "Avr." : Mois = 4
Case "Mai" : Mois = 5
Case "Juin" : Mois = 6
Case "Juil." : Mois = 7
Case "Août" : Mois = 8
Case "Sep." : Mois = 9
Case "Oct." : Mois = 10
Case "Nov." : Mois = 11
Case "Déc." : Mois = 12
EndSelect
ProcedureReturn Mois
EndProcedure
Procedure Image_Calendrier(x.l, y.l)
#LargeurCalendrier = 211
#HauteurCalendrier = 127
UseImage(#Calendrier)
StartDrawing(ImageOutput())
; Dessin des rectangles
Box(1, 1, #LargeurCalendrier - 2, 13, $FFFFFF)
For n = 0 To 6
For nn = 0 To 5
Box(1 + n * 30, 15 + nn * 16, 29, 15)
Next
Next
Box(1, 111, 15, 15)
Box(17, 111, 177, 15)
Box(195, 111, 15, 15)
; Chargement de la police
FontID = LoadFont(0, "arial", 8, #PB_Font_HighQuality)
DrawingFont(FontID)
DrawingMode(1 | 4)
FrontColor(0, 0, 0)
; Affichage des jours de la semaine
For n = 0 To 6
Locate(1 + n * 30 + (30 - TextLength(Jour(n))) / 2, 1)
DrawText(Jour(n))
Next
; Calcul de la date
If Left(Date, 1) = "?"
Calendrier = Date()
Annee = Year(Calendrier)
Mois = Month(Calendrier)
Jour = Day(Calendrier)
Date = Jour(DayOfWeek(Calendrier)) + " " + Str(Jour) + " " + Mois(Mois) + " " + Str(Annee)
Else
Annee = Val(StringField(Date, 4, " "))
Mois = NumeroMois(StringField(Date, 3, " "))
Jour = Val(StringField(Date, 2, " "))
EndIf
If x > 1 And x < 16 And y > 111 And y < 126
Mois - 1
If Mois < 1
Annee - 1
Mois = 12
EndIf
Jour = 1
Date = Jour(DayOfWeek(Date(Annee, Mois, 1, 0, 0, 0))) + " " + Str(Jour) + " " + Mois(Mois) + " " + Str(Annee)
EndIf
If x > 195 And x < 210 And y > 111 And y < 126
Mois + 1
If Mois > 12
Annee + 1
Mois = 1
EndIf
Jour = 1
Date = Jour(DayOfWeek(Date(Annee, Mois, 1, 0, 0, 0))) + " " + Str(Jour) + " " + Mois(Mois) + " " + Str(Annee)
EndIf
; Affichage des jours
Calendrier = Date(Annee, Mois, 1, 0, 0, 0)
Ligne = 0
Repeat
JourSemaine = DayOfWeek(Calendrier)
Jour2 = Day(Calendrier)
Locate(1 + JourSemaine * 30 + (30 - TextLength(Str(Jour2))) / 2, 16 + Ligne * 16)
DrawText(Str(Jour2))
If x > 1 + JourSemaine * 30 And x < 30 + JourSemaine * 30 And y > 15 + Ligne * 16 And y < 30 + Ligne * 16
Date = Jour(JourSemaine) + " " + Str(Jour2) + " " + Mois(Mois) + " " + Str(Annee)
Jour = Day(Calendrier)
EndIf
Calendrier = AddDate(Calendrier, #PB_Date_Day, 1)
If JourSemaine = 6 : Ligne + 1 : EndIf
Until Month(Calendrier) <> Mois
; Affichage du mois
Locate(17 + (177 - TextLength(Date)) / 2, 112)
DrawText(Date)
; Affichage des flèches
CloseFont(0)
FontID = LoadFont(0, "arial", 10, #PB_Font_HighQuality)
DrawingFont(FontID)
Locate(4, 110)
DrawText("<")
Locate(199, 110)
DrawText(">")
; Affichage du jour choisi
Calendrier = Date(Annee, Mois, 1, 0, 0, 0)
Ligne = 0
Repeat
JourSemaine = DayOfWeek(Calendrier)
If Day(Calendrier) = Jour
Box(1 + JourSemaine * 30, 15 + Ligne * 16, 29, 15, $FF)
EndIf
Calendrier = AddDate(Calendrier, #PB_Date_Day, 1)
If JourSemaine = 6 : Ligne + 1 : EndIf
Until Month(Calendrier) <> Mois
CloseFont(0)
StopDrawing()
SetGadgetState(#Calendrier, UseImage(#Calendrier))
EndProcedure
Procedure Image()
FontID = LoadFont(0, "arial", 10, #PB_Font_HighQuality)
CreateImage(#Image_Heure, 119, 15)
StartDrawing(ImageOutput())
Box(1, 1, 58, 14, $FFFFFF)
Box(60, 1, 58, 14, $FFFFFF)
DrawingFont(FontID)
DrawingMode(1)
FrontColor(0, 0, 0)
Locate(1 + (58 - TextLength("Heure")) / 2, 0)
DrawText("Heure")
Locate(60 + (58 - TextLength("Minute")) / 2, 0)
DrawText("Minute")
StopDrawing()
CloseFont(0)
EndProcedure
;- debut du prog
; on charge la date et l'heure
Heure = "??h??"
Date = "??? ?? ??? ????"
If OpenWindow(#Edition, 0, 0, #LargeurCalendrier + 6, 200, #PB_Window_WindowCentered, "Edition")
If CreateGadgetList(WindowID())
GetWindowRect_(WindowID(), @Taille_Fenetre.rect)
Largeur_Fenetre = Taille_Fenetre\Right - Taille_Fenetre\Left
Hauteur_Fenetre = Taille_Fenetre\Bottom - Taille_Fenetre\top
Largeur_Bordure = (Largeur_Fenetre - WindowWidth()) / 2
Hauteur_Titre = Hauteur_Fenetre - WindowHeight() - Largeur_Bordure
CreateImage(#Calendrier, #LargeurCalendrier, #HauteurCalendrier)
ImageGadget(#Calendrier, 3, 3, #LargeurCalendrier, #HauteurCalendrier, UseImage(#Calendrier))
Image_Calendrier(0, 0)
Image()
ImageGadget(#Image_Heure, 3, 6 + #HauteurCalendrier, 119, 15, UseImage(#Image_Heure))
ComboBoxGadget(#Heure, 3, 6 + #HauteurCalendrier + 15, 60, 200)
For n = 0 To 23
AddGadgetItem(#Heure, -1, Str(n))
Next
ComboBoxGadget(#Min, 63, 6 + #HauteurCalendrier + 15, 60, 200)
For n = 0 To 11
AddGadgetItem(#Min, -1, Str(n * 5))
Next
If Left(Heure, 1) = "?"
SetGadgetState(#Heure, Hour(Date()))
SetGadgetState(#Min, Minute(Date()) / 5)
Heure = GetGadgetText(#Heure) + "h" + RSet(GetGadgetText(#Min), 2, "0")
Else
SetGadgetState(#Heure, Val(StringField(Heure, 1, "h")))
SetGadgetState(#Min, Val(StringField(Heure, 2, "h")) / 5)
EndIf
ButtonGadget(#Valider, 3, #HauteurCalendrier + 50, #LargeurCalendrier, 22, "Valider")
ButtonGadget(#DateJour, 126, 6 + #HauteurCalendrier, #LargeurCalendrier - 123, 35, "Date et heure actuelles", #PB_Button_MultiLine)
Repeat
Event = WaitWindowEvent()
If Event = #WM_LButtonDown
x = WindowMouseX() - Largeur_Bordure - 3
y = WindowMouseY() - Hauteur_Titre - 3
If x > 0 And x < #LargeurCalendrier And y > 0 And y < #HauteurCalendrier
Image_Calendrier(x, y)
EndIf
EndIf
If Event = #PB_EventGadget
Select EventGadgetID() ; boutons, zone de texte, ...
Case #Valider
Event = #WM_CLOSE
Case #Heure
Heure = GetGadgetText(#Heure) + "h" + RSet(GetGadgetText(#Min), 2, "0")
Case #Min
Heure = GetGadgetText(#Heure) + "h" + RSet(GetGadgetText(#Min), 2, "0")
Case #DateJour
Calendrier = Date()
Annee = Year(Calendrier)
Mois = Month(Calendrier)
Jour = Day(Calendrier)
Date = Jour(DayOfWeek(Calendrier)) + " " + Str(Jour) + " " + Mois(Mois) + " " + Str(Annee)
Image_Calendrier(0, 0)
SetGadgetState(#Heure, Hour(Calendrier))
SetGadgetState(#Min, Minute(Calendrier) / 5)
Heure = GetGadgetText(#Heure) + "h" + RSet(GetGadgetText(#Min), 2, "0")
EndSelect
EndIf
Until Event = #WM_CLOSE
EndIf
CloseWindow(#Edition)
EndIf
Debug Date
Debug Heure