Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Un Calendrier de plus | |
| | Auteur | Message |
---|
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Un Calendrier de plus Sam 22 Fév 2014 - 18:28 | |
| Bonsoir à tous, Je vous propose un calendrier fait pour sélectionner une date. il vous suffit de lire les 9 lignes de commentaire pour vous en servir. Il n'y a pas de création de fichier, ni de chemin à régler dans cette version, il est exécutable tel quel. - Code:
-
' Calendrier pour sélection d'une date par Jean Claude 22/02/2014
' ce calendrier est destiné à être exécuté par un autre exécutable (EXECUTE_WAIT) ' il peut, aussi, être exploité tel quel. ' les année bissextiles sont prises en compte. ' à vous de choisir la manière de sortir au label sortie (ligne 24) ' les boutons [<<] et [>>] servent à changer d'année ' les boutons [<] et [>] servent à changer de mois ' la sélection de la date se fait par un click dans le calendrier sur le jour souhaité ' En retour 4 variables: js$=Jour de la semaine / jj$ = jour sélectionné / ' mm$ = mois sélectionné / aaaa$ =a nnée sélectionnée ' ============================================================================== ' hide 0 dim no%,nbj%,ct%,aaaa%,mm%,lf% dim js$,ms$,jj$,mm$,aaaa$ dim form_calendar%,bouton_mav%,bouton_map%,bouton_aav%,bouton_aap%,alpha_moi% dim alpha_Lu%,alpha_Ma%,alpha_Me%,alpha_Je%,alpha_Ve%,alpha_Sa%,alpha_Di% label close,anavant,moiavant,anapres,moiapres,sortie ' démarrage no%=no%+1:Calendrier(no%) END ' =============================================== ci-dessous gestion des sorties sortie: jj$=caption$(number_click) ' résultat dans caption form 0 Retourne_Jour_Semaine(jj$,mm$,aaaa$) caption 0,js$+" "+jj$+"/"+mm$+"/"+aaaa$ ' ici vous pouvez enregistrer le résultat dans un fichier ' terminate return ' ---- close: ' vide le fichier terminate return ' ===================================================== ci-dessous: Le programme Sub Calendrier(num_obj%) form_calendar%=num_obj% form form_calendar%:width form_calendar%,206:height form_calendar%,208 border_small form_calendar%:on_close form_calendar%,close top form_calendar%,((screen_y/2)-height(form_calendar%)/2) left form_calendar%,((screen_x/2)-width(form_calendar%)/2) caption form_calendar%,"Calendrier" num_obj%=num_obj%+1:bouton_aav%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,"<<" top bouton_aav%,5:left bouton_aav%,5:hint num_obj%," Année Précédente " num_obj%=num_obj%+1:bouton_mav%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,"<" top bouton_mav%,top(bouton_aav%):left bouton_mav%,left(bouton_aav%)+23:hint num_obj%," Mois Précédent " num_obj%=num_obj%+1:alpha_moi%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% height num_obj%,20:font_bold num_obj% top alpha_moi%,top(bouton_aav%)+3 num_obj%=num_obj%+1:bouton_map%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,">":hint num_obj%," Mois Suivant " top bouton_map%,top(bouton_aav%):left bouton_map%,width(form_calendar%)-66 num_obj%=num_obj%+1:bouton_aap%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,">>":hint num_obj%," Année Suivante" top bouton_aap%,top(bouton_aav%):left bouton_aap%,left(bouton_map%)+23 num_obj%=num_obj%+1:alpha_Lu%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(bouton_aav%)+9:caption num_obj%,"Lu" num_obj%=num_obj%+1:alpha_Ma%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Ma" num_obj%=num_obj%+1:alpha_Me%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Me" num_obj%=num_obj%+1:alpha_Je%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Je" num_obj%=num_obj%+1:alpha_Ve%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Ve" num_obj%=num_obj%+1:alpha_Sa%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Sa" num_obj%=num_obj%+1:alpha_Di%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Di" no%=number_objects on_click bouton_aav%,anavant:on_click bouton_mav%,moiavant:on_click bouton_aap%,anapres:on_click bouton_map%,moiapres jj$="01":mm$=mid$(date$,4,2):aaaa$=right$(date$,4):Retourne_Jour_Semaine(jj$,mm$,aaaa$) Retourne_ms(mm$) font_name alpha_moi%,"Arial":left alpha_moi%,left(bouton_mav%)+width(bouton_mav%)+ct%:caption alpha_moi%,ms$+" "+aaaa$ Fab_alphas_J("01",mm$,aaaa$,nbj%) End_Sub ' ------- moiapres: mm%=val(mm$) if mm%=12 mm%=1:aaaa%=val(aaaa$):aaaa%=aaaa%+1:aaaa$=str$(aaaa%) else mm%=mm%+1 end_if if mm%<10 mm$="0"+str$(mm%) else mm$=str$(mm%) end_if Reinit_Calendrier() return ' ------- moiavant: mm%=val(mm$) if mm%=1 mm%=12:aaaa%=val(aaaa$):aaaa%=aaaa%-1:aaaa$=str$(aaaa%) else mm%=mm%-1 end_if if mm%<10 mm$="0"+str$(mm%) else mm$=str$(mm%) end_if Reinit_Calendrier() return ' ------ anapres: aaaa%=val(aaaa$):aaaa%=aaaa%+1:aaaa$=str$(aaaa%) Reinit_Calendrier() return ' ------ anavant: aaaa%=val(aaaa$):aaaa%=aaaa%-1:aaaa$=str$(aaaa%) Reinit_Calendrier() return ' -------------------- Sub Reinit_Calendrier() Retourne_Jour_Semaine("01",mm$,aaaa$) Retourne_ms(mm$) left alpha_moi%,left(bouton_mav%)+width(bouton_mav%)+ct%:caption alpha_moi%,ms$+" "+aaaa$ Fab_alphas_J("01",mm$,aaaa$,nbj%) End_sub ' ------------ Sub Fab_alphas_J(jour$,moi$,annee$,nb_jour%) dim_local Laaaa%,bissextile%,i%,num_obj%,nbo%,tp% nbo%=number_objects if nbo%>no% for i%=no%+1 to nbo% delete i% next i% end_if Laaaa%=val(annee$) IF (FRAC(Laaaa%/4)=0 AND FRAC(Laaaa%/100)>0) OR FRAC(Laaaa%/400)=0 THEN bissextile%=1:' JL35 if moi$="02" and bissextile%=1 then nb_jour%=nb_jour%+1 num_obj%=13:tp%=50 retourne_lf() for i%=1 to nb_jour% num_obj%=num_obj%+1:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:on_click num_obj%,sortie top num_obj%,tp%:left num_obj%,lf%:lf%=lf%+25 if i%<10 caption num_obj%,"0"+str$(i%) else caption num_obj%,str$(i%) end_if if lf%>=165+25 then font_bold num_obj%:tp%=tp%+20:lf%=15 next i% End_Sub ' --------------- Sub retourne_lf() if js$="Lundi" then lf%=15 if js$="Mardi" then lf%=40 if js$="Mercredi" then lf%=65 if js$="Jeudi" then lf%=90 if js$="Vendredi" then lf%=115 if js$="Samedi" then lf%=140 if js$="Dimanche" then lf%=165 End_sub ' ------------------ Sub Retourne_ms(mm$) if mm$="01" then ct%=13:nbj%=31:ms$="Janvier" if mm$="02" then ct%=13:nbj%=28:ms$="Février" if mm$="03" then ct%=18:nbj%=31:ms$="Mars" if mm$="04" then ct%=19:nbj%=30:ms$="Avril" if mm$="05" then ct%=20:nbj%=31:ms$="Mai" if mm$="06" then ct%=19:nbj%=30:ms$="Juin" if mm$="07" then ct%=15:nbj%=31:ms$="Juillet" if mm$="08" then ct%=19:nbj%=31:ms$="Août" if mm$="09" then ct%=1:nbj%=30:ms$="Septembre" if mm$="10" then ct%=15:nbj%=31:ms$="Octobre" if mm$="11" then ct%=2:nbj%=30:ms$="Novembre" if mm$="12" then ct%=2:nbj%=31:ms$="Décembre" End_Sub ' --------------------------------------- Sub Retourne_Jour_Semaine(jour$,moi$,an$) ' d'après l'algorytme de Mike Keith dim_local Laaaa%,Lmm%,jj%,az,ma,rm,jjs,rp jj%=val(jour$):Lmm%=val(moi$):Laaaa%=val(an$) if Lmm%>=3 az=Laaaa%:ma=2 else az=Laaaa%-1:ma=0 end_if rp=((int(23*Lmm%))/9)+jj%+4+Laaaa%+(int(az/4))-(int(az/100))+(int(az/400))-ma rm=mod(rp,7):jjs=int(rm) if jjs=0 then js$="Dimanche" if jjs=1 then js$="Lundi" if jjs=2 then js$="Mardi" if jjs=3 then js$="Mercredi" if jjs=4 then js$="Jeudi" if jjs=5 then js$="Vendredi" if jjs=6 then js$="Samedi" End_Sub
A+ Réédition 23/02/2014 9:09 (correction d'un bug mineur)
Dernière édition par Jean Claude le Dim 23 Fév 2014 - 9:10, édité 2 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 22 Fév 2014 - 18:42 | |
| Joli Jean Claude. Il ne manque plus que la récupération de la date en cliquant dessus... J' avais pas vu l' affichage dans le caption 0, tu devrais mettre une main en curseur sur les alphas pour signaler que l' objet est cliquable... | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Un Calendrier de plus Sam 22 Fév 2014 - 18:47 | |
| Bon ben, je vois que tu n'as pas lu les commentaires ! La récupération de la date est au label sortie en ligne 24. A+ PS: bonne idée la main sur les alphas. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: RE Sam 22 Fév 2014 - 18:51 | |
| Tu peux même changer la couleur de l' alpha cliqué... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 22 Fév 2014 - 19:02 | |
| Ton code avec des petits rajouts : - Code:
-
' Calendrier pour sélection d'une date par Jean Claude 22/02/2014
' ce calendrier est destiné à être exécuté par un autre exécutable (EXECUTE_WAIT) ' il peut, aussi, être exploité tel quel. ' les année bissextiles sont prises en compte. ' à vous de choisir la manière de sortir au label sortie (ligne 24) ' les boutons [<<] et [>>] servent à changer d'année ' les boutons [<] et [>] servent à changer de mois ' la sélection de la date se fait par un click dans le calendrier sur le jour souhaité ' En retour 4 variables: js$=Jour de la semaine / jj$ = jour sélectionné / ' mm$ = mois sélectionné / aaaa$ =a nnée sélectionnée ' ============================================================================== ' hide 0 dim no%,nbj%,ct%,aaaa%,mm%,lf% dim js$,ms$,jj$,mm$,aaaa$ dim form_calendar%,bouton_mav%,bouton_map%,bouton_aav%,bouton_aap%,alpha_moi% dim alpha_Lu%,alpha_Ma%,alpha_Me%,alpha_Je%,alpha_Ve%,alpha_Sa%,alpha_Di% label close,anavant,moiavant,anapres,moiapres,sortie ' démarrage no%=no%+1:Calendrier(no%) END ' =============================================== ci-dessous gestion des sorties sortie: if no%>0 : font_color no%,0,0,0 :end_if :' ajout yg if js$<>"Dimanche":font_bold_off no% :end_if :' ajout yg no%=number_click:jj$=caption$(no%) ' résultat dans caption form 0 Retourne_Jour_Semaine(jj$,mm$,aaaa$) caption 0,js$+" "+jj$+"/"+mm$+"/"+aaaa$ font_color no%,255,0,0 :font_bold no% :' ajout yg ' ici vous pouvez enregistrer le résultat dans un fichier ' terminate return ' ---- close: ' vide le fichier terminate return ' ===================================================== ci-dessous: Le programme Sub Calendrier(num_obj%) form_calendar%=num_obj% form form_calendar%:width form_calendar%,206:height form_calendar%,208 border_small form_calendar%:on_close form_calendar%,close top form_calendar%,((screen_y/2)-height(form_calendar%)/2) left form_calendar%,((screen_x/2)-width(form_calendar%)/2) caption form_calendar%,"Calendrier" num_obj%=num_obj%+1:bouton_aav%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,"<<" top bouton_aav%,5:left bouton_aav%,5:hint num_obj%," Année Précédente " num_obj%=num_obj%+1:bouton_mav%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,"<" top bouton_mav%,top(bouton_aav%):left bouton_mav%,left(bouton_aav%)+23:hint num_obj%," Mois Précédent " num_obj%=num_obj%+1:alpha_moi%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% height num_obj%,20:font_bold num_obj% top alpha_moi%,top(bouton_aav%)+3 num_obj%=num_obj%+1:bouton_map%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,">":hint num_obj%," Mois Suivant " top bouton_map%,top(bouton_aav%):left bouton_map%,width(form_calendar%)-66 num_obj%=num_obj%+1:bouton_aap%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,">>":hint num_obj%," Année Suivante" top bouton_aap%,top(bouton_aav%):left bouton_aap%,left(bouton_map%)+23 num_obj%=num_obj%+1:alpha_Lu%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(bouton_aav%)+9:caption num_obj%,"Lu" num_obj%=num_obj%+1:alpha_Ma%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Ma" num_obj%=num_obj%+1:alpha_Me%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Me" num_obj%=num_obj%+1:alpha_Je%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Je" num_obj%=num_obj%+1:alpha_Ve%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Ve" num_obj%=num_obj%+1:alpha_Sa%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Sa" num_obj%=num_obj%+1:alpha_Di%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Di" on_click bouton_aav%,anavant:on_click bouton_mav%,moiavant:on_click bouton_aap%,anapres:on_click bouton_map%,moiapres jj$="01":mm$=mid$(date$,4,2):aaaa$=right$(date$,4):Retourne_Jour_Semaine(jj$,mm$,aaaa$) Retourne_ms(mm$) font_name alpha_moi%,"Arial":left alpha_moi%,left(bouton_mav%)+width(bouton_mav%)+ct%:caption alpha_moi%,ms$+" "+aaaa$ Fab_alphas_J("01",mm$,aaaa$,nbj%) End_Sub ' ------- moiapres: mm%=val(mm$) if mm%=12 mm%=1:aaaa%=val(aaaa$):aaaa%=aaaa%+1:aaaa$=str$(aaaa%) else mm%=mm%+1 end_if if mm%<10 mm$="0"+str$(mm%) else mm$=str$(mm%) end_if Reinit_Calendrier() return ' ------- moiavant: mm%=val(mm$) if mm%=1 mm%=12:aaaa%=val(aaaa$):aaaa%=aaaa%-1:aaaa$=str$(aaaa%) else mm%=mm%-1 end_if if mm%<10 mm$="0"+str$(mm%) else mm$=str$(mm%) end_if Reinit_Calendrier() return ' ------ anapres: aaaa%=val(aaaa$):aaaa%=aaaa%+1:aaaa$=str$(aaaa%) Reinit_Calendrier() return ' ------ anavant: aaaa%=val(aaaa$):aaaa%=aaaa%-1:aaaa$=str$(aaaa%) Reinit_Calendrier() return ' -------------------- Sub Reinit_Calendrier() Retourne_Jour_Semaine("01",mm$,aaaa$) Retourne_ms(mm$) left alpha_moi%,left(bouton_mav%)+width(bouton_mav%)+ct%:caption alpha_moi%,ms$+" "+aaaa$ Fab_alphas_J("01",mm$,aaaa$,nbj%) End_sub ' ------------ Sub Fab_alphas_J(jour$,moi$,annee$,nb_jour%) dim_local Laaaa%,bissextile%,i%,num_obj%,nbo%,tp% nbo%=number_objects if nbo%>13 for i%=14 to nbo% delete i% next i% end_if Laaaa%=val(annee$) IF (FRAC(Laaaa%/4)=0 AND FRAC(Laaaa%/100)>0) OR FRAC(Laaaa%/400)=0 THEN bissextile%=1:' JL35 if moi$="02" and bissextile%=1 then nb_jour%=nb_jour%+1 num_obj%=13:tp%=50 retourne_lf() for i%=1 to nb_jour% num_obj%=num_obj%+1:alpha num_obj%:parent num_obj%,form_calendar% :cursor_point num_obj% width num_obj%,20:height num_obj%,20:on_click num_obj%,sortie top num_obj%,tp%:left num_obj%,lf%:lf%=lf%+25 if i%<10 caption num_obj%,"0"+str$(i%) else caption num_obj%,str$(i%) end_if if lf%>=165+25 then font_bold num_obj%:tp%=tp%+20:lf%=15 next i% End_Sub ' --------------- Sub retourne_lf() if js$="Lundi" then lf%=15 if js$="Mardi" then lf%=40 if js$="Mercredi" then lf%=65 if js$="Jeudi" then lf%=90 if js$="Vendredi" then lf%=115 if js$="Samedi" then lf%=140 if js$="Dimanche" then lf%=165 End_sub ' ------------------ Sub Retourne_ms(mm$) if mm$="01" then ct%=13:nbj%=31:ms$="Janvier" if mm$="02" then ct%=13:nbj%=28:ms$="Février" if mm$="03" then ct%=18:nbj%=31:ms$="Mars" if mm$="04" then ct%=19:nbj%=30:ms$="Avril" if mm$="05" then ct%=20:nbj%=31:ms$="Mai" if mm$="06" then ct%=19:nbj%=30:ms$="Juin" if mm$="07" then ct%=15:nbj%=31:ms$="Juillet" if mm$="08" then ct%=19:nbj%=31:ms$="Août" if mm$="09" then ct%=1:nbj%=30:ms$="Septembre" if mm$="10" then ct%=15:nbj%=31:ms$="Octobre" if mm$="11" then ct%=2:nbj%=30:ms$="Novembre" if mm$="12" then ct%=2:nbj%=31:ms$="Décembre" End_Sub ' --------------------------------------- Sub Retourne_Jour_Semaine(jour$,moi$,an$) ' d'après l'algorytme de Mike Keith dim_local Laaaa%,Lmm%,jj%,az,ma,rm,jjs,rp jj%=val(jour$):Lmm%=val(moi$):Laaaa%=val(an$) if Lmm%>=3 az=Laaaa%:ma=2 else az=Laaaa%-1:ma=0 end_if rp=((int(23*Lmm%))/9)+jj%+4+Laaaa%+(int(az/4))-(int(az/100))+(int(az/400))-ma rm=mod(rp,7):jjs=int(rm) if jjs=0 then js$="Dimanche" if jjs=1 then js$="Lundi" if jjs=2 then js$="Mardi" if jjs=3 then js$="Mercredi" if jjs=4 then js$="Jeudi" if jjs=5 then js$="Vendredi" if jjs=6 then js$="Samedi" End_Sub | |
| | | Francis-mr
Nombre de messages : 186 Date d'inscription : 26/11/2012
| Sujet: Re: Un Calendrier de plus Sam 22 Fév 2014 - 19:59 | |
| Bonjour Super ton calendrier, il me plait bien et il est fort probable que je l'utilise un jour. Il y a juste un problème lorsque on fait varier rapidement l'année, on a le message d'erreur: " (35) Name already defined. Line : 136 " Mais je suis un peu bourrin | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Un Calendrier de plus Sam 22 Fév 2014 - 21:13 | |
| @ygeronimi,
Tes modifs sont pertinentes, Concernant la couleur du jour sélectionné çà ne me servira pas, car dans l'utilisation que je vais en faire l'utilisateur n'aura pas le temps de voir ce changement de couleur. Néanmoins je garde, car çà ne gêne pas le fonctionnement. La main de sélection est une très bonne idée.
Je ne vais pas corriger mon code du départ pour que l'on voit bien tes améliorations (vu que tu as fourni ton code revu).
@Francis-mr, J'ai cliqué à toute vitesse sur les bouton de changement d'année, sans parvenir a bloquer le programme. Je pense que c'est dû aux performances du PC. Essaies d'ajouter WAIT 500 (ou 1000) au début des label(s) anavant et anapres pour vérifier ce que je dit.
A+ | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Un Calendrier de plus Sam 22 Fév 2014 - 21:38 | |
| Finalement le code avec les amélioration de Ygeronimi. - Code:
-
' Calendrier pour sélection d'une date par Jean Claude 22/02/2014
' ce calendrier est destiné à être exécuté par un autre exécutable (EXECUTE_WAIT) ' il peut, aussi, être exploité tel quel. ' les année bissextiles sont prises en compte. ' à vous de choisir la manière de sortir au label sortie (ligne 23) ' les boutons [<<] et [>>] servent à changer d'année ' les boutons [<] et [>] servent à changer de mois ' la sélection de la date se fait par un click dans le calendrier sur le jour souhaité ' En retour 4 variables: js$=Jour de la semaine / jj$ = jour sélectionné / ' mm$ = mois sélectionné / aaaa$ = année sélectionnée ' ============================================================================== ' hide 0: ' ligne à mettre en service suivant vos besoins dim no%,nbj%,ct%,aaaa%,mm%,lf%,nobj% dim js$,ms$,jj$,mm$,aaaa$ dim form_calendar%,bouton_mav%,bouton_map%,bouton_aav%,bouton_aap%,alpha_moi% dim alpha_Lu%,alpha_Ma%,alpha_Me%,alpha_Je%,alpha_Ve%,alpha_Sa%,alpha_Di% label close,anavant,moiavant,anapres,moiapres,sortie ' démarrage no%=no%+1:Calendrier(no%) END ' =============================================== ci-dessous gestion des sorties sortie: if no%>0 : font_color no%,0,0,0 :end_if :' ajout yg if js$<>"Dimanche":font_bold_off no% :end_if :' ajout yg no%=number_click:jj$=caption$(no%) ' résultat dans caption form 0 Retourne_Jour_Semaine(jj$,mm$,aaaa$) caption 0,js$+" "+jj$+"/"+mm$+"/"+aaaa$ font_color no%,255,0,0 :font_bold no% :' ajout yg no%=number_objects:' remise à jour du compteur d'objet wait 500 ' ici vous pouvez enregistrer le résultat dans un fichier ' terminate :' ou pas return ' ---- close: ' vide le fichier terminate return ' ===================================================== ci-dessous: Le programme Sub Calendrier(num_obj%) form_calendar%=num_obj% form form_calendar%:width form_calendar%,206:height form_calendar%,208 border_small form_calendar%:on_close form_calendar%,close top form_calendar%,((screen_y/2)-height(form_calendar%)/2) left form_calendar%,((screen_x/2)-width(form_calendar%)/2) caption form_calendar%,"Calendrier" num_obj%=num_obj%+1:bouton_aav%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,"<<" top bouton_aav%,5:left bouton_aav%,5:hint num_obj%," Année Précédente " num_obj%=num_obj%+1:bouton_mav%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,"<" top bouton_mav%,top(bouton_aav%):left bouton_mav%,left(bouton_aav%)+23:hint num_obj%," Mois Précédent " num_obj%=num_obj%+1:alpha_moi%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% height num_obj%,20:font_bold num_obj% top alpha_moi%,top(bouton_aav%)+3 num_obj%=num_obj%+1:bouton_map%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,">":hint num_obj%," Mois Suivant " top bouton_map%,top(bouton_aav%):left bouton_map%,width(form_calendar%)-66 num_obj%=num_obj%+1:bouton_aap%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,">>":hint num_obj%," Année Suivante" top bouton_aap%,top(bouton_aav%):left bouton_aap%,left(bouton_map%)+23 num_obj%=num_obj%+1:alpha_Lu%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(bouton_aav%)+9:caption num_obj%,"Lu" num_obj%=num_obj%+1:alpha_Ma%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Ma" num_obj%=num_obj%+1:alpha_Me%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Me" num_obj%=num_obj%+1:alpha_Je%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Je" num_obj%=num_obj%+1:alpha_Ve%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Ve" num_obj%=num_obj%+1:alpha_Sa%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Sa" num_obj%=num_obj%+1:alpha_Di%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Di" nobj%=number_objects on_click bouton_aav%,anavant:on_click bouton_mav%,moiavant:on_click bouton_aap%,anapres:on_click bouton_map%,moiapres jj$="01":mm$=mid$(date$,4,2):aaaa$=right$(date$,4):Retourne_Jour_Semaine(jj$,mm$,aaaa$) Retourne_ms(mm$) font_name alpha_moi%,"Arial":left alpha_moi%,left(bouton_mav%)+width(bouton_mav%)+ct%:caption alpha_moi%,ms$+" "+aaaa$ Fab_alphas_J("01",mm$,aaaa$,nbj%) End_Sub ' ------- moiapres: mm%=val(mm$) if mm%=12 mm%=1:aaaa%=val(aaaa$):aaaa%=aaaa%+1:aaaa$=str$(aaaa%) else mm%=mm%+1 end_if if mm%<10 mm$="0"+str$(mm%) else mm$=str$(mm%) end_if Reinit_Calendrier() return ' ------- moiavant: mm%=val(mm$) if mm%=1 mm%=12:aaaa%=val(aaaa$):aaaa%=aaaa%-1:aaaa$=str$(aaaa%) else mm%=mm%-1 end_if if mm%<10 mm$="0"+str$(mm%) else mm$=str$(mm%) end_if Reinit_Calendrier() return ' ------ anapres: aaaa%=val(aaaa$):aaaa%=aaaa%+1:aaaa$=str$(aaaa%) Reinit_Calendrier() return ' ------ anavant: aaaa%=val(aaaa$):aaaa%=aaaa%-1:aaaa$=str$(aaaa%) Reinit_Calendrier() return ' -------------------- Sub Reinit_Calendrier() Retourne_Jour_Semaine("01",mm$,aaaa$) Retourne_ms(mm$) left alpha_moi%,left(bouton_mav%)+width(bouton_mav%)+ct%:caption alpha_moi%,ms$+" "+aaaa$ Fab_alphas_J("01",mm$,aaaa$,nbj%) End_sub ' ------------ Sub Fab_alphas_J(jour$,moi$,annee$,nb_jour%) dim_local Laaaa%,bissextile%,i%,num_obj%,nbo%,tp% nbo%=number_objects if nbo%>nobj% for i%=nobj%+1 to nbo% delete i% next i% end_if Laaaa%=val(annee$) IF (FRAC(Laaaa%/4)=0 AND FRAC(Laaaa%/100)>0) OR FRAC(Laaaa%/400)=0 THEN bissextile%=1:' JL35 if moi$="02" and bissextile%=1 then nb_jour%=nb_jour%+1 num_obj%=13:tp%=50 retourne_lf() for i%=1 to nb_jour% num_obj%=num_obj%+1:alpha num_obj%:parent num_obj%,form_calendar% cursor_point num_obj%:' ajout de Ygeronimi width num_obj%,20:height num_obj%,20:on_click num_obj%,sortie top num_obj%,tp%:left num_obj%,lf%:lf%=lf%+25 if i%<10 caption num_obj%,"0"+str$(i%) else caption num_obj%,str$(i%) end_if if lf%>=165+25 then font_bold num_obj%:tp%=tp%+20:lf%=15 next i% End_Sub ' --------------- Sub retourne_lf() if js$="Lundi" then lf%=15 if js$="Mardi" then lf%=40 if js$="Mercredi" then lf%=65 if js$="Jeudi" then lf%=90 if js$="Vendredi" then lf%=115 if js$="Samedi" then lf%=140 if js$="Dimanche" then lf%=165 End_sub ' ------------------ Sub Retourne_ms(mm$) if mm$="01" then ct%=13:nbj%=31:ms$="Janvier" if mm$="02" then ct%=13:nbj%=28:ms$="Février" if mm$="03" then ct%=18:nbj%=31:ms$="Mars" if mm$="04" then ct%=19:nbj%=30:ms$="Avril" if mm$="05" then ct%=20:nbj%=31:ms$="Mai" if mm$="06" then ct%=19:nbj%=30:ms$="Juin" if mm$="07" then ct%=15:nbj%=31:ms$="Juillet" if mm$="08" then ct%=19:nbj%=31:ms$="Août" if mm$="09" then ct%=1:nbj%=30:ms$="Septembre" if mm$="10" then ct%=15:nbj%=31:ms$="Octobre" if mm$="11" then ct%=2:nbj%=30:ms$="Novembre" if mm$="12" then ct%=2:nbj%=31:ms$="Décembre" End_Sub ' --------------------------------------- Sub Retourne_Jour_Semaine(jour$,moi$,an$) ' d'après l'algorytme de Mike Keith dim_local Laaaa%,Lmm%,jj%,az,ma,rm,jjs,rp jj%=val(jour$):Lmm%=val(moi$):Laaaa%=val(an$) if Lmm%>=3 az=Laaaa%:ma=2 else az=Laaaa%-1:ma=0 end_if rp=((int(23*Lmm%))/9)+jj%+4+Laaaa%+(int(az/4))-(int(az/100))+(int(az/400))-ma rm=mod(rp,7):jjs=int(rm) if jjs=0 then js$="Dimanche" if jjs=1 then js$="Lundi" if jjs=2 then js$="Mardi" if jjs=3 then js$="Mercredi" if jjs=4 then js$="Jeudi" if jjs=5 then js$="Vendredi" if jjs=6 then js$="Samedi" End_Sub
A+ Réédition 23/02/2014 9:05 (ajout d'une variable pour comptage des alphas et mise à jour du compteur d'objet no%) | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Un Calendrier de plus Dim 23 Fév 2014 - 9:16 | |
| J'ai réédité les 2 codes, car j'ai remplacé 13 et 14 par nobj% ligne 143 et 144 pour le cas d'utilisation dans un autre code. J'ai également fait une mise à jour du compteur d'objets no% pour la même raison.
A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Un Calendrier de plus Dim 23 Fév 2014 - 10:24 | |
| Jean Claude, je me suis permis de modifier un peu ton calendrier. Le problème était que quand on cliquait une deuxième fois sur un jour, le titre de la fenêtre changeait bien mais l'ancien jour restait en gras et en rouge, ce qui était un peu gênant visuellement comme ton calendrier est très propre. Comme le source est très clair, je n'ai pas mis beaucoup de temps. Merci à toi. - Code:
-
' Calendrier pour sélection d'une date par Jean Claude 22/02/2014
' ce calendrier est destiné à être exécuté par un autre exécutable (EXECUTE_WAIT) ' il peut, aussi, être exploité tel quel. ' les année bissextiles sont prises en compte. ' à vous de choisir la manière de sortir au label sortie (ligne 23) ' les boutons [<<] et [>>] servent à changer d'année ' les boutons [<] et [>] servent à changer de mois ' la sélection de la date se fait par un click dans le calendrier sur le jour souhaité ' En retour 4 variables: js$=Jour de la semaine / jj$ = jour sélectionné / ' mm$ = mois sélectionné / aaaa$ = année sélectionnée ' ==============================================================================
' Déclarations dim no%,nbj%,ct%,aaaa%,mm%,lf%,nobj% dim js$,ms$,jj$,mm$,aaaa$ dim form_calendar%,bouton_mav%,bouton_map%,bouton_aav%,bouton_aap%,alpha_moi% dim alpha_Lu%,alpha_Ma%,alpha_Me%,alpha_Je%,alpha_Ve%,alpha_Sa%,alpha_Di% dim jour_selection$,nb_selection label close,anavant,moiavant,anapres,moiapres,sortie
' démarrage ' hide 0: ' ligne à mettre en service suivant vos besoins
no%=no%+1:Calendrier(no%) END
' =============================================== ci-dessous gestion des sorties sortie: if no%>0 : font_color no%,0,0,0 :end_if if js$<>"Dimanche":font_bold_off no% :end_if Efface_Selection() no%=number_click:jj$=caption$(no%) ' résultat dans caption form 0 Retourne_Jour_Semaine(jj$,mm$,aaaa$) jour_selection$ = js$+" "+jj$+"/"+mm$+"/"+aaaa$ nb_selection = no% caption 0,jour_selection$ font_color no%,255,0,0 :font_bold no% no%=number_objects:' remise à jour du compteur d'objet wait 500 ' ici vous pouvez enregistrer le résultat dans un fichier ' terminate :' On ferme tout ou pas selon le besoin return ' ---- close: ' vide le fichier terminate return
' ===================================================== ci-dessous: Le programme Sub Calendrier(num_obj%) form_calendar%=num_obj% form form_calendar%:width form_calendar%,206:height form_calendar%,208 border_small form_calendar%:on_close form_calendar%,close top form_calendar%,((screen_y/2)-height(form_calendar%)/2) left form_calendar%,((screen_x/2)-width(form_calendar%)/2) caption form_calendar%,"Calendrier" num_obj%=num_obj%+1:bouton_aav%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,"<<" top bouton_aav%,5:left bouton_aav%,5:hint num_obj%," Année Précédente " num_obj%=num_obj%+1:bouton_mav%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,"<" top bouton_mav%,top(bouton_aav%):left bouton_mav%,left(bouton_aav%)+23:hint num_obj%," Mois Précédent " num_obj%=num_obj%+1:alpha_moi%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% height num_obj%,20:font_bold num_obj% top alpha_moi%,top(bouton_aav%)+3 num_obj%=num_obj%+1:bouton_map%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,">":hint num_obj%," Mois Suivant " top bouton_map%,top(bouton_aav%):left bouton_map%,width(form_calendar%)-66 num_obj%=num_obj%+1:bouton_aap%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,">>":hint num_obj%," Année Suivante" top bouton_aap%,top(bouton_aav%):left bouton_aap%,left(bouton_map%)+23 num_obj%=num_obj%+1:alpha_Lu%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(bouton_aav%)+9:caption num_obj%,"Lu" num_obj%=num_obj%+1:alpha_Ma%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Ma" num_obj%=num_obj%+1:alpha_Me%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Me" num_obj%=num_obj%+1:alpha_Je%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Je" num_obj%=num_obj%+1:alpha_Ve%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Ve" num_obj%=num_obj%+1:alpha_Sa%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Sa" num_obj%=num_obj%+1:alpha_Di%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Di" nobj%=number_objects nb_selection = 0 :Efface_Selection() on_click bouton_aav%,anavant:on_click bouton_mav%,moiavant on_click bouton_aap%,anapres:on_click bouton_map%,moiapres jj$="01":mm$=mid$(date$,4,2):aaaa$=right$(date$,4):Retourne_Jour_Semaine(jj$,mm$,aaaa$) Retourne_ms(mm$) font_name alpha_moi%,"Arial":left alpha_moi%,left(bouton_mav%)+width(bouton_mav%)+ct%:caption alpha_moi%,ms$+" "+aaaa$ Fab_alphas_J("01",mm$,aaaa$,nbj%) End_Sub
' ------- Sub Efface_Selection() if nb_selection > 0 font_color nb_selection,0,0,0 if left$(jour_selection$,3)<>"Dim" then font_bold_off nb_selection nb_selection = 0 end_if jour_selection$="" Caption 0,jour_selection$ End_Sub
' ------- moiapres: Efface_Selection() mm%=val(mm$) if mm%=12 mm%=1:aaaa%=val(aaaa$):aaaa%=aaaa%+1:aaaa$=str$(aaaa%) else mm%=mm%+1 end_if if mm%<10 mm$="0"+str$(mm%) else mm$=str$(mm%) end_if Reinit_Calendrier() return
' ------- moiavant: Efface_Selection() mm%=val(mm$) if mm%=1 mm%=12:aaaa%=val(aaaa$):aaaa%=aaaa%-1:aaaa$=str$(aaaa%) else mm%=mm%-1 end_if if mm%<10 mm$="0"+str$(mm%) else mm$=str$(mm%) end_if Reinit_Calendrier() return
' ------ anapres: Efface_Selection() aaaa%=val(aaaa$):aaaa%=aaaa%+1:aaaa$=str$(aaaa%) Reinit_Calendrier() return
' ------ anavant: Efface_Selection() aaaa%=val(aaaa$):aaaa%=aaaa%-1:aaaa$=str$(aaaa%) Reinit_Calendrier() return
' -------------------- Sub Reinit_Calendrier() Efface_Selection() Retourne_Jour_Semaine("01",mm$,aaaa$) Retourne_ms(mm$) left alpha_moi%,left(bouton_mav%)+width(bouton_mav%)+ct%:caption alpha_moi%,ms$+" "+aaaa$ Fab_alphas_J("01",mm$,aaaa$,nbj%) End_sub
' ------------ Sub Fab_alphas_J(jour$,moi$,annee$,nb_jour%) dim_local Laaaa%,bissextile%,i%,num_obj%,nbo%,tp% nbo%=number_objects if nbo%>nobj% for i%=nobj%+1 to nbo% delete i% next i% end_if Laaaa%=val(annee$) IF (FRAC(Laaaa%/4)=0 AND FRAC(Laaaa%/100)>0) OR FRAC(Laaaa%/400)=0 THEN bissextile%=1:' JL35 if moi$="02" and bissextile%=1 then nb_jour%=nb_jour%+1 num_obj%=13:tp%=50 retourne_lf() for i%=1 to nb_jour% num_obj%=num_obj%+1:alpha num_obj%:parent num_obj%,form_calendar% cursor_point num_obj% width num_obj%,20:height num_obj%,20:on_click num_obj%,sortie top num_obj%,tp%:left num_obj%,lf%:lf%=lf%+25 if i%<10 caption num_obj%,"0"+str$(i%) else caption num_obj%,str$(i%) end_if if lf%>=165+25 then font_bold num_obj%:tp%=tp%+20:lf%=15 next i% End_Sub
' --------------- Sub retourne_lf() if js$="Lundi" then lf%=15 if js$="Mardi" then lf%=40 if js$="Mercredi" then lf%=65 if js$="Jeudi" then lf%=90 if js$="Vendredi" then lf%=115 if js$="Samedi" then lf%=140 if js$="Dimanche" then lf%=165 End_sub
' ------------------ Sub Retourne_ms(mm$) if mm$="01" then ct%=13:nbj%=31:ms$="Janvier" if mm$="02" then ct%=13:nbj%=28:ms$="Février" if mm$="03" then ct%=18:nbj%=31:ms$="Mars" if mm$="04" then ct%=19:nbj%=30:ms$="Avril" if mm$="05" then ct%=20:nbj%=31:ms$="Mai" if mm$="06" then ct%=19:nbj%=30:ms$="Juin" if mm$="07" then ct%=15:nbj%=31:ms$="Juillet" if mm$="08" then ct%=19:nbj%=31:ms$="Août" if mm$="09" then ct%=1:nbj%=30:ms$="Septembre" if mm$="10" then ct%=15:nbj%=31:ms$="Octobre" if mm$="11" then ct%=2:nbj%=30:ms$="Novembre" if mm$="12" then ct%=2:nbj%=31:ms$="Décembre" End_Sub
' --------------------------------------- Sub Retourne_Jour_Semaine(jour$,moi$,an$) ' d'après l'algorytme de Mike Keith dim_local Laaaa%,Lmm%,jj%,az,ma,rm,jjs,rp jj%=val(jour$):Lmm%=val(moi$):Laaaa%=val(an$) if Lmm%>=3 az=Laaaa%:ma=2 else az=Laaaa%-1:ma=0 end_if rp=((int(23*Lmm%))/9)+jj%+4+Laaaa%+(int(az/4))-(int(az/100))+(int(az/400))-ma rm=mod(rp,7):jjs=int(rm) if jjs=0 then js$="Dimanche" if jjs=1 then js$="Lundi" if jjs=2 then js$="Mardi" if jjs=3 then js$="Mercredi" if jjs=4 then js$="Jeudi" if jjs=5 then js$="Vendredi" if jjs=6 then js$="Samedi" End_Sub | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Un Calendrier de plus Dim 23 Fév 2014 - 10:35 | |
| Bien vu Jicehel,
J'adopte.
A+ | |
| | | Francis-mr
Nombre de messages : 186 Date d'inscription : 26/11/2012
| Sujet: Re: Un Calendrier de plus Dim 23 Fév 2014 - 19:50 | |
| Bonsoir @ Jean Claude Les ajouts de tempo ne change rien au problème, mais ce n'est pas bien grave, à moi d'être moins bourrin | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Un Calendrier de plus Dim 23 Fév 2014 - 20:13 | |
| La bonne solution c'est de désactiver le traitement des clics en début de procédure événementielle et de les remettre actif en fin de procédure Le top c'est de le faire dans 2 petites procédures Désactive_bouttons() ou tu mets les off_click Réactive_bouttons() ou tu mets les on_click
Ce qui donne un truc du genre:
sub Désactive_bouttons() off_click bouton_aav%:off_click bouton_mav% : off_click bouton_aap% : off_click bouton_map% end_sub
sub Réactive_bouttons() on_click bouton_aav%,anavant:on_click bouton_mav%,moiavant on_click bouton_aap%,anapres:on_click bouton_map%,moiapres end_sub
Voilà, après tu retire les 2 lignes dans Calendrier() pour appeler Réactive_bouttons() à la place puis tu ajoute un appel sous chacune des 4 étiquettes de traitement d'événements: Désactive_bouttons() et une ligne Réactive_bouttons() avant le return de ces 4 traitements...
Là, tu n'auras plus ce problème | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Un Calendrier de plus Dim 23 Fév 2014 - 20:33 | |
| J'espère que ta solution Jicehel fera l'affaire pour Francis-mr. Apparemment, il est le seul dans le cas ? Voici une version avec colorisation des jours fériés en vert, grâce au calendrier perpétuel de JJN4. - Code:
-
' Calendrier pour sélection d'une date par Jean Claude 22/02/2014 ' avec la participation de JJN4, JL35, Jicehel et Ygeronimi
' ce calendrier est destiné à être exécuté par un autre exécutable (EXECUTE_WAIT) ' il peut, aussi, être exploité tel quel. ' les année bissextiles sont prises en compte, ainsi que les jours fériés. ' à vous de choisir la manière de sortir au label sortie (ligne 27) ' les boutons [<<] et [>>] servent à changer d'année ' les boutons [<] et [>] servent à changer de mois ' la sélection de la date se fait par un click dans le calendrier sur le jour souhaité ' En retour 4 variables: js$=Jour de la semaine / jj$ = jour sélectionné / ' mm$ = mois sélectionné / aaaa$ = année sélectionnée ' ============================================================================== ' Déclarations dim no%,nbj%,ct%,aaaa%,mm%,lf%,nobj% dim Lundi_paque%,Jeudi_Ascension%,Lundi_Pentecote%,m1%,m2%,m3%,m4% dim js$,ms$,jj$,mm$,aaaa$ dim form_calendar%,bouton_mav%,bouton_map%,bouton_aav%,bouton_aap%,alpha_moi% dim alpha_Lu%,alpha_Ma%,alpha_Me%,alpha_Je%,alpha_Ve%,alpha_Sa%,alpha_Di% dim jour_selection$,nb_selection% label close,anavant,moiavant,anapres,moiapres,sortie ' démarrage ' hide 0: ' ligne à mettre en service suivant vos besoins no%=no%+1:Calendrier(no%) END ' =============================================== ci-dessous gestion des sorties sortie: if no%>0 : font_color no%,0,0,0 :end_if if js$<>"Dimanche":font_bold_off no% :end_if Efface_Selection() no%=number_click:jj$=caption$(no%) ' résultat dans caption form 0 Retourne_Jour_Semaine(jj$,mm$,aaaa$) jour_selection$ = js$+" "+jj$+"/"+mm$+"/"+aaaa$ nb_selection% = no% caption 0,jour_selection$ font_color no%,255,0,0 :font_bold no% no%=number_objects:' remise à jour du compteur d'objet wait 500 ' ici vous pouvez enregistrer le résultat dans un fichier ' terminate :' On ferme tout ou pas selon le besoin return ' ---- close: ' vide le fichier terminate return ' ===================================================== ci-dessous: Le programme Sub Calendrier(num_obj%) form_calendar%=num_obj% form form_calendar%:width form_calendar%,206:height form_calendar%,208 border_small form_calendar%:on_close form_calendar%,close top form_calendar%,((screen_y/2)-height(form_calendar%)/2) left form_calendar%,((screen_x/2)-width(form_calendar%)/2) caption form_calendar%,"Calendrier" num_obj%=num_obj%+1:bouton_aav%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,"<<" top bouton_aav%,5:left bouton_aav%,5:hint num_obj%," Année Précédente " num_obj%=num_obj%+1:bouton_mav%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,"<" top bouton_mav%,top(bouton_aav%):left bouton_mav%,left(bouton_aav%)+23:hint num_obj%," Mois Précédent " num_obj%=num_obj%+1:alpha_moi%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% height num_obj%,20:font_bold num_obj% top alpha_moi%,top(bouton_aav%)+3 num_obj%=num_obj%+1:bouton_map%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,">":hint num_obj%," Mois Suivant " top bouton_map%,top(bouton_aav%):left bouton_map%,width(form_calendar%)-66 num_obj%=num_obj%+1:bouton_aap%=num_obj%:button num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj%:caption num_obj%,">>":hint num_obj%," Année Suivante" top bouton_aap%,top(bouton_aav%):left bouton_aap%,left(bouton_map%)+23 num_obj%=num_obj%+1:alpha_Lu%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(bouton_aav%)+9:caption num_obj%,"Lu" num_obj%=num_obj%+1:alpha_Ma%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Ma" num_obj%=num_obj%+1:alpha_Me%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Me" num_obj%=num_obj%+1:alpha_Je%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Je" num_obj%=num_obj%+1:alpha_Ve%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Ve" num_obj%=num_obj%+1:alpha_Sa%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Sa" num_obj%=num_obj%+1:alpha_Di%=num_obj%:alpha num_obj%:parent num_obj%,form_calendar% width num_obj%,20:height num_obj%,20:font_bold num_obj% top num_obj%,top(bouton_aav%)+25:left num_obj%,left(num_obj%-1)+25::caption num_obj%,"Di" nobj%=number_objects nb_selection% = 0 :Efface_Selection() on_click bouton_aav%,anavant:on_click bouton_mav%,moiavant on_click bouton_aap%,anapres:on_click bouton_map%,moiapres jj$="01":mm$=mid$(date$,4,2):aaaa$=right$(date$,4):Retourne_Jour_Semaine(jj$,mm$,aaaa$) Retourne_ms(mm$) font_name alpha_moi%,"Arial":left alpha_moi%,left(bouton_mav%)+width(bouton_mav%)+ct%:caption alpha_moi%,ms$+" "+aaaa$ Fab_alphas_J("01",mm$,aaaa$,nbj%) End_Sub ' ------- Sub Efface_Selection():' Jicehel if nb_selection% > 0 font_color nb_selection%,0,0,0 if left$(jour_selection$,3)<>"Dim" then font_bold_off nb_selection% nb_selection% = 0 end_if jour_selection$="" Caption 0,jour_selection$ End_Sub ' ------- moiapres: Efface_Selection() mm%=val(mm$) if mm%=12 mm%=1:aaaa%=val(aaaa$):aaaa%=aaaa%+1:aaaa$=str$(aaaa%) else mm%=mm%+1 end_if if mm%<10 mm$="0"+str$(mm%) else mm$=str$(mm%) end_if Reinit_Calendrier() return ' ------- moiavant: Efface_Selection() mm%=val(mm$) if mm%=1 mm%=12:aaaa%=val(aaaa$):aaaa%=aaaa%-1:aaaa$=str$(aaaa%) else mm%=mm%-1 end_if if mm%<10 mm$="0"+str$(mm%) else mm$=str$(mm%) end_if Reinit_Calendrier() return ' ------ anapres: Efface_Selection() aaaa%=val(aaaa$):aaaa%=aaaa%+1:aaaa$=str$(aaaa%) Reinit_Calendrier() return ' ------ anavant: Efface_Selection() aaaa%=val(aaaa$):aaaa%=aaaa%-1:aaaa$=str$(aaaa%) Reinit_Calendrier() return ' -------------------- Sub Reinit_Calendrier() Efface_Selection() Retourne_Jour_Semaine("01",mm$,aaaa$) Retourne_ms(mm$) left alpha_moi%,left(bouton_mav%)+width(bouton_mav%)+ct%:caption alpha_moi%,ms$+" "+aaaa$ Fab_alphas_J("01",mm$,aaaa$,nbj%) End_sub ' ------------ Sub Fab_alphas_J(jour$,moi$,annee$,nb_jour%) dim_local Laaaa%,bissextile%,i%,num_obj%,nbo%,tp% nbo%=number_objects if nbo%>nobj% for i%=nobj%+1 to nbo% delete i% next i% end_if Laaaa%=val(annee$) paques(Laaaa%):' Retourne Lundi_paque% IF (FRAC(Laaaa%/4)=0 AND FRAC(Laaaa%/100)>0) OR FRAC(Laaaa%/400)=0 THEN bissextile%=1:' JL35 if moi$="02" and bissextile%=1 then nb_jour%=nb_jour%+1 num_obj%=13:tp%=50 retourne_lf() for i%=1 to nb_jour% num_obj%=num_obj%+1:alpha num_obj%:parent num_obj%,form_calendar% cursor_point num_obj% width num_obj%,20:height num_obj%,20:on_click num_obj%,sortie top num_obj%,tp%:left num_obj%,lf%:lf%=lf%+25 if i%<10 caption num_obj%,"0"+str$(i%) else caption num_obj%,str$(i%) end_if ' Pâques if Lundi_paque%=1 and moi$="03" and m1%=4 and i%=31 color num_obj%,50,255,150:font_bold num_obj% else if i%=Lundi_paque% and moi$="03" and m1%=3 color num_obj%,50,255,150:font_bold num_obj% if num_obj%>1 and i%<>31 then color num_obj%-1,50,255,150:font_bold num_obj%-1 end_if end_if if i%=Lundi_paque% and moi$="04" and m1%=4 color num_obj%,50,255,150:font_bold num_obj% if i%>1 then color num_obj%-1,50,255,150:font_bold num_obj%-1 End_if ' Ascension if i%=Jeudi_Ascension% and moi$="05" and m3%=5 color num_obj%,50,255,150:font_bold num_obj% end_if if i%=Jeudi_Ascension% and moi$="06" and m3%=6 color num_obj%,50,255,150:font_bold num_obj% end_if ' Pentecôte if i%=Lundi_Pentecote% and moi$="05" and m2%=5 color num_obj%,50,255,150:font_bold num_obj% end_if if i%=Lundi_Pentecote% and moi$="06" and m2%=6 color num_obj%,50,255,150:font_bold num_obj% end_if ' autres jours feriés if i%=1 and moi$="01" then color num_obj%,50,255,150:font_bold num_obj% if i%=14 and moi$="02" then color num_obj%,255,220,220:' font_bold num_obj% if i%=1 and moi$="05" and Laaaa%>1889 then color num_obj%,50,255,150:font_bold num_obj% if i%=8 and moi$="05" and Laaaa%>1952 and Laaaa%<1959 then color num_obj%,50,255,150:font_bold num_obj% if i%=8 and moi$="05" and Laaaa%>1981 then color num_obj%,50,255,150:font_bold num_obj% if i%=14 and moi$="07" and Laaaa%>1790 then color num_obj%,50,255,150:font_bold num_obj% if i%=15 and moi$="08" then color num_obj%,50,255,150:font_bold num_obj% if i%=1 and moi$="11" then color num_obj%,50,255,150:font_bold num_obj% if i%=11 and moi$="11" and Laaaa%>1922 then color num_obj%,50,255,150:font_bold num_obj% if i%=25 and moi$="12" then color num_obj%,50,255,150:font_bold num_obj% if lf%>=165+25 then font_bold num_obj%:tp%=tp%+20:lf%=15 next i% End_Sub ' ---------- Sub paques(aaaaP%) ' Calcul du lundi de Pâques - Algorithme de Oudin - code JJN4 dim_local g,w,d,e,h,k,u,q,v,z,f,n,r,j1,j2,j3,x,y g=aaaaP%-int(aaaaP%/19)*19 w=int(aaaaP%/100) d=int(w/4) e=int((8*w+13)/25) h=19*g+w-d-e+15-int((19*g+w-d-e+15)/30)*30 k=int(h/28) u=int(29/(h+1)) q=int((21-g)/11) v=(k*u*q-1)*k+h z=int(aaaaP%/4)+aaaaP% n=z+v+2+d-w f=n-int(n/7)*7 r=28+v-f if h=29 and r=50 then r=57 if h=28 and g>10 and r=49 then r=56 if r>30 j1=r-30 : m1%=4 : Lundi_paque%=j1 else j1=r+1 : m1%=3 : Lundi_paque%=j1 end_if ' Calcul du jeudi de l'Ascension y=r+39 if y>92 j3=y-92 : m3%=6 : Jeudi_Ascension%=j3 else j3=y-61 : m3%=5 : Jeudi_Ascension%=j3 end_if ' Calcul du lundi de Pentecôte x=r+50 if x>92 j2=x-92 : m2%=6 : Lundi_Pentecote%=j2 else j2=x-61 : m2%=5 : Lundi_Pentecote%=j2 end_if End_sub ' --------------- Sub retourne_lf() if js$="Lundi" then lf%=15 if js$="Mardi" then lf%=40 if js$="Mercredi" then lf%=65 if js$="Jeudi" then lf%=90 if js$="Vendredi" then lf%=115 if js$="Samedi" then lf%=140 if js$="Dimanche" then lf%=165 End_sub ' ------------------ Sub Retourne_ms(mm$) if mm$="01" then ct%=13:nbj%=31:ms$="Janvier" if mm$="02" then ct%=13:nbj%=28:ms$="Février" if mm$="03" then ct%=18:nbj%=31:ms$="Mars" if mm$="04" then ct%=19:nbj%=30:ms$="Avril" if mm$="05" then ct%=20:nbj%=31:ms$="Mai" if mm$="06" then ct%=19:nbj%=30:ms$="Juin" if mm$="07" then ct%=15:nbj%=31:ms$="Juillet" if mm$="08" then ct%=19:nbj%=31:ms$="Août" if mm$="09" then ct%=1:nbj%=30:ms$="Septembre" if mm$="10" then ct%=15:nbj%=31:ms$="Octobre" if mm$="11" then ct%=2:nbj%=30:ms$="Novembre" if mm$="12" then ct%=2:nbj%=31:ms$="Décembre" End_Sub ' --------------------------------------- Sub Retourne_Jour_Semaine(jour$,moi$,an$) ' d'après l'algorytme de Mike Keith dim_local Laaaa%,Lmm%,jj%,az,ma,rm,jjs,rp jj%=val(jour$):Lmm%=val(moi$):Laaaa%=val(an$) if Lmm%>=3 az=Laaaa%:ma=2 else az=Laaaa%-1:ma=0 end_if rp=((int(23*Lmm%))/9)+jj%+4+Laaaa%+(int(az/4))-(int(az/100))+(int(az/400))-ma rm=mod(rp,7):jjs=int(rm) if jjs=0 then js$="Dimanche" if jjs=1 then js$="Lundi" if jjs=2 then js$="Mardi" if jjs=3 then js$="Mercredi" if jjs=4 then js$="Jeudi" if jjs=5 then js$="Vendredi" if jjs=6 then js$="Samedi" End_Sub A+ | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Un Calendrier de plus Dim 23 Fév 2014 - 22:36 | |
| Tu n'as plus qu'à trouver un site pour trouver les vacances scolaires en fonction des zones Bravo Jean-Claude | |
| | | Francis-mr
Nombre de messages : 186 Date d'inscription : 26/11/2012
| Sujet: Re: Un Calendrier de plus Lun 24 Fév 2014 - 8:35 | |
| Bonjour Merci Jicehel, effectivement il n'y a plus de problème en mettant un off_click en début de procédure et un on_click à la fin. Et encore bravo à Jean Claude pour ce calendrier | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Un Calendrier de plus Lun 24 Fév 2014 - 20:30 | |
| bravo jean claude le code est tres pedagogique je vais me pencher dessus par plaisir | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Un Calendrier de plus Lun 24 Fév 2014 - 20:56 | |
| En fait il faudrait faire ça à chaque fois que l'on traite un événement (désactiver tous ceux que l'on ne veut pas voir interférer et ne garder que ceux qui doivent pouvoir interrompre le traitement si nécessaire). | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Un Calendrier de plus Lun 24 Fév 2014 - 20:59 | |
| Merci pour vos appréciations,
c'est grâce au partage des sources que je suis arrivé à la dernière version.
@Mindstorm Tu devrais pouvoir te pencher sur le code, sans trop de problème, les noms de label, de Sub(s) et d'objets, sont assez explicites.
A+
On s'et croisé Jicehel, je n'ai pas bien compris cette histoire de désactiver les on_click, il faut que j'essai de comprendre pourquoi je n'ai pas eu besoin de le faire, alors que pour Francis-mr c'était nécessaire. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Un Calendrier de plus Lun 24 Fév 2014 - 21:37 | |
| En fait, si tu ne désactive pas l'événement et que tu clique rapidement, tu peux redéclencher la procédure alors que son traitement n'est pas fini. Cela peut être source de nombreuses erreurs en travaillant sur des variables qui sont partagées. Par exemple, tu as un compteur d'objet qui est une variable globale qui va de 0 à 5000 et tu t'attends à avoir 5000 valeurs. Tu redéclenches ta procédure évenementielle alors que ce compteur vaut 800 par exemple. La seconde procédure va se terminer et ton compteur va valoir 5000 quand tu va revenir dans ta première procédure et tu vas en rajouter par exemple 4200 autres. C'est ce genre de choses qui se produisent. Tu as dans d'autre cas comme les boucles de timer, des procédures qui peuvent prendre plus de temps que le temps de déclenchement du timer. Dans ce cas, le hic, c'est la saturation de la pile car les événements en attente se cumulent, etc ... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Un Calendrier de plus Lun 24 Fév 2014 - 22:58 | |
| Sans parler des timers (ceux-là à manipuler avec de grandes précautions), je viens de me faire piéger avec un on_change sur un Spin, ça me fichait la pagaille quand je modifiais la valeur par calcul. Il faut faire un off_change avant les traitements et refaire le on_change après. C'est un exemple parmi tant d'autres des traitements événementiels, on arrive toujours à se faire avoir. Cela dit, il est bien joli ton petit calendrier Jean Claude, je vais pouvoir programmer (mais pas en Panoramic) mes vacances (de retraité ) | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Un Calendrier de plus Mar 25 Fév 2014 - 7:29 | |
| Merci pour ces précisions, Il faut que je vérifie çà,car j'ai une batterie de 3 options qui ne sont pas dociles. Je vais bientôt rejoindre le club des retraités, il faut que je me prépare un planning. A+ | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Un Calendrier de plus Mar 25 Fév 2014 - 20:49 | |
| courage jean claude la retraite c'est beaucoup de travail prepare toi bien | |
| | | Contenu sponsorisé
| Sujet: Re: Un Calendrier de plus | |
| |
| | | | Un Calendrier de plus | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |