Liste pour exécuter dans un programme tiers
Liste pour exécuter dans un programme tiers
Bonjour à tous,
fabriquer une horloge avec PB, je sais faire.
Ce que je souhaite faire c'est une liste que le programme de l'horloge charge et exécute par exemple "Rendez-vous à 16 heures 20 avec le docteur Machin" et à l'heure indiquée elle dirait le message grâce au système S.A.P.I.
Je sais faire cette chose en programmant en dur, mais j'aimerais utiliser une liste de commande en chargeant une base de données.
Pouvez-vous me mettre sur la voie ? Je ne vous remercierai jamais assez.
fabriquer une horloge avec PB, je sais faire.
Ce que je souhaite faire c'est une liste que le programme de l'horloge charge et exécute par exemple "Rendez-vous à 16 heures 20 avec le docteur Machin" et à l'heure indiquée elle dirait le message grâce au système S.A.P.I.
Je sais faire cette chose en programmant en dur, mais j'aimerais utiliser une liste de commande en chargeant une base de données.
Pouvez-vous me mettre sur la voie ? Je ne vous remercierai jamais assez.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Liste pour exécuter dans un programme tiers
Je te dirai que SATI est SAPI, que tu importes ton texte d'un string ou d'une BDD c'est pareil.
Il te faut poser un genre de plan :
- 1 stocker rendez vous et heure dans BDD
- 2 avoir un timer qui vérifie l'heure/minute
- 3 avoir un timer qui vérifie la bdd.
Faudrait que tu post un truc minimaliste.
Il te faut poser un genre de plan :
- 1 stocker rendez vous et heure dans BDD
- 2 avoir un timer qui vérifie l'heure/minute
- 3 avoir un timer qui vérifie la bdd.
Faudrait que tu post un truc minimaliste.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Liste pour exécuter dans un programme tiers
Merci Ar-s,
- La BDD c'est à ça que je pensais.
- Le timer est une excellente idée
Je vais donc à partir de ces préceptes construire une idée et la mettre en pratique.
Merci encore.
Voici ce que j'ai déjà fait
https://www.dropbox.com/s/hpjcbfutg1th9 ... e.zip?dl=1
- La BDD c'est à ça que je pensais.
- Le timer est une excellente idée
Je vais donc à partir de ces préceptes construire une idée et la mettre en pratique.
Merci encore.
Voici ce que j'ai déjà fait
https://www.dropbox.com/s/hpjcbfutg1th9 ... e.zip?dl=1
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Liste pour exécuter dans un programme tiers
Surtout que tu utilises déjà un timer dans ton horloge (qui est très jolie dit en passant !)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Liste pour exécuter dans un programme tiers
Bonjour Ar-s,
merci, oui j'aime les belles choses, car je pense que quand c'est beau, ça marche forcément mieux puisque le programmeur s'est efforcé à fignoler le logiciel.
Maintenant, il me faut trouver une solution pour faire un tandem entre l'horloge et la gestion des praticiens et des patients que j'ai déjà posté sur ce forum.
merci, oui j'aime les belles choses, car je pense que quand c'est beau, ça marche forcément mieux puisque le programmeur s'est efforcé à fignoler le logiciel.
Maintenant, il me faut trouver une solution pour faire un tandem entre l'horloge et la gestion des praticiens et des patients que j'ai déjà posté sur ce forum.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Liste pour exécuter dans un programme tiers
Tu peux t'inspirer de cet exemple d'SQLITE que j'ai posté ici : https://www.purebasic.fr/french/viewtopic.php?t=18688
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Liste pour exécuter dans un programme tiers
Ça sent l'homme désoeuvré par les fuites de données de doctolib !
Re: Liste pour exécuter dans un programme tiers
Bonjour Ar-s,
ma ma BDD est construite et nourrie par mon programme de gestion de praticiens qui me fabrique mes rendez-vous en choisissant un patient, une date dans le calendrier, une heure dans le combo qui est éditable pour pouvoir taper l'heure voulue, le praticien, sa profession et le complément.
avec la BDD dont je viens de parler, je filtre les données pour éviter d'afficher des rendez-vous passés, ça me donne ça :
je joins le code de DateQ
ma ma BDD est construite et nourrie par mon programme de gestion de praticiens qui me fabrique mes rendez-vous en choisissant un patient, une date dans le calendrier, une heure dans le combo qui est éditable pour pouvoir taper l'heure voulue, le praticien, sa profession et le complément.
avec la BDD dont je viens de parler, je filtre les données pour éviter d'afficher des rendez-vous passés, ça me donne ça :
Code : Tout sélectionner
;{ Fichiers inclus
XIncludeFile "D:\Programmation\Prg Perso\M\Modules\DateQ.pbi"
UseModule DateQ
;}
;{ Enumérations
Enumeration Json
#FichierJSON
EndEnumeration
Enumeration Fenetres
#Fenetre_principale
EndEnumeration
Enumeration Gadgets
#Cvs_principal
#Btn_Quitter
#Minuteur
EndEnumeration
Enumeration Polices
#Police
EndEnumeration
;}
;{ Structure
;Rendez-vous
Structure Rdv
Qui.s ;Qui a Rdv
Quand.s ;Quand
Avec.s ;Avec qui
Ou.s ;Endroit du Rdv
Heure.s ;A quelle heure
Complement.s
Date.i
Jour.i
Mois.i
Annee.i
JDA.i
EndStructure
;Mes variables
Structure sVar
Rep$
Evenement.i
Largeur.i
Hauteur.i
CoulFnd.i
CoulTxt.i
FichierJSON$
I.i
J.i
X.i
Y.i
Texte$
Delai.i
Annee.w
Mois.w
Jour.i
JourActuel.i
EndStructure
;}
;{ Variables
Global NewList RDV.Rdv()
Global.sVar Mavar
Mavar\Rep$ = GetPathPart(ProgramFilename()) : SetCurrentDirectory(Mavar\Rep$)
Mavar\Largeur = 1420 : Mavar\Hauteur = 350
Mavar\FichierJSON$ = "D:\Programmation\Prg Perso\G\Gestion des rendez-vous\Gestion de prises de rendez-vous praticiens et patients\Donnees\GESRDV JSON V1.JSON"
Mavar\X = 10: Mavar\Y = 15: Mavar\Annee = AnneeQ(DateQ()): Mavar\Mois = MoisQ(DateQ()): Mavar\JourActuel = JourQ(DateQ())
;}
;{ Chargement des polices
LoadFont(#Police, "DejaVu Sans Mono", 20, #PB_Font_Bold)
SetGadgetFont(#PB_Default, FontID(#Police))
;}
;{ Procédures
Procedure Affichage_Btn()
Select Second(Date())
Case 0, 2, 4, 6, 8,10,12,14,16,18,20,22,24,26,28,
30,32,34,36,38,40,42,44,46,48,50,52,54,56,58
SetGadgetColor(#Btn_Quitter, #PB_Gadget_BackColor, Mavar\CoulFnd)
SetGadgetColor(#Btn_Quitter, #PB_Gadget_FrontColor, Mavar\CoulTxt)
Default
SetGadgetColor(#Btn_Quitter, #PB_Gadget_BackColor, Mavar\CoulTxt)
SetGadgetColor(#Btn_Quitter, #PB_Gadget_FrontColor, Mavar\CoulFnd)
EndSelect
EndProcedure
Procedure Quitter()
CloseWindow(EventWindow())
End
EndProcedure
Procedure ChargerRDV()
If ReadFile(#FichierJSON, Mavar\FichierJSON$)
CloseFile(#FichierJSON)
;Lecture du fichier JSON
LoadJSON(#FichierJSON, Mavar\FichierJSON$, #PB_JSON_NoCase)
;Extraction de la chaine JSON vers la liste de RDV
ExtractJSONList(JSONValue(#FichierJSON),RDV())
EndIf
ForEach RDV()
With RDV()
\Date =RDV()
\Annee = Val(Right(\Quand, 4))
\Mois = Val(Mid(\Quand, 4, 2))
\Jour = Val(Left(\Quand, 2))
\JDA = DayOfYear(Date(\Annee,\Mois,\Jour,0,0,0))
EndWith
Next
SortStructuredList(RDV(), #PB_Sort_Ascending, OffsetOf(rdv\Jour), TypeOf(rdv\Jour))
SortStructuredList(RDV(), #PB_Sort_Ascending, OffsetOf(rdv\Mois), TypeOf(rdv\Mois))
SortStructuredList(RDV(), #PB_Sort_Ascending, OffsetOf(rdv\Annee), TypeOf(rdv\Annee))
EndProcedure
Procedure Procedure_principale()
If OpenWindow(#Fenetre_principale, 0, 0, Mavar\Largeur, Mavar\Hauteur, "Rdv du jour", #PB_Window_BorderLess|#PB_Window_ScreenCentered)
CanvasGadget(#Cvs_principal, 0, 0, Mavar\Largeur, Mavar\Hauteur, #PB_Canvas_Container)
StartDrawing(CanvasOutput(#Cvs_principal))
DrawingFont(FontID(#Police))
Mavar\CoulFnd = $00007FFF
Mavar\CoulTxt = $0000FFFF
Box(0, 0, Mavar\Largeur, Mavar\Hauteur, Mavar\CoulFnd)
Mavar\i = Aujourdhui_0Q()
Mavar\j = JourDAnneeQ(Mavar\i)
ForEach RDV()
With RDV()
While Mavar\i <= DateQ() + 518400 And \Annee = AnneeQ(Mavar\i) And \Mois >= MoisQ(Mavar\i) And \Jour >= JourQ(Mavar\i)
If Mavar\j = \JDA
Mavar\Delai = Val(Left(\quand, 2)) - Val(Left(FormatDateQ("%dd/%mm/%yyyy",DateQ()), 2))
Mavar\Texte$ = "Le " + Left(\quand, 2) + " " + \Qui + " Rendez-vous avec " + \Avec + " à " + \Heure + " dans " + Mavar\Delai
If Mavar\Delai < 2
Mavar\Texte$ + " jour"
Else
Mavar\Texte$ + " jours"
EndIf
DrawText(10, Mavar\y, Mavar\Texte$, Mavar\CoulTxt, Mavar\CoulFnd)
Mavar\Y + TextHeight(" ")
EndIf
Mavar\i + 86400
Mavar\j + 1
Wend
EndWith
Next
StopDrawing()
ResizeWindow(#Fenetre_principale, #PB_Ignore, #PB_Ignore, #PB_Ignore, Mavar\Y + 60)
Mavar\hauteur = Mavar\Y + 10
StringGadget(#Btn_Quitter, (Mavar\Largeur - 200) / 2, Mavar\hauteur, 200, 40, "< Quitter >")
SetGadgetColor(#Btn_Quitter, #PB_Gadget_BackColor, Mavar\CoulFnd)
SetGadgetColor(#Btn_Quitter, #PB_Gadget_FrontColor, Mavar\CoulTxt)
AddWindowTimer(#Fenetre_principale, #Minuteur, 500)
CloseGadgetList()
BindGadgetEvent(#Btn_Quitter, @Quitter())
BindEvent(#PB_Event_Timer, @Affichage_Btn())
EndIf
;- Boucle
Repeat
Mavar\Evenement = WaitWindowEvent()
ForEver
EndProcedure
;}
;{ Initialisation et lancement du programme principal
ChargerRDV()
Procedure_principale()
;}
Code : Tout sélectionner
; Description: fonctions de date avec chiffres quad (Années 0000-9999)
EnableExplicit
DeclareModule DateQ
;{ Enumération
Enumeration
#Date_AnneeQ
#Date_MoisQ
#Date_SemaineQ
#Date_JourQ
#Date_HeureQ
#Date_MinuteQ
#Date_SecondeQ
EndEnumeration
;}
;{ Structure
Structure sDiffTemps
TotalJours.q
JoursRestants.q
Annees.q
Mois.q
Heures.q
Minutes.q
Secondes.q
sTotalJours.s
sJoursRestants.s
sAnnees.s
sMois.s
sHeures.s
sMinutes.s
sSecondes.s
EndStructure
;}
;{ Constantes
#SecsParJourQ = 86400
#UniteTemps = "an|s,mois,jour|s,heure|s,minute|s,seconde|s"
;}
;{ Variables
Global UniteDateQ.q = 10000000 ; Unité de granularité, initialement 1 seconde pour la compatibilité avec les routines date de PB 4.xx
Global UniteJourQ.q = 86400 ; Nombre de granularité unités par jour
Global MaDiff.sDiffTemps
Global Dim TabNomJour$(6), Dim TabNomMois$(11)
TabNomJour$(0) = "dimanche":TabNomJour$(1) = "lundi ":TabNomJour$(2) = "mardi ":TabNomJour$(3) = "mercredi"
TabNomJour$(4) = "jeudi ":TabNomJour$(5) = "vendredi":TabNomJour$(6) = "samedi "
TabNomMois$(0) = "janvier ":TabNomMois$(1) = "février ":TabNomMois$(2) = "mars ":TabNomMois$(3) = "avril ":TabNomMois$(4) = "mai ":TabNomMois$(5) = "juin "
TabNomMois$(6) = "juillet ":TabNomMois$(7) = "août ":TabNomMois$(8) = "septembre":TabNomMois$(9) = "octobre ":TabNomMois$(10) = "novembre ":TabNomMois$(11) = "décembre "
;}
;{ Déclaration des procédures
Declare SiAnneeBissextileQ(Annee.q) ;Indique si l'année donnée est bissextile
Declare JoursDansMoisQ(Annee, Mois) ;Retoure le nombre de jours dans le mois donné
Declare.q DateQ() ;Retourne le nombre de secondes écoulées depuis le 1er Janvier 0001
Declare.q DateQ2(Annee, Mois, Jour, Heure = 0, Minute = 0, Seconde = 0) ;Retourne la date julienne de la date donnée
Declare.b SecondeQ(Date.q) ;Retourne la valeur de la seconde de la date spécifiée (entre 0 et 59).
Declare.b MinuteQ(Date.q) ;Retourne la valeur de la minute de la date spécifiée (entre 0 et 59).
Declare.b HeureQ(Date.q) ;Retourne la valeur de l'heure de la date spécifiée (entre 0 et 23).
Declare.b JourQ(Date.q) ;Retourne la valeur du jour de la date spécifiée (entre 1 et 31).
Declare.b MoisQ(Date.q) ;Retourne la valeur du mois de la date spécifiée (entre 1 et 12).
Declare.w AnneeQ(Date.q) ;Retourne la valeur de l'année de la date spécifiée (entre 0 et 9999).
Declare.w JourDAnneeQ(Date.q) ;Retourne le nombre de jours écoulés depuis le début de l'année de la date spécifiée (entre 1 et 366).
Declare.b JourDeSemaineQ(Date.q) ;Renvoie la valeur du jour dans la semaine de la date spécifiée (0 = dimanche, 6 = samedi).
Declare.q AjouterDateQ(Date.q, Champ.b, Compensation.q) ;Retourne une nouvelle date.
Declare.s FormatDateQ(Masque.s, Date.q) ;Retourne une représentation de chaîne de la date, selon le masque spécifié
Declare.q AnalyserDateQ(Masque.s, Date.s) ;Retourne une représentation de chaîne de la date, selon le masque spécifié
Declare.s NomMoisQ(Date.q) ;Retourne le nom du mois donné.
Declare.s NomJourSemaineQ(Date.q) ;Retourne le nom du jour de la semaine de la date donnée.
Declare.i SemaineDAnneeQ(date.q=-1, Premier_Jour=0) ;Retourne le nombre de semaines (1 .. 53) écoulées depuis le début de l'année pour la date donnée.
Declare.i DateSemaine1Q(Annee=-1, Premier_Jour=0) ;Renvoie la première date de janvier de la semaine
Declare.q AujourdhuiQ() ; Renvoie la date actuelle
Declare.q Aujourdhui_0Q() ; Renvoie la date actuelle à minuit
Declare.q DiffDatesQ(datedebut.q, datefin.q=-1, Unite=#Date_JourQ, multiple.q=1) ; Différence entre deux dates
Declare.q DateDiffQ(dateAvant,dateApres,*diff.sDiffTemps) ;Calcule la difference entre 2 dates en années, mois, jours, heures, minutes et secondes
Declare.s AjouterUniteTemps(nombre.q, unite.q)
Declare.s DiffTempsQ(Secondes.q)
Declare.s Premier_Ouvre_Mois(Annee,Mois)
Declare ChercherVendredi13(Annee,Mois)
Declare.q DatePaques(Annee.q=0) ; Retourne la date du dimanche de Pâques pour l'année donnée (valable jusqu'à 4099)
Declare.q Paques(annee.l = -1)
Declare Mardi_Gras(annee.l = -1)
Declare Cendres(annee.l = -1)
Declare Passion(annee.l = -1)
Declare Rameaux(annee.l = -1)
Declare Jeudi_Saint(annee.l = -1)
Declare Vendredi_Saint(annee.l = -1)
Declare.q PaquesLundi(annee.l = -1)
Declare.q Ascension(annee.l = -1)
Declare.q Pentecote(annee.l = -1)
Declare.q PentecoteLundi(annee.l = -1)
Declare.q Trinite(annee.l = -1)
Declare.q NouvelAn(annee.l = -1)
Declare.q FeteDuTravail(annee.l = -1)
Declare.q Victoire1945(annee.l = -1)
Declare.q FeteNationale(annee.l = -1)
Declare.q Assomption(annee.l = -1)
Declare.q Toussaint(annee.l = -1)
Declare.q Armistice(annee.l = -1)
Declare.q Noel(annee.l = -1)
Declare.q Saint_Sylvestre(annee.l = -1)
Declare.q Fete_des_grand_meres(annee = -1)
Declare.q Fete_des_meres(annee.l = -1)
Declare.q Fete_des_peres(annee = -1)
Declare.q Fete_des_grand_peres(annee= -1)
Declare.i DecalageHoraire(type) ; Retourne l'heure de la zone d'information de polarisation
Declare.s ZoneFuseau() ; Retourne le nom du fuseau horaire
;}
EndDeclareModule
Module DateQ
Procedure.q AnalyserDateQ(Masque.s, Date.s)
Protected Annee = 0, Mois = 0, Jour = 0, Heure = 0, Minute = 0, Seconde = 0
Annee = Val(Mid(Date, 7, 4))
Mois = Val(Mid(Date, 4, 2))
Jour = Val(Left(Date, 2))
Heure = Val(Mid(Date, 12, 2))
Minute = Val(Mid(Date, 15, 2))
Seconde = Val(Mid(Date, 18, 2))
ProcedureReturn DateQ2(Annee, Mois, Jour, Heure, Minute, Seconde)
EndProcedure
Procedure SiAnneeBissextileQ(Annee.q) ;Indique si l'année donnée est bissextile
If ((Annee % 4) = 0)
If (Annee % 100) Or ((Annee % 400) = 0)
ProcedureReturn #True
EndIf
EndIf
EndProcedure
Procedure JoursDansMoisQ(Annee, Mois) ;Retoure le nombre de jours dans le mois donné
Select Mois
Case 1,3,5,7,8,10,12
ProcedureReturn 31
Case 4,6,9,11
ProcedureReturn 30
Default
ProcedureReturn 28 + SiAnneeBissextileQ(Annee)
EndSelect
EndProcedure
Procedure.q DateQ() ;Retourne le nombre de secondes écoulées depuis le 1er Janvier 0001
Protected time.SYSTEMTIME
GetLocalTime_(time)
ProcedureReturn DateQ2(time\wYear, time\wMonth, time\wDay, time\wHour, time\wMinute, time\wSecond)
EndProcedure
Procedure.q DateQ2(Annee, Mois, Jour, Heure = 0, Minute = 0, Seconde = 0) ;Retourne la date julienne de la date donnée
Protected sec.q, i.w, Jours.b
If (Annee < 1) Or (Annee > 9999) Or
(Mois < 1) Or (Mois > 12) Or
(Jour < 1) Or
(Heure < 0) Or (Heure > 23) Or
(Minute < 0) Or (Minute > 59) Or
(Seconde < 0) Or (Seconde > 59)
ProcedureReturn -1
EndIf
If (Jour > JoursDansMoisQ(Annee, Mois))
ProcedureReturn -1
EndIf
sec = (Annee-1)*365*24*60*60
For i = 4 To (Annee-1) Step 4
If SiAnneeBissextileQ(i)
sec + 24*60*60
EndIf
Next
For i = 1 To Mois-1
Jours = JoursDansMoisQ(Annee, i)
sec + Jours*24*60*60
Next
sec + (Jour-1)*24*60*60
sec + Heure*60*60
sec + Minute*60
sec + Seconde
ProcedureReturn sec
EndProcedure
Procedure.b SecondeQ(Date.q) ;Retourne la valeur de la seconde de la date spécifiée (entre 0 et 59).
Protected Seconde.b
If (Date < 0)
ProcedureReturn 0
EndIf
Seconde = Date % 60
ProcedureReturn Seconde
EndProcedure
Procedure.b MinuteQ(Date.q) ;Retourne la valeur de la minute de la date spécifiée (entre 0 et 59).
Protected minute.b
If (Date < 0)
ProcedureReturn 0
EndIf
minute = (Date % (60*60)) / 60
ProcedureReturn minute
EndProcedure
Procedure.b HeureQ(Date.q) ;Retourne la valeur de l'heure de la date spécifiée (entre 0 et 23).
Protected Heure.b
If (Date < 0)
ProcedureReturn 0
EndIf
Heure = (Date % (24*60*60)) / (60*60)
ProcedureReturn Heure
EndProcedure
Procedure.b JourQ(Date.q) ;Retourne la valeur du jour de la date spécifiée (entre 1 et 31).
Protected Annee.w, Mois.b, Jours.w, DateBis.q
If (Date < 0)
ProcedureReturn 0
EndIf
Repeat
DateBis = Date
Jours = 365+SiAnneeBissextileQ(Annee + 1)
Date - Jours*24*60*60
Annee + 1
Until (Date < 0)
Date = DateBis
Mois = 0
Repeat
DateBis = Date
Jours = JoursDansMoisQ(Annee, Mois + 1)
Date - Jours*24*60*60
Mois + 1
Until (Date < 0)
Jours = Round(DateBis/24/60/60, 0) + 1
ProcedureReturn Jours
EndProcedure
Procedure.b MoisQ(Date.q) ;Retourne la valeur du mois de la date spécifiée (entre 1 et 12).
Protected Annee.w, Mois.b, Jours.w, DateBis.q
If (Date < 0)
ProcedureReturn 0
EndIf
Repeat
DateBis = Date
Jours = 365+SiAnneeBissextileQ(Annee + 1)
Date - Jours*24*60*60
Annee + 1
Until (Date < 0)
Date = DateBis
Mois = 0
Repeat
Jours = JoursDansMoisQ(Annee, Mois + 1)
Date - Jours*24*60*60
Mois + 1
Until (Date < 0)
ProcedureReturn Mois
EndProcedure
Procedure.w AnneeQ(Date.q) ;Retourne la valeur de l'année de la date spécifiée (entre 0 et 9999).
Protected Annee.w, Jours.w
If (Date < 0)
ProcedureReturn 0
EndIf
Repeat
Jours = 365+SiAnneeBissextileQ(Annee + 1)
Date - Jours*24*60*60
Annee + 1
Until (Date < 0)
ProcedureReturn Annee
EndProcedure
Procedure.w JourDAnneeQ(Date.q) ;Retourne le nombre de jours écoulés depuis le début de l'année de la date spécifiée (entre 1 et 366).
Protected Annee.w, Mois.b, Jours.w, DateBis.q
If (Date < 0)
ProcedureReturn 0
EndIf
Repeat
DateBis = Date
Jours = 365+SiAnneeBissextileQ(Annee + 1)
Date - Jours*24*60*60
Annee + 1
Until (Date < 0)
Jours = Round(DateBis/24/60/60, 0) + 1
ProcedureReturn Jours
EndProcedure
Procedure.b JourDeSemaineQ(Date.q) ;Renvoie la valeur du jour dans la semaine de la date spécifiée (0 = dimanche, 6 = samedi).
Protected Jours.q, joursemaine.b
If (Date < 0)
ProcedureReturn 0
EndIf
Jours = Date/24/60/60
Jours + 1
joursemaine = Jours % 7
ProcedureReturn joursemaine
EndProcedure
Procedure.q AjouterDateQ(Date.q, Champ.b, Compensation.q) ;Retourne une nouvelle date.
Protected Mois.b, Annee.w
If (Date < 0)
ProcedureReturn Date
EndIf
If (Champ = #Date_SecondeQ)
Date + Compensation
ElseIf (Champ = #Date_MinuteQ)
Date + Compensation * 60
ElseIf (Champ = #Date_HeureQ)
Date + Compensation * 60 * 60
ElseIf (Champ = #Date_JourQ)
Date + Compensation * 24 * 60 * 60
ElseIf (Champ = #Date_SemaineQ)
Date + Compensation * 7 * 24 * 60 * 60
ElseIf (Champ = #Date_MoisQ)
Mois = MoisQ(Date) + Compensation * 1
Annee = AnneeQ(Date)
While (Mois < 1)
Mois + 12
Annee - 1
Wend
While (Mois > 12)
Mois - 12
Annee + 1
Wend
Date = DateQ2(Annee, Mois, JourQ(Date), HeureQ(Date), MinuteQ(Date), SecondeQ(Date))
ElseIf (Champ = #Date_AnneeQ)
Date = DateQ2(AnneeQ(Date) + Compensation * 1, MoisQ(Date), JourQ(Date), HeureQ(Date), MinuteQ(Date), SecondeQ(Date))
EndIf
ProcedureReturn Date
EndProcedure
Procedure.s FormatDateQ(Masque.s, Date.q) ;Retourne une représentation de chaîne de la date, selon le masque spécifié
Protected Annee.s
Annee = Str(AnneeQ(Date))
Masque = ReplaceString(Masque, "%yyyy", RSet(Annee,4,"0"))
Masque = ReplaceString(Masque, "%aaaa", RSet(Annee,4,"0"))
Masque = ReplaceString(Masque, "%yy", Right(RSet(Annee,4,"0"),2))
Masque = ReplaceString(Masque, "%aa", Right(RSet(Annee,4,"0"),2))
Masque = ReplaceString(Masque, "%mm", RSet(Str(MoisQ (Date)),2,"0"))
Masque = ReplaceString(Masque, "%dd", RSet(Str(JourQ (Date)),2,"0"))
Masque = ReplaceString(Masque, "%jj", RSet(Str(JourQ (Date)),2,"0"))
Masque = ReplaceString(Masque, "%hh", RSet(Str(HeureQ (Date)),2,"0"))
Masque = ReplaceString(Masque, "%ii", RSet(Str(MinuteQ(Date)),2,"0"))
Masque = ReplaceString(Masque, "%ss", RSet(Str(SecondeQ(Date)),2,"0"))
ProcedureReturn Masque
EndProcedure
; Macro MacroAnalyserDate(var)
; s = k
; While ((PeekB(@Date + k) => $30) And (PeekB(@Date + k) <= $39))
; k + 1
; Wend
; var = Val(PeekS(@Date + s, k - s))
; EndMacro
; Procedure.q AnalyserDateQ(Masque.s, Date.s) ;Transforme une date donnée sous la forme d'une chaîne de caractères en valeur numérique, selon le masque spécifié
; Protected i.w, k.w, s.w
; Protected Annee, Mois, Jour, Heure, minute, Seconde
; Masque = LCase(Masque)
; For i = 0 To Len(Masque) - 1
; If (PeekB(@Masque + i) = $25); '%'
; If (PeekL(@Masque + i + 1) = $79797979) Or (PeekL(@Masque + i + 1) = $61616161); 'yyyy' ou 'aaaa'
; MacroAnalyserDate(Annee)
; i + 4
; ElseIf (PeekW(@Masque + i + 1) = $7979) Or (PeekW(@Masque + i + 1) = $6161); 'yy' ou 'aa'
; MacroAnalyserDate(Annee)
; If (Annee <= 30)
; Annee + 2000
; Else
; Annee + 1900
; EndIf
; i + 2
; ElseIf (PeekW(@Masque + i + 1) = $6D6D); 'mm'
; MacroAnalyserDate(Mois)
; i + 2
; ElseIf (PeekW(@Masque + i + 1) = $6464) Or (PeekW(@Masque + i + 1) = $6A6A); 'dd' ou 'jj'
; MacroAnalyserDate(Jour)
; i + 2
; ElseIf (PeekW(@Masque + i + 1) = $6868); 'hh'
; MacroAnalyserDate(Heure)
; i + 2
; ElseIf (PeekW(@Masque + i + 1) = $6969); 'ii'
; MacroAnalyserDate(minute)
; i + 2
; ElseIf (PeekW(@Masque + i + 1) = $7373); 'ss'
; MacroAnalyserDate(Seconde)
; i + 2
; Else
; k + 1
; EndIf
; Else
; k + 1
; EndIf
; Next
; ProcedureReturn DateQ2(Annee, Mois, Jour, Heure, minute, Seconde)
; EndProcedure
Procedure.s NomMoisQ(Date.q) ;Retourne le nom du mois donné.
Protected M = MoisQ(Date.q)
Protected NomMois.s = "janvier février mars avril mai juin juillet août septembre octobre novembre décembre"
ProcedureReturn StringField(NomMois, M , " ")
EndProcedure
Procedure.s NomJourSemaineQ(Date.q) ;Retourne le nom du jour de la semaine de la date donnée.
Protected J = JourDeSemaineQ(Date.q)
Protected NomJours.s = "dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi"
ProcedureReturn StringField(NomJours, J + 1, ",")
EndProcedure
Procedure.i SemaineDAnneeQ(date.q=-1, Premier_Jour=0)
; Retourne le nombre de semaines (1 .. 53) écoulées depuis le
; début de l'année pour la date donnée
; Si la date est absente, la date d'aujourd'hui est utilisée
; L'argument 'Premier_Jour' identifie la "premier jour de chaque semaine"
; Dimanche=0 .. Samedi=6
Protected jandate ; Date en janvier au début de la semaine 1
If date<0
date = DateQ()
EndIf ; Maintenant
jandate = DateSemaine1Q(AnneeQ(date), Premier_Jour)
ProcedureReturn (JourDAnneeQ(date)-jandate)/7+1
EndProcedure
Procedure.i DateSemaine1Q(Annee=-1, Premier_Jour=0)
; Renvoie la première date de janvier de la semaine 1 de l'année donnée
; Une date de retour <= 0 implique le mois de décembre précédent à la place:
; -2=Dec29 -1=Dec30 0=Dec31
; La semaine 1 est la première semaine comportant au moins 4 jours dans l'année
; Cela signifie que la première semaine comportera toujours le 4 janvier
; qui est conforme à la norme ISO 8601 (& CalendarGadget)
; mais peut-être pas avec le calendrier de la barre d'état du système Windows
; comme (sous Windows ME au moins) le décalage est de 3 au lieu de 4
; L'argument 'Premier_Jour' identifie le "premier jour de chaque semaine"
; Dimanche=0 .. Samedi=6
; Si l'année est absente, l'année en cours est utilisée
Protected Decalage=4 ; La date de Janvier qui tombe toujours dans la semaine 1
Protected Jourjan ; Jour de la semaine de Janvier du décalage de date
Protected jandate ; Date de décembre/janvier du début de la semaine 1
If Annee<=0
Annee = DateQ()
EndIf ; Cette année
Jourjan = (DateQ2(Annee, 1, Decalage, 0, 0, 0))%7 ; Jour de la semaine
jandate = Decalage+Premier_Jour-Jourjan
If Premier_Jour>Jourjan
jandate - 7
EndIf
ProcedureReturn jandate
EndProcedure
Procedure.q AujourdhuiQ() ;Retourne la date julienne de la date actuelle
ProcedureReturn DateQ2(AnneeQ(DateQ()), MoisQ(DateQ()), JourQ(DateQ()), HeureQ(DateQ()), MinuteQ(DateQ()), SecondeQ(DateQ()))
EndProcedure
Procedure.q Aujourdhui_0Q()
ProcedureReturn DateQ2(AnneeQ(DateQ()), MoisQ(DateQ()), JourQ(DateQ()))
EndProcedure
Procedure.q DiffDatesQ(datedebut.q, datefin.q=-1, Unite=#Date_JourQ, multiple.q=1)
; Différence entre deux dates
; Calcule datefin-datedebut le résultat est retourné dans l'unité donnée [ou de son multiple]
; Si datefin est absente ou négatif, Aujourd_huiF est utilisé
; Retourne 0 en cas d'erreur
; Unité est une de:
; #PB_Date_Year = #Date_Annee = 0
; #PB_Date_Month = #Date_Mois = 1
; #PB_Date_Week = #Date_Semaine = 2
; #PB_Date_Day = #Date_Jour = 3
; #PB_Date_Hour = #Date_Heure = 4
; #PB_Date_Minute = #Date_Minute = 5
; #PB_Date_Second = #Date_Seconde = 6
; Les exemples de l'utilisation de l'argument de multiples (>0) sont:-
; La différence de date (qui peut être négative) est retournée dans:
; Semaines si l'unité = #PB_Date_Week ou #Date_Semaine et multiple = 1 (par défaut)
; Quinzaines si l'unité = #PB_Date_Week ou #Date_Semaine et multiple = 2
; Trimestres si l'unité = #PB_Date_Month ou #Date_Mois et multiple = 3
Protected signe=1, Secondes, diff.q, date.q
If multiple <= 0
ProcedureReturn 0
EndIf ; Erreur
If datefin<0
datefin = DateQ()
EndIf ; Aujourd_huiF
If datedebut>datefin
signe = -1
Swap datedebut, datefin
EndIf
; Obtenir la différence de date en secondes
diff = datefin-datedebut
If UniteDateF=1 ; Pour éviter les débordements quad
diff = (diff+5000000)/10000000
Else
diff = (diff*#SecsParJourQ+UniteJourQ/2)/UniteJourQ
EndIf
Select Unite
Case #Date_AnneeQ
Secondes = 366*#SecsParJourQ
Case #Date_MoisQ
Secondes = 31*#SecsParJourQ
Case #Date_SemaineQ
Secondes = 7*#SecsParJourQ
Case #Date_JourQ
Secondes = 1*#SecsParJourQ
Case #Date_HeureQ
Secondes = 3600
Case #Date_MinuteQ
Secondes = 60
Case #Date_SecondeQ
Secondes = 1
Default
ProcedureReturn 0 ; Erreur
EndSelect
; Obtenir une réponse approximative
diff / (multiple * Secondes)
; Améliorer l'approximation
date = AjouterDateQ(datedebut, Unite, multiple * diff)
While date<datefin
date = AjouterDateQ(date, Unite, multiple)
diff + 1
Wend
ProcedureReturn signe*diff
EndProcedure
Procedure.q DateDiffQ(dateAvant,dateApres,*diff.sDiffTemps)
Protected.q TotalJours,Annees,Mois,JoursRestants,Heures,Minutes,Secondes,DateCourante,dateTest,jourDebut
If dateAvant>dateApres
Swap dateAvant,dateApres
EndIf
DateCourante=dateAvant
dateTest=dateAvant
jourDebut=Day(dateAvant)
TotalJours=0
JoursRestants=0
While dateTest<=dateApres
dateTest=AddDate(DateCourante,#Date_JourQ,1)
If dateTest<=dateApres
DateCourante=dateTest
TotalJours+1
JoursRestants+1
If Day(DateCourante)=jourDebut
Mois+1
JoursRestants=0
EndIf
EndIf
Wend
dateTest=DateCourante
Heures=0
While dateTest<dateApres
dateTest=AddDate(DateCourante,#Date_HeureQ,1)
If dateTest<=dateApres
DateCourante=dateTest
Heures+1
EndIf
Wend
dateTest=DateCourante
Minutes=0
While dateTest<dateApres
dateTest=AddDate(DateCourante,#Date_MinuteQ,1)
If dateTest<=dateApres
DateCourante=dateTest
Minutes+1
EndIf
Wend
dateTest=DateCourante
Secondes=0
While dateTest<dateApres
dateTest=AddDate(DateCourante,#Date_SecondeQ,1)
If dateTest<=dateApres
DateCourante=dateTest
Secondes+1
EndIf
Wend
Annees=Mois/12
If Annees
Mois % 12
EndIf
*diff\TotalJours=TotalJours
*diff\Annees=Annees
*diff\Mois=Mois
*diff\JoursRestants=JoursRestants
*diff\Heures=Heures
*diff\Minutes=Minutes
*diff\Secondes=Secondes
*diff\sTotalJours=Str(TotalJours)
If TotalJours<2
*diff\sTotalJours+" jour"
Else
*diff\sTotalJours+" jours"
EndIf
*diff\sAnnees=Str(Annees)
If Annee<2
*diff\sAnnees+" an"
Else
*diff\sAnnees+" ans"
EndIf
*diff\sMois=Str(Mois)+" mois"
*diff\sJoursRestants=Str(JoursRestants)
If JoursRestants<2
*diff\sJoursRestants+" jour"
Else
*diff\sJoursRestants+" jours"
EndIf
*diff\sHeures=Str(Heures)
If Heures<2
*diff\sHeures+" heure"
Else
*diff\sHeures+" heures"
EndIf
*diff\sMinutes=Str(Minutes)
If Minutes<2
*diff\sMinutes+" minute"
Else
*diff\sMinutes+" minutes"
EndIf
*diff\sSecondes=Str(Secondes)
If Secondes<2
*diff\sSecondes+" seconde"
Else
*diff\sSecondes+" secondes"
EndIf
EndProcedure
Procedure.s AjouterUniteTemps(nombre.q, unite.q)
Protected Resultat.s, uniteSeconde.s
If nombre = 0 : ProcedureReturn "" : EndIf
If nombre < 0 : nombre * -1 : EndIf
uniteSeconde = StringField(#UniteTemps, unite, ",")
If nombre > 1
uniteSeconde = RemoveString(uniteSeconde, "|")
Else
uniteSeconde = StringField(uniteSeconde, 1, "|")
EndIf
Resultat + Space(1) + Str(nombre) + Space(1) + uniteSeconde
ProcedureReturn Resultat
EndProcedure
Procedure.s DiffTempsQ(Secondes.q)
Protected Resultat.s
Protected annees.q, mois.q, semaines.q, jours.q, heures.q, Minutes.q
annees = Secondes / 31557600 : Secondes = Secondes % 31557600
mois = Secondes / 2629800 : Secondes = Secondes % 2629800
jours = Secondes / 86400 : Secondes = Secondes % 86400
heures = Secondes / 3600 : Secondes = Secondes % 3600
Minutes = Secondes / 60 : Secondes = Secondes % 60
MaDiff\Annees = annees
MaDiff\Mois = mois
MaDiff\JoursRestants = jours
MaDiff\Heures = heures
MaDiff\Minutes = minutes
MaDiff\Secondes = Secondes
MaDiff\TotalJours = annees * 365.25 + mois * 30.4375 + jours
MaDiff\sAnnees = Str(annees)
MaDiff\sMois = Str(mois)
MaDiff\sJoursRestants = Str(jours)
MaDiff\sHeures = Str(heures)
MaDiff\sMinutes = Str(Minutes)
MaDiff\sSecondes = Str(Secondes)
MaDiff\sTotalJours = Str(annees * 365.25 + mois * 30.4375 + jours)
Resultat = AjouterUniteTemps(annees, 1)
Resultat + AjouterUniteTemps(mois, 2)
Resultat + AjouterUniteTemps(jours,3)
ProcedureReturn Resultat
EndProcedure
Procedure.s Premier_Ouvre_Mois(Annee,Mois) ;Retourne la date "Jds jj/mm/aaaa" du premier jour ouvré du mois et de l'année donnés.
Protected Jour=1, Joursem
Protected DatePremierJourOuvre.q=DateQ2(Annee,Mois,Jour,0,0,0)
JourSem = JourDeSemaineQ(DateQ2(Annee, Mois, Jour, 0, 0, 0))
Select Mois
Case 1, 5, 11
Select JourSem
Case 0:Jour + 1:JourSem = 1
Case 1 To 4:Jour + 1:JourSem + 1
Case 5:Jour + 3:JourSem = 1
Case 6:Jour + 2:JourSem = 1
EndSelect
Case 2 To 4, 6 To 10, 12
Select JourSem
Case 0:Jour + 1:JourSem = 1
Case 1 To 5:DatePremierJourOuvre=DateQ2(Annee,Mois,Jour,0,0,0)
Case 6:Jour + 2:JourSem = 1
EndSelect
EndSelect
DatePremierJourOuvre=DateQ2(Annee,Mois,Jour,0,0,0)
ProcedureReturn TabNomJour$(JourDeSemaineQ(DatePremierJourOuvre)) + " " + Jour + " " + TabNomMois$(Mois - 1) + " " + Annee
EndProcedure
Procedure ChercherVendredi13(Annee,Mois) ;Retourne la date "ds jj/mm/aaaa" du mois et de l'année donnés
If Annee < 1
Annee = AnneeQ(DateQ())
EndIf
If Mois < 1
Mois = MoisQ(DateQ())
EndIf
Protected Jour=13
Protected.q DateVendredi13=DateQ2(Annee,Mois,Jour)
;Cherche le vendredi 13
While JourDeSemaineQ(DateVendredi13)<>5
Jour+1
DateVendredi13=DateQ2(Annee,Mois,Jour)
Wend
ProcedureReturn DateVendredi13
EndProcedure
;- Dates Mobiles
Procedure.q DatePaques(Annee.q=0)
; Retourne la date du dimanche de Pâques pour l'année donnée (valable jusqu'à 4099)
; S'il n'y a aucun argument, l'année en cours est utilisée
; Si l'argument est > 9999, c'est supposé être une date, pas une année
; Définition:
; www.merlyn.demon.co.uk/estrdate.htm
; Dimanche Pâques est le premier dimanche après la date de la
; pleine lune estimée se produisant le 21 Mars ou après.
; Les dates possibles vont donc, du 22 Mars au 25 avril
; Utilise la méthode 3 à:
; users.sa.chariot.net.au/~gmarts/eastalg.htm
Protected FirstDig, Reste19, temp, d ; résultats intermediaires
Protected tA, tB, tC, tD, tE ; Résultats table A à E
If Annee<=0
Annee = AnneeQ(Annee) ; Cette année
ElseIf Annee>9999
Annee = AnneeQ(Annee) ; Convertir date à l'année
EndIf
FirstDig = Annee / 100 ; Siècle
Reste19 = Annee%19 ; Nombre d'or de l'année dans le cycle métonique
; Calculer Date de la pleine lune pascale du jour de mars (PFM)
temp = (FirstDig - 15) / 2 + 202 - 11 * Reste19
Select FirstDig
Case 21, 24, 25, 27 To 32, 34, 35, 38
temp = temp - 1
Case 33, 36, 37, 39, 40
temp - 2
EndSelect
temp = Mod(temp, 30)
tA = temp + 21
If temp=29
tA - 1
EndIf
If (temp=28 And Reste19>10)
tA - 1
EndIf
; Trouver le dimanche suivant
tB = (tA - 19)%7
tC = (40 - FirstDig)%4
If tC=3
tC + 1
EndIf
If tC>1
tC + 1
EndIf
temp = Annee%100
tD = (temp + temp / 4)%7
tE = ((20 - tB - tC - tD)%7) + 1
d = tA + tE ; Jours après le 0 Mars
ProcedureReturn AjouterDateQ(DateQ2(Annee, 3, 1, 0, 0, 0), #Date_JourQ, d-1)
EndProcedure
Procedure.q Paques(annee.l = -1)
mois = 3
If annee = -1
annee = DateQ()
EndIf
jour = JourQ(DatePaques(annee))
If jour < 21
mois = 4
EndIf
ProcedureReturn DateQ2(annee, mois, jour, 0, 0, 0)
EndProcedure
Procedure Mardi_Gras(annee.l = -1)
ProcedureReturn AjouterDateQ(Paques(annee), #Date_JourQ, -47)
EndProcedure
Procedure Cendres(annee.l = -1)
ProcedureReturn AjouterDateQ(Paques(annee), #Date_JourQ, -46)
EndProcedure
Procedure Passion(annee.l = -1)
ProcedureReturn AjouterDateQ(Paques(annee), #Date_JourQ, -14)
EndProcedure
Procedure Rameaux(annee.l = -1)
ProcedureReturn AjouterDateQ(Paques(annee), #Date_JourQ, -7)
EndProcedure
Procedure Jeudi_Saint(annee.l = -1)
ProcedureReturn AjouterDateQ(Paques(annee), #Date_JourQ, -3)
EndProcedure
Procedure Vendredi_Saint(annee.l = -1)
ProcedureReturn AjouterDateQ(Paques(annee), #Date_JourQ, -2)
EndProcedure
Procedure.q PaquesLundi(annee.l = -1)
ProcedureReturn AjouterDateQ(Paques(annee), #Date_JourQ, 1)
EndProcedure
Procedure.q Ascension(annee.l = -1)
ProcedureReturn AjouterDateQ(Paques(annee), #Date_JourQ, 39)
EndProcedure
Procedure.q Pentecote(annee.l = -1)
ProcedureReturn AjouterDateQ(Paques(annee), #Date_SemaineQ, 7) ;#Date_Jour,49)
EndProcedure
Procedure.q PentecoteLundi(annee.l = -1)
ProcedureReturn AjouterDateQ(Paques(annee), #Date_JourQ, 50)
EndProcedure
Procedure.q Trinite(annee.l = -1)
ProcedureReturn AjouterDateQ(Paques(annee), #Date_JourQ, 56)
EndProcedure
;-
;- Fêtes fixes
Procedure.q NouvelAn(annee.l = -1)
If annee = -1
annee = DateQ()
EndIf
ProcedureReturn DateQ2(annee, 1, 1, 0, 0, 0)
EndProcedure
Procedure.q FeteDuTravail(annee.l = -1)
If annee = -1
annee = DateQ()
EndIf
ProcedureReturn DateQ2(annee, 5, 1, 0, 0, 0)
EndProcedure
Procedure.q Victoire1945(annee.l = -1)
If annee = -1
annee = DateQ()
EndIf
ProcedureReturn DateQ2(annee, 5, 8, 0, 0, 0)
EndProcedure
Procedure.q FeteNationale(annee.l = -1)
If annee = -1
annee = DateQ()
EndIf
ProcedureReturn DateQ2(annee, 7, 14, 0, 0, 0)
EndProcedure
Procedure.q Assomption(annee.l = -1)
If annee = -1
annee = DateQ()
EndIf
ProcedureReturn DateQ2(annee, 8, 15, 0, 0, 0)
EndProcedure
Procedure.q Toussaint(annee.l = -1)
If annee = -1
annee = DateQ()
EndIf
ProcedureReturn DateQ2(annee, 11, 1, 0, 0, 0)
EndProcedure
Procedure.q Armistice(annee.l = -1)
If annee = -1
annee = DateQ()
EndIf
ProcedureReturn DateQ2(annee, 11, 11, 0, 0, 0)
EndProcedure
Procedure.q Noel(annee.l = -1)
If annee = -1
annee = DateQ()
EndIf
ProcedureReturn DateQ2(annee, 12, 25, 0, 0, 0)
EndProcedure
Procedure.q Saint_Sylvestre(annee.l = -1)
If annee = -1
annee = DateQ()
EndIf
ProcedureReturn DateQ2(annee, 12, 31, 0, 0, 0)
EndProcedure
;-Fêtes familliales
Procedure.q Fete_des_grand_meres(annee = -1)
Protected Mois = 3, Jour=1,
DatePremierDimanche=DateQ2(Annee, Mois, Jour, 0, 0, 0)
;Cherche le premier dimanche
While JourDeSemaineQ(DatePremierDimanche)<>0
jour + 1
DatePremierDimanche= DateQ2(annee, mois, jour, 0, 0, 0)
Wend
ProcedureReturn DatePremierDimanche
EndProcedure
Procedure.q Fete_des_meres(annee.l = -1)
Protected Mois = 5, Jour=31,
DateDernierDimanche=DateQ2(Annee, Mois, Jour, 0, 0, 0)
;Cherche le dernier dimanche
While JourDeSemaineQ(DateDernierDimanche)<>0
jour - 1
DateDernierDimanche= DateQ2(annee, mois, jour, 0, 0, 0)
Wend
If JourDeSemaineQ(DateDernierDimanche) = DayOfYear(Pentecote(annee))
DateDernierDimanche = AjouterDateQ(DateDernierDimanche, #Date_JourQ, 7)
EndIf
ProcedureReturn DateDernierDimanche
EndProcedure
Procedure.q Fete_des_peres(annee = -1)
Protected Mois = 6, Jour=21,
DateTroisiemeDimanche=DateQ2(Annee, Mois, Jour, 0, 0, 0)
;Cherche le troisième dimanche
While JourDeSemaineQ(DateTroisiemeDimanche)<>0
jour - 1
DateTroisiemeDimanche= DateQ2(annee, mois, jour, 0, 0, 0)
Wend
ProcedureReturn DateTroisiemeDimanche
ProcedureReturn AjouterDateQ(NouvelAn(annee)-1, #Date_JourQ, DayOfYear(Paques(annee)-DayOfYear(Fete_des_peres(annee))))
EndProcedure
Procedure.q Fete_des_grand_peres(annee= -1)
Protected Mois = 10, Jour=1,
DatePremierDimanche=DateQ2(Annee, Mois, Jour, 0, 0, 0)
;Cherche le premier dimanche
While JourDeSemaineQ(DatePremierDimanche)<>0
jour + 1
DatePremierDimanche= DateQ2(annee, mois, jour, 0, 0, 0)
Wend
ProcedureReturn DatePremierDimanche
ProcedureReturn AjouterDateQ(NouvelAn(annee)-1, #Date_JourQ, DayOfYear(Paques(annee)-DayOfYear(Fete_des_grand_peres(annee))))
EndProcedure
Procedure.i DecalageHoraire(type)
; Retourne l'heure de la zone d'information de polarisation en quelques minutes
; Decalage=1 retourne (localtime-UTCTime) excluant l'heure d'été
; Decalage=2 retourne (localtime-UTCTime), y compris l'heure d'été
; Decalage=3 retourne la polarisation d'été locale qui est
; en vigueur à ce moment et sera de 0 en hiver
; Decalage=4 retourne la polarisation d'été locale fixe (généralement 60)
; N.B. DecalageHoraireQ(2)=DecalageHoraireQ(1)+DecalageHoraireQ(3)
; L'heure UTC utilisée est appelée GMT
Protected zoneid, tz.TIME_ZONE_INFORMATION, daylight
zoneid = GetTimeZoneInformation_(tz)
With tz
If zoneid=#TIME_ZONE_ID_DAYLIGHT
daylight = tz\DaylightBias
Else
daylight = 0
EndIf
Select type
Case 1
ProcedureReturn -tz\Bias
Case 2
ProcedureReturn -tz\Bias-daylight
Case 3
ProcedureReturn -daylight
Case 4
ProcedureReturn -tz\DaylightBias
EndSelect
ProcedureReturn 0
EndWith
EndProcedure
Procedure.s ZoneFuseau()
; Retourne le nom du fuseau horaire
Protected TimeZoneInfo.TIME_ZONE_INFORMATION
Protected i=0, NomStandard$=""
GetTimeZoneInformation_(TimeZoneInfo)
While TimeZoneInfo\StandardName[i]<>0 And i<=32
NomStandard$ + Chr(TimeZoneInfo\StandardName[i])
i + 1
Wend
ProcedureReturn NomStandard$
EndProcedure
EndModule
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Liste pour exécuter dans un programme tiers
Allez Micoute fabrique nous un Doctolib bis
a+
a+
Re: Liste pour exécuter dans un programme tiers
Bonjour Michel,
fastoche à faire, surtout que j'adore programmer, mon seul regret c'est de n'avoir jamais appris à le faire, j'ai donc tout appris par moi-même ce n'est peut-être pas la bonne méthode, mais ça fonctionne bien quand même.
fastoche à faire, surtout que j'adore programmer, mon seul regret c'est de n'avoir jamais appris à le faire, j'ai donc tout appris par moi-même ce n'est peut-être pas la bonne méthode, mais ça fonctionne bien quand même.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Liste pour exécuter dans un programme tiers
Il y a tellement de détail que tu peux même faire des messages de prévention : << Attention ! Vous êtes en train de prévoir une coloscopie la veille de la fête des pères. Pouvez-vous confirmer ce RDV ? [Oui] [Non, reporter] [Appeler un ami, pour me remplacer] >>
Re: Liste pour exécuter dans un programme tiers
@Micoute
Bonsoir Michel
J'espère que tu as pris cela comme une blague. D'avoir appris seul est tout a ton honneur. Mais si tu arrive a faire un Doctolib bis, sur tu vas les avoir en or massif
Bonne soirée et bon WE
Bonsoir Michel
J'espère que tu as pris cela comme une blague. D'avoir appris seul est tout a ton honneur. Mais si tu arrive a faire un Doctolib bis, sur tu vas les avoir en or massif
Bonne soirée et bon WE
Re: Liste pour exécuter dans un programme tiers
En tout cas, une chose admirable (parmi d'autres bien sûr), c'est la faculté à maintenir des noms de variables en français, bien qu'accents et cédilles soient impossibles. Je suis admirable de ça, déjà, en plus du code global qui démarque un bon niveau de programmation.
Re: Liste pour exécuter dans un programme tiers
Oui bien entendu.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !