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 |
|
|
| Utilitaire de saisie d'une date | |
| | |
Auteur | Message |
---|
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Utilitaire de saisie d'une date Mar 22 Mai 2012 - 20:08 | |
| Bonsoir, suite à une demande d'aide sur le post d'Ambroise je vous propose un utilitaire pour saisir une date au format JJ/MM/AAAA. dans ce programme j'oblige l'utilisateur à suivre les 3 étapes de saisie pour limiter à zéro le risque d'erreur de saisie. C'est pourquoi on commence par le mois pour que le COMBO des jours n'autorise que 29 pour février et 30 pour les mois de 30 jours. Pas de risque de saisie comme 1/2/12. Et cerise sur gâteau, si vous avez saisie un 29 février d'une année qui n'est pas bissextile, il y correction et un message d'avertissement. edit: prenez plutôt la version corrigée, plus bas. - Code:
-
dim jj$,mm$,aaaa$,maxj,n,a$,b$,ok$,dat$ label mois,date,jour,annee,fin_date,fin_date2,annee_bissextile,reinit_date combo 1:width 1,40:top 1,30:left 1,10 combo 2:width 2,width(1):top 2,top(1):left 2,width(1)+20 edit 3:width 3,50:top 3,top(1):left 3,width(1)+width(2)+30 alpha 4:top 4,top(1)-15:left 4,left(1):caption 4," Mois " alpha 5:top 5,top(1)-15:left 5,left(2):caption 5," Jour " alpha 6:top 6,top(1)-15:left 6,left(3):caption 6,"Année " button 7:width 7,16:height 7,16:top 7,top(3)+3:left 7,left(3)+width(3)-18:caption 7,"X" button 8:width 8,60:height 8,20:top 8,top(3)+1:left 8,left(7)+width(7)+10:caption 8,"Clear Date" gosub date END:' *****************************************************
date: mm$="":jj$="":aaaa$="":text 1,"":text 2,"":text 3,"":clear 1:clear 2 inactive 2:inactive 3:inactive 7:inactive 8:active 1:set_focus 1:gosub mois return
mois: for n=1 to 12 if n<10 then a$="0"+str$(n) if n>9 then a$=str$(n) item_add 1,a$ next n on_click 1,jour return
jour: active 8:on_click 8,reinit_date mm$=item_index$(1) inactive 1:active 2:set_focus 2 if val(mm$)=1 or val(mm$)=3 or val(mm$)=5 or val(mm$)=7 or val(mm$)=8 or val(mm$)=10 or val(mm$)=12 maxj=31 else maxj=30 end_if if val(mm$)=2 then maxj=29 for n=1 to maxj if n<10 then a$="0"+str$(n) if n>9 then a$=str$(n) item_add 2,a$ next n on_click 2,annee return
annee: jj$=item_index$(2) inactive 2:active 3:set_focus 3 on_change 3,fin_date return
fin_date: active 7:on_click 7,fin_date2 return
fin_date2: a$=text$(3) if numeric(a$)=0 then message "Valeur numérique uniquement":text 3,"":set_focus 3:return if len(a$)<>4 then message "Format AAAA: 4 caractères attendus":text 3,"":set_focus 3:return aaaa$=a$:inactive 3:inactive 7 if jj$="29" and mm$="02" then gosub annee_bissextile dat$=jj$+"/"+mm$+"/"+aaaa$
' affichage résultat caption 0,dat$ return
annee_bissextile: a$=right$(aaaa$,2):ok$="" for n=0 to 96 step 4 if n<10 then b$="0"+str$(n) if n>9 then b$=str$(n) if a$=b$ then ok$="O":exit_for ok$="N" next n if ok$="N" jj$="28":text 2,"28":message " "+aaaa$+" n'est pas une année bissextile"+chr$(13)+"Le jour est remis automatiquement à 28" else jj$="29" end_if return
reinit_date: goto date return
Ce code a tout de même l’inconvénient d'être gourmand en variables, label et objets. Il faudra, aussi, que je le refasse en commençant par la saisie de l'année de façon à ce que le COMBO"Mois" ne contienne que 28 jours si l'année n'est pas bissextile. N'hésitez pas à proposer vos façons de faire, se sera utile à tous... Prenez le comme un concours A+
Dernière édition par Jean Claude le Mer 23 Mai 2012 - 8:31, édité 1 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Utilitaire de saisie d'une date Mar 22 Mai 2012 - 21:27 | |
| | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Utilitaire de saisie d'une date Mar 22 Mai 2012 - 22:03 | |
| Bah, pour la consommation d'objet et de variable, ce n'est pas grave. Il faudra juste les libérer en fin de traitement et ne garder que le résultat valide en chaine ou avec 3 variables jour; mois et année | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Utilitaire de saisie d'une date Mer 23 Mai 2012 - 0:38 | |
| Bon, je livre ma solution dans un edit, basée sur le petit programme que j'ai déjà mis dans le post à Ambroise sur le contrôle du contenu d'un edit. J'ai amélioré le programme et maintenant il reconnaît les mois de 30 ou 31 jours et corrige la saisie. Il détecte si on a mis au mois de février plus de 29 jours et après l'année corrige en mettant le 28 si ce n'est pas une année bissextile. Comme le format est JJ/MM/AAAA, il détecte si on a oublié le "/". Tout cela est agrémenté de messages pour vous dire que vous vous trompez dans votre saisie si vous faites une erreur de frappe! - Code:
-
label verif,m1,m2,m3,m4,m5,m6,m7 edit 1:left 1,200:top 1,50:on_change 1,verif alpha 2:left 2,200:top 2,25:caption 2,"FORMAT DATE JJ/MM/AAAA" set_focus 1 end
verif: if len(text$(1))=1 if numeric(right$(text$(1),1))=0 or right$(text$(1),1)="." then gosub m1:text 1,"":return if val(text$(1))>3 then gosub m2:text 1,"":return end_if if len(text$(1))=2 if numeric(right$(text$(1),1))=0 or right$(text$(1),1)="." then gosub m1:text 1,left$(text$(1),1):caret_position 1,1:return if val(text$(1))>31 or val(text$(1))<1 then gosub m2:text 1,"":return end_if if len(text$(1))=3 if right$(text$(1),1)<>"/" then gosub m3:text 1,left$(text$(1),2):caret_position 1,2:return end_if if len(text$(1))=4 if numeric(right$(text$(1),1))=0 or right$(text$(1),1)="." then gosub m1:text 1,left$(text$(1),3):caret_position 1,3:return if val(right$(text$(1),1))>1 then gosub m4:text 1,left$(text$(1),3):caret_position 1,3:return end_if if len(text$(1))=5 if numeric(right$(text$(1),1))=0 or right$(text$(1),1)="." then gosub m1:text 1,left$(text$(1),4):caret_position 1,4:return if val(right$(text$(1),2))>12 or val(right$(text$(1),2))<1 then gosub m4:text 1,left$(text$(1),3):caret_position 1,3:return if mid$(text$(1),4,2)="04" or mid$(text$(1),4,2)="06" or mid$(text$(1),4,2)="09" or mid$(text$(1),4,2)="11" if val(left$(text$(1),2))>30 then gosub m6:text 1,"30"+right$(text$(1),3):caret_position 1,5:return end_if if mid$(text$(1),4,2)="02" and val(left$(text$(1),2))>29 then gosub m6:text 1,"29"+right$(text$(1),3):caret_position 1,5:return end_if if len(text$(1))=6 if right$(text$(1),1)<>"/" then gosub m3:text 1,left$(text$(1),5):caret_position 1,5:return end_if if len(text$(1))>6 and len(text$(1))<11 if numeric(right$(text$(1),1))=0 or right$(text$(1),1)="." then gosub m1:text 1,left$(text$(1),len(text$(1))-1):caret_position 1,len(text$(1)):return end_if if len(text$(1))=10 if val(right$(text$(1),4))<1 then gosub m5:text 1,left$(text$(1),6):caret_position 1,6:return if (val(right$(text$(1),4))/4<>int(val(right$(text$(1),4))/4) and mid$(text$(1),4,2)="02" and val(left$(text$(1),2))>28) then gosub m7:text 1,"28"+right$(text$(1),8):caret_position 1,10:return end_if if len(text$(1))>10 then text 1,left$(text$(1),10):caret_position 1,10:return return m1: message "Entrez uniquement un chiffre SVP":return m2: message "De 01 à 31 SVP":return m3: message "Entrez un «/» SVP":return m4: message "De 01 à 12 SVP":return m5: message "Année non valide, recommencez SVP":return m6: message "Il y a 28 ou 29 jours en Février et 30 jours en Avril, Juin, Septembre ou Novembre.":return m7: message "Il ne s'agit pas d'une année bissextile. Il n'y a que 28 jours en Février":return
En espérant que cela serve, je vous souhaite une bonne nuit à tous! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Utilitaire de saisie d'une date Mer 23 Mai 2012 - 7:31 | |
| Ton contrôle fonctionne très bien Bignono. PS: Pour ton code 'demo' tu aurait dû ajouter comme Jean-Claude, un bouton final (ok par exemple) pour mettre la date dans un message ou en titre de la fenêtre 0. Mais bon, ça marche nickel et on peut le faire nous même aussi | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Utilitaire de saisie d'une date Mer 23 Mai 2012 - 7:46 | |
| Merci à vous tous, @Bignono, Ton code vaut le détour: 2 objets, aucune variables, et 1 seul label (si on ne compte pas les messages). Bravo, je le retiens. J'ai corrigé le mien car la position des objets ne suivait pas correctement la position du premier, c'est maintenant ok. J'ai aussi ajouté l'effacement du résultat dans le caption 0 en cas de "Clear_date". - Code:
-
' saisie d'une date par Jean Claude dim jj$,mm$,aaaa$,maxj,n,a$,b$,ok$,dat$ label mois,date,jour,annee,fin_date,fin_date2,annee_bissextile,reinit_date combo 1:width 1,40:top 1,160:left 1,160:' <== ici, reglage de la position de tout les objets combo 2:width 2,width(1):top 2,top(1):left 2,left(1)+width(1)+20 edit 3:width 3,50:top 3,top(1):left 3,left(2)+width(2)+20 alpha 4:top 4,top(1)-15:left 4,left(1):caption 4," Mois " alpha 5:top 5,top(1)-15:left 5,left(2):caption 5," Jour " alpha 6:top 6,top(1)-15:left 6,left(3):caption 6,"Année " button 7:width 7,16:height 7,16:top 7,top(3)+3:left 7,left(3)+width(3)-18:caption 7,"X" button 8:width 8,60:height 8,20:top 8,top(3)+1:left 8,left(7)+width(7)+10:caption 8,"Clear Date" gosub date END:' *****************************************************
date: mm$="":jj$="":aaaa$="":text 1,"":text 2,"":text 3,"":clear 1:clear 2 inactive 2:inactive 3:inactive 7:inactive 8:active 1:set_focus 1:gosub mois ' affichage caption 0, " Saisie d'une date " return
mois: for n=1 to 12 if n<10 then a$="0"+str$(n) if n>9 then a$=str$(n) item_add 1,a$ next n on_click 1,jour return
jour: active 8:on_click 8,reinit_date mm$=item_index$(1) inactive 1:active 2:set_focus 2 if val(mm$)=1 or val(mm$)=3 or val(mm$)=5 or val(mm$)=7 or val(mm$)=8 or val(mm$)=10 or val(mm$)=12 maxj=31 else maxj=30 end_if if val(mm$)=2 then maxj=29 for n=1 to maxj if n<10 then a$="0"+str$(n) if n>9 then a$=str$(n) item_add 2,a$ next n on_click 2,annee return
annee: jj$=item_index$(2) inactive 2:active 3:set_focus 3 on_change 3,fin_date return
fin_date: active 7:on_click 7,fin_date2 return
fin_date2: a$=text$(3) if numeric(a$)=0 then message "Valeur numérique uniquement":text 3,"":set_focus 3:return if len(a$)<>4 then message "Format AAAA: 4 caractères attendus":text 3,"":set_focus 3:return aaaa$=a$:inactive 3:inactive 7 if jj$="29" and mm$="02" then gosub annee_bissextile dat$=jj$+"/"+mm$+"/"+aaaa$
' affichage résultat caption 0,dat$ return
annee_bissextile: a$=right$(aaaa$,2):ok$="" for n=0 to 96 step 4 if n<10 then b$="0"+str$(n) if n>9 then b$=str$(n) if a$=b$ then ok$="O":exit_for ok$="N" next n if ok$="N" jj$="28":text 2,"28":message " "+aaaa$+" n'est pas une année bissextile"+chr$(13)+"Le jour est remis automatiquement à 28" else jj$="29" end_if return
reinit_date: goto date return
EDIT: Voir aussi (plus bas) une version "Routine"A+
Dernière édition par Jean Claude le Jeu 24 Mai 2012 - 14:44, édité 1 fois | |
| | | ambroise
Nombre de messages : 264 Localisation : Haute-Savoie Date d'inscription : 29/04/2012
| Sujet: Re: Utilitaire de saisie d'une date Mer 23 Mai 2012 - 9:01 | |
| Comment vous remercier tous deux pour ces codes super propres et efficaces ? J'admire votre savoir... et je suis touché de votre amabilité ! | |
| | | Invité Invité
| Sujet: Re: Utilitaire de saisie d'une date Mer 23 Mai 2012 - 9:11 | |
| Bonjour, J'ai gardé ton programme Bignono. Et pas mal non plus Jean-Claude. |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Utilitaire de saisie d'une date Mer 23 Mai 2012 - 9:18 | |
| Bonjour Ambroise, L'entraide pour moi, c'est tout naturel! Que ce soit sur le forum Panoramic ou sur le site de Généanet, on apprécie tous d'être aidé quand on en a besoin, et il est juste de rendre ce que l'on reçoit quand on a la possibilité de le faire! D'ailleurs c'est comme cela que l'on avance plus vite et qu'on devient plus fort! Ne dit-on pas que l'union fait la force? Bonne journée et A+ | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Utilitaire de saisie d'une date Mer 23 Mai 2012 - 12:13 | |
| Tout à fait,
J'ajoute que si j'aide moins, c'est tout simplement que je ne suis pas aussi efficace que Klaus, Bignono, JL35, Cosmos70, et j'en passe... Ma façon de faire est différente, mais bon on s'amuse bien...
A+ | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Utilitaire de saisie d'une date Mer 23 Mai 2012 - 12:29 | |
| Salut tout le monde.
Je vous remercie tous, sans exception, pour vos interventions et pour l’aide toujours aussi efficace que vous apporter à qui en demande ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Utilitaire de saisie d'une date Jeu 24 Mai 2012 - 14:36 | |
| Comme j'avais besoin de ce code pour un programme, j'ai transformé mon code initiale en routine prête à être insérée dans un source. Je vous en fait donc profiter. Je me suis honteusement inspiré de la façon de faire de Klaus (mais je sais qu'il va l’apprécier) pour la création des objets sans que vous ayez à vous en préoccuper. J'ai aussi intégrer la routine dans un container pour facilité les réglages. EDIT: nouvelle version suite au problème de parent résolu par Klaus. - Code:
-
' routine_saisie_date Jean Claude mai 2012 (avec l'aide de Klaus) ' ' Résultat: sous forme de 4 variables: dat$, jj$, mm$, aaaa$ ' ' Règlage: suivre les étapes ci-dessous: (*) => Obligatoire ' ' (*) no% => numéro du dernier objet créer dans le source destination ' Remarque: cette routine utilise 9 objets ' ' afi_date$="O" => affiche le résultat (afi_date$="" => n'affiche pas) ' ' no_afi_date% => Numéro de l'objet dans lequel on affiche le résultat ' ' parent container_date%,x: affecte (ou change) parent du container date ' ' top container_date%,30:left container_date%,10 ' position du container date dans l'objet parent ' ' (*) show container_date% pour afficher la routine de saisie (ou Hide ...) ' ' aaaa$=right$(date$,4):mm$="":jj$="" ' détermine les affichage par défault (année, mois et jour) ' ' (*) gosub date: ' lance l'exécution de la routine ' ' dat$=jj$+"/"+mm$+"/"+aaaa$ règlage du format de la date ' par défaut modifiable au label => format_date ' ' Astuce: variable$=caption$(alpha_afi_date1%) ' permet de répurer le résultat si plusieurs parent ' ' ============================================================================== ' ci-desssous: pour la démonstration (pas necéssaire à la routine) dim n,a$,b$,c$,no%,container1%,container2%,alpha_afi_date1%,alpha_afi_date2% dim button1%,button2%,button3% label start,suite,fin,routine_saisie_date no%=0 no%=no%+1:container1%=no%:container container1%:' création d'un container width container1%,400:height container1%,100:top container1%,10:left container1%,10 no%=no%+1:alpha_afi_date1%=no%:alpha alpha_afi_date1%:' création d'un alpha fils du container 1 parent alpha_afi_date1%,container1%:top alpha_afi_date1%,10:left alpha_afi_date1%,10 no%=no%+1:container2%=no%:container container2%:' création d'un deuxième container width container2%,400:height container2%,100:top container2%,150:left container2%,10 no%=no%+1:alpha_afi_date2%=no%:alpha alpha_afi_date2%:' création d'un alpha fils du container 2 parent alpha_afi_date2%,container2%:top alpha_afi_date2%,10:left alpha_afi_date2%,10 no% = no% + 1 :button1%=no%: button button1%:top button1%,20:left button1%,430:' création de 2 Boutons caption button1%,"Premier" : on_click button1%,start no% = no% + 1 :button2%=no%: button button2% :top button2%,160 :left button2%,430 caption button2%,"Second " : on_click button2%,suite:inactive button2% no% = no% + 1 :button3%=no%: button button3% : top button3%,200 : left button3%,430 caption button3%," Fin " : on_click button3%,fin:inactive button3%
' ============================================================================== ' ci dessous ligne à inserer avant END ' dim n,a$,b$,c$,no% (vérifier si ces variables exites dans le code d'intégration) gosub routine_saisie_date:' la routine est prête à fonctionner
END ' ============================== PROGRAMME =====================================
' faire tourner la routine date dans le premier container start: parent container_date%,container1%:' affecte un parent au container date (facultatif) top container_date%,30:left container_date%,10:' position du container date show container_date%:' print le container date aaaa$=right$(date$,4):mm$="":jj$="":' détermine les affichage par défault (année, mois et jour) (facultatif) afi_date$="O":no_afi_date%=alpha_afi_date1%:gosub date:' execute la routine date avec affichage de la date dans l'alpha 1 active button2% return
' faire tourner la routine date dans le deuxième container suite: if dat$="" then message " Vous devez saisir la première date":return active button3%:inactive button1% a$=caption$(alpha_afi_date1%):caption 0,a$:' ici on récupère le résultat dans une autre variable (si besoin) parent container_date%,container2%:' CHANGE le parent du container date no_afi_date%=alpha_afi_date2%:' redéfini l'objet pour l'affichage gosub date:' execute la routine date en affichant la date ' Remarques: inutile de reprendre les règlages qui ne changent pas. return
fin: inactive button2%:inactive button3% if dat$<>"" then hide container_date%:' pour libérer le container return ' =========================== SUB (routine_saisie_date) ======================== ' ci-dessous à placer dans le code destination (vers la fin) format_date: dat$=jj$+"/"+mm$+"/"+aaaa$:' ici règlage du format de la date et récup des variables return ' ******* afi_date: if afi_date$<>"O" then return caption no_afi_date%,dat$ return date: text combo_mois%,"":text combo_jour%,"":text edit_annee%,aaaa$:clear combo_mois% clear combo_jour%:inactive combo_jour%:inactive edit_annee%:inactive bouton_edit_annee% inactive bouton_clear_date%:active combo_mois%:set_focus combo_mois%:gosub mois if afi_date$="O" then caption no_afi_date%," " return mois: for n=1 to 12 if n<10 then a$="0"+str$(n) if n>9 then a$=str$(n) item_add combo_mois%,a$ next n on_click combo_mois%,jour return jour: active bouton_clear_date%:on_click bouton_clear_date%,reinit_date mm$=item_index$(combo_mois%) inactive combo_mois%:active combo_jour%:set_focus combo_jour% if val(mm$)=1 or val(mm$)=3 or val(mm$)=5 or val(mm$)=7 or val(mm$)=8 or val(mm$)=10 or val(mm$)=12 maxj=31 else maxj=30 end_if if val(mm$)=2 then maxj=29 for n=1 to maxj if n<10 then a$="0"+str$(n) if n>9 then a$=str$(n) item_add combo_jour%,a$ next n active bouton_edit_annee%:on_click bouton_edit_annee%,fin_date2 on_click combo_jour%,annee return annee: jj$=item_index$(combo_jour%) inactive combo_jour%:active edit_annee%:set_focus edit_annee% on_change edit_annee%,fin_date return fin_date: active bouton_edit_annee%:on_click bouton_edit_annee%,fin_date2 return fin_date2: a$=text$(edit_annee%) if numeric(a$)=0 then message "Valeur numérique uniquement":text edit_annee%,"":set_focus edit_annee%:return if len(a$)<>4 then message "Format AAAA: 4 caractères attendus":text edit_annee%,"":set_focus edit_annee%:return aaaa$=a$:inactive edit_annee%:inactive bouton_edit_annee% if jj$="29" and mm$="02" then gosub annee_bissextile gosub format_date:gosub afi_date return annee_bissextile: a$=right$(aaaa$,2):c$="" for n=0 to 96 step 4 if n<10 then b$="0"+str$(n) if n>9 then b$=str$(n) if a$=b$ then c$="O":exit_for c$="N" next n if c$="N" jj$="28":text combo_jour%,"28":message " "+aaaa$+" n'est pas une année bissextile"+chr$(13)+"Le jour est remis automatiquement à 28" else jj$="29" end_if return reinit_date: goto date return ' *************** routine_saisie_date: dim jj$,mm$,aaaa$,maxj,dat$,afi_date$ dim combo_mois%,combo_jour%,edit_annee%,alpha_mois%,alpha_jour%,alpha_annee% dim bouton_edit_annee%,bouton_clear_date%,container_date%,no_afi_date% label mois,date,jour,annee,fin_date,fin_date2,annee_bissextile,reinit_date,afi_date,format_date no%=no%+1:container_date%=no%:container no%:' Création du Container de saisie date width container_date%,260:height container_date%,56 top container_date%,100:left container_date%,10:hide container_date% no%=no%+1:combo_mois%=no%:combo combo_mois%:parent combo_mois%,container_date%:' Combo de saisie du mois width combo_mois%,40:top combo_mois%,25:left combo_mois%,10 no%=no%+1:combo_jour%=no%:combo combo_jour%:parent combo_jour%,container_date%:' Combo de saisie du jour width combo_jour%,width(combo_mois%):top combo_jour%,top(combo_mois%) left combo_jour%,left(combo_mois%)+width(combo_mois%)+20 no%=no%+1:edit_annee%=no%:edit edit_annee%:parent edit_annee%,container_date%:' Edit de saisie de l'année width edit_annee%,50:top edit_annee%,top(combo_mois%) left edit_annee%,left(combo_jour%)+width(combo_jour%)+20 no%=no%+1:alpha_mois%=no%:alpha alpha_mois%:parent alpha_mois%,container_date%:' Alpha "Mois" top alpha_mois%,top(combo_mois%)-15:left alpha_mois%,left(combo_mois%) caption alpha_mois%," Mois " no%=no%+1:alpha_jour%=no%:alpha alpha_jour%:parent alpha_jour%,container_date%:' Alpha "Jour" top alpha_jour%,top(combo_mois%)-15:left alpha_jour%,left(combo_jour%) caption alpha_jour%," Jour " no%=no%+1:alpha_annee%=no%:alpha alpha_annee%:parent alpha_annee%,container_date%:' Alpha "Année" top alpha_annee%,top(combo_mois%)-15:left alpha_annee%,left(edit_annee%) caption alpha_annee%,"Année " no%=no%+1:bouton_edit_annee%=no%:button bouton_edit_annee%:parent bouton_edit_annee%,container_date%:' bouton de confirmation de saisie de l'année width bouton_edit_annee%,16:height bouton_edit_annee%,16 top bouton_edit_annee%,top(edit_annee%)+3 left bouton_edit_annee%,left(edit_annee%)+width(edit_annee%)-18 caption bouton_edit_annee%,"X" no%=no%+1:bouton_clear_date%=no%:button bouton_clear_date%:parent bouton_clear_date%,container_date%:' bouton de réinitialisation width bouton_clear_date%,60:height bouton_clear_date%,20 top bouton_clear_date%,top(edit_annee%)+1 left bouton_clear_date%,left(bouton_edit_annee%)+width(bouton_edit_annee%)+10 caption bouton_clear_date%,"Clear Date" return ' ======================== Fin de la routine: Saisie_Date ======================
A+
Dernière édition par Jean Claude le Ven 25 Mai 2012 - 10:05, édité 1 fois | |
| | | ambroise
Nombre de messages : 264 Localisation : Haute-Savoie Date d'inscription : 29/04/2012
| Sujet: Re: Utilitaire de saisie d'une date Jeu 24 Mai 2012 - 15:41 | |
| | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Utilitaire de saisie d'une date Ven 25 Mai 2012 - 10:07 | |
| J'ai rééditer le dernier code qui n'était pas tout à fait correct. Cette fois-ci çà semble être OK.
A+ | |
| | | ambroise
Nombre de messages : 264 Localisation : Haute-Savoie Date d'inscription : 29/04/2012
| Sujet: Re: Utilitaire de saisie d'une date Ven 25 Mai 2012 - 14:26 | |
| Pas moyen de passer au second volet bien que la date soit saisie... Message d'erreur : Vous devez saisir une date. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Utilitaire de saisie d'une date Ven 25 Mai 2012 - 16:22 | |
| Curieux, je viens de prendre le code à partir du Forum et çà marche. Serait-ce encore un coup de W7. Je peux pas tester sous W7, vu que je l'ai pas.
J'espère que çà n'empêche pas d'utiliser la routine Tu peux toujours supprimer "inactive button2%" à la ligne 49
Je fais appel à la bienveillance de JL35 ou ?? pour un essai sous W7.
Avant de quitter, je viens de penser "as-tu cliqué sur la croix dans l'edit année pour valider l'année ?"
Répond-moi, çà m'intéresse car cela voudrait dire que ce bouton "X" n'est pas assez explicite.
A+ | |
| | | ambroise
Nombre de messages : 264 Localisation : Haute-Savoie Date d'inscription : 29/04/2012
| Sujet: Re: Utilitaire de saisie d'une date Ven 25 Mai 2012 - 16:36 | |
| Ah oui, en cliquant sur le bouton x, ça fonctionne bien. J'avais compris, par la croix, qu'il n'y avait rien à faire pour l'année. Surtout qu'elle apparaît plus ou moins grisée, ce qui m'a conduit à penser qu'elle était inactive. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Utilitaire de saisie d'une date Ven 25 Mai 2012 - 16:42 | |
| du coup j'ai essayé et ça m'a un peu surpris aussi d'être obligé de valider l'année par la croix alors qu'elle est déjà en place. Tu aurais pu mettre également un spin sur l'année, quitte à proposer l'année 2012 courante en implicite, et valider d'office ce qu'il y a dedans ? Ou mettre un bouton valider au lieu de 'Clear Date' (en français dans le texte ) et supprimer le bouton croix, ça aurait été plus simple, non ? Mais c'est juste pour t'embêter Jean Claude. PS si tu veux tu peux mettre 'Validate' au lieu de 'Valider', ça fait plus classieux Autre chose qui me gêne (mais ce n'est peut-être que moi): ton code n'est pas facile à lire sans les indentations, et avec les routines collées les unes aux autres. Mais bon, tu me diras que ce n'est pas fait pour être lu par les autres. Et moi je te répondrai: sauf ici. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Utilitaire de saisie d'une date Ven 25 Mai 2012 - 17:06 | |
| Bon, je vois que mes explications sont insuffisante ou mal écrite.... - Code:
-
aaaa$=right$(date$,4):mm$="":jj$="":' détermine les affichages par défault (année, mois et jour) (facultatif) @Ambroise, si l'année est grisé c'est parce que l'édit a le Focus, c'est pour permettre à l'utilisateur de changer la date. Mais toi, en tant que programmeur tu peux décider que l'édit soit vide en rectifiant la variable aaaa$ de la ligne 66 (voir extrait ci-dessus). @JL35 Si je n'ai pas mis de spin c'est que si l'utilisateur veut une date de l'an 0001 et que je mets par défaut l'année en cours en position, je te laisse imaginer tout les jurons criés par l'utilisateur à l'encontre du programmeur quand il faudra qu'il passe de 2012 à 0001. Le bouton "clear date": bon ok on peut changer son caption par effacer ou recommencer, mais tout de même il permet à l'utilisateur de recommencer en cas d'erreur de saisie avant de valider. @tous Le bouton "X": il faudra que j'y réfléchisse car ce n'est pas assez intuitif. Merci à vous pour vos réflexions pleines d'enseignements (Sauf celles de JL35 qui manifestement est de mauvaise foie ) A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Utilitaire de saisie d'une date Ven 25 Mai 2012 - 17:18 | |
| Non, pas de mauvaise foie, mon foie va très bien (ma foi) ! 1) ta remarque concernant le passage de 2012 à 0001: l'utilisateur n'est évidemment pas obligé de tout parcourir, il rentre l'année en dur, le spin est aussi un edit (double avantage). Et si l'utilisateur veut rectifier avant de valider, il peut très bien le faire dans les fenêtres de saisie sans prévenir avant par un bouton ! 2) autre chose, ta routine d'année bissextile comporte une lacune. Je rappelle la règle, une année est bissextile: - soit si elle est divisible par 4 mais non par 100 - soit si elle est divisible par 400 Ainsi l'année 2000 est bissextile, mais l'année 1900 n'est pas bissextile. Je te fais cadeau de la routine: - Code:
-
bi=0: IF (FRAC(Annee/4)=0 AND FRAC(Annee/100)>0) OR FRAC(Annee/400)=0 THEN bi=1 | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Utilitaire de saisie d'une date Ven 25 Mai 2012 - 17:37 | |
| Merci JL35 qui a la foi(e x s) pour le cadeau. J'ai vérifié tes dires - Citation :
- Depuis l'ajustement du calendrier grégorien, sont bissextiles les années1 :
soit divisibles par 4 mais non divisibles par 100 ; soit divisibles par 400. Donc, inversement, ne sont pas bissextiles les années : soit non divisibles par 4 ; soit divisibles par 100, mais pas par 400. WIKIPEDIA Je vais corriger cela. Pour le spin, je ne pensais pas qu'il était aussi un édit, dans ce cas je crois que je vais l'adopter. Il était une fois, dans la ville de Foix....... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Utilitaire de saisie d'une date Ven 25 Mai 2012 - 17:44 | |
| En plus il ne me fait pas confiance et il vérifie, c'est un comble ! Blague à part, ton format de saisie est inhabituel: MM, JJ AAAA, pourquoi pas le classique JJ MM AAAA ? | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Utilitaire de saisie d'une date Ven 25 Mai 2012 - 18:13 | |
| Cela aussi m'inquiète, Mais au final la variable dat$ est au format JJ/MM/AAA. Le programmeur peut décider de changer ce format à la ligne 89. - Code:
-
dat$=jj$+"/"+mm$+"/"+aaaa$:' ici règlage du format de la date et récup des variables Par contre la saisie commence par le mois et çà risque de dérouter l'utilisateur. Si j'ai commencé par le mois c'est pour remplir le combo des jours avec 29,30 ou 31 suivant le mois sélectionné. J'ai plusieurs options pour la saisie: 1) je fais tout à l'envers (c'est dire dans l'odre l'année, le mois, le jour) 2) si je commence par les jours alors il faudra que je teste la validité du mois et du jour sélectionné. 3) j'abandonne ma façon de faire et je reprends le programme de Bignono qui lui se fait dans un édit et contrôle les entées de l'utilisateur. Ce que j'aime bien avec les combo(s) c'est que l'utilisateur utilise moins le clavier, dans ce cas c'est plutôt l'option 2. Il n'en reste pas moins que la mise au ban d'essai de ce code est une bonne chose. Je vais le revoir une fois de plus, pour l'améliorer. Mais çà va pas être pour demain car j'ai d'autres occupations pour le Weekend. A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Utilitaire de saisie d'une date Ven 25 Mai 2012 - 18:17 | |
| Tout de même Jean Claude il y a des priorités, et tu pourrais remettre ton we à plus tard Cela dit, à mon avis ce n'est pas le format final qui compte (on peut toujours le bricoler comme on veut par programme), mais l'interface utilisateur la plus simple et intuitive possible. Et ça ce n'est certes pas toujours évident pour le programmeur ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Utilitaire de saisie d'une date Ven 25 Mai 2012 - 18:32 | |
| Tu as raison, mais ma philosophie est que le programmeur doit: Prévoir les erreurs de saisie de l'utilisateur, lui faciliter la tache en lui proposant des programmes conviviales et intuitifs..... ah ! s'il n'y avait pas d'utilisateurs, on pourrait faire ce qu'on veut. A+ | |
| | | Contenu sponsorisé
| Sujet: Re: Utilitaire de saisie d'une date | |
| |
| | | | Utilitaire de saisie d'une date | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |