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 |
---|
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 Dim 27 Mai 2012 - 21:01 | |
| - Citation :
- Une question : pourquoi afficher les combo avec 1 pixel de décalage les uns des autres ?
??? Regarde bien: les 4 combos 1028, 1029, 1030 et 1031 sont affichés exactement à la même position. Ce qui change, c'est leur numéro qui est 1000 + le nombre de jours dans le mois... Pour tes remarques concernant la programmation: ce sont des idées intéressantes. Le modulo est facile à mettre en oeuvre, et le résultat est fonctionnellement identique à ce que j'ai fait. C'est une affaire de goût, de style de programmation. Pour l'adaptation automatique des mois, c'est un peu plus complexe: il faut mettre en place le même mécanisme que pour les jours: 2 combos différents en fonction du numéro du jour saisi: un combo avec les 12 mois tant que le numéro du jour est inférieur à 29, et un combo avec les mois de 31 jours si le jour est 31. Mais on ne peut pas aller plus loin. Est-ce que ça vaut la peine ? | |
| | | 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 Dim 27 Mai 2012 - 21:28 | |
| @Klaus,
Grace à l'affichage du résultat dans caption 0 j'ai compris comment attribuer des variables si besoin. (je n'ai pas l'habitude d'utiliser text$(N) directement comme variable.)
Je n'arrive pas (même en jouant l'utilisateur vicieux, pervers, ....) à planter ton programme.
Là encore je m’aperçois que tu gères les évènements d'une manière différente de la mienne; ou plus exactement je ne gère pas comme toi. Maintenant je commence à comprendre certaine de mes difficultés avec Panoramic. Dans ton code avant END, il n'y a pas de goto ou de gosub, juste un on_click (parce qu'il faut bien démarrer le programme). Et c'est bien là mon erreur de jugement par rapport aux évènements.
Ce qui est remarquable dans ta méthode, c'est que l'utilisateur peut commencer par n'importe quel bout (jour, mois , année) çà ne perturbe en rien la correction automatique (si besoin) ou un remplissage des combos correct en cas de saisie en premier par le mois ou l'année.
Pour soutenir Ambroise, je dirais que quelques messages pour avertir l'utilisateur que la date a été réajustée automatiquement par le programme serait les biens-venus, mais bon c'est simple de le faire.
Autre chose: pour le programmeur tu as prévus le remplissage des combo mois et jour par 2 chiffres.... Aussi: on économise 3 alphas en affichant dans les objets la sasie attendue.
Je m'incline,
Au bout du compte, je te décerne le prix "Jean Claude" du meilleurs code de saisie d'une date.
Simple, sans erreur, libre d'utilisation pour l'utilisateur, et intuitif.
Bravo.
EDIT: on s'est croisé, mais cela ne change rien pour moi.
| |
| | | 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 Dim 27 Mai 2012 - 21:40 | |
| Mille merci pour ton appréciation détaillée, Jean-Claude ! J'apprécie ces commentaires, surtout venant de quelqu'un d'aussi rompu que toi, à la programmation et l'analyse du code des autres.
Une autre piste possible: gérer la date par des scroll_bar dont les valeurs maxi seraient le nombre de jours selon les 4 cas, et le nombre de mois. Ca pourrait être sympa aussi. Il y a plein de méthodes différentes ! | |
| | | 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 Lun 28 Mai 2012 - 8:20 | |
| Heu... rompu à la programmation, là tu y vas fort. Analyser le code des autres, là tu es plus dans la vrai Ce qui compte, c'est que sur ce sujet, entre toi, Ambroise, Bignono, JL35, Pappydal, Jicehel, Cosmos, j'ai appris. A+ | |
| | | ambroise
Nombre de messages : 264 Localisation : Haute-Savoie Date d'inscription : 29/04/2012
| Sujet: Re: Utilitaire de saisie d'une date Lun 28 Mai 2012 - 9:36 | |
| - Klaus a écrit:
??? Regarde bien: les 4 combos 1028, 1029, 1030 et 1031 sont affichés exactement à la même position. Je m'interroge avec toi sur ma propre question... Je ne sais pas où j'ai vu un décalage d'un pixel ? J'en conclus que je ne dois pas programmer pendant la digestion ! Il ne me reste plus guère de temps dans la journée pour programmer l'esprit clair... | |
| | | 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 Lun 28 Mai 2012 - 9:55 | |
| | |
| | | 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 Lun 28 Mai 2012 - 10:22 | |
| J'ai fait une version dans laquelle le module de saisie de date est encapsulé dans une form qui est déclenchée par un bouton. - Code:
-
' saisie de date par Klaus
label saisir dim date_saisie$
button 1 : top 1,10 : left 1,10 : width 1,150 caption 1,"Saisir une date" : on_click 1,saisir alpha 2 : top 2,40 : left 2,10
' form de saisie de date form 1000 : hide 1000 : command_target_is 1000 height 1000,90 : width 1000,330 top 1000,200 : left 1000,300 caption 1000,"Saisir une date" ' déclarations pour le module "date" label ch_mois, val_date, ann_date, bissextile dim i%, nj%, j_mois%(12), s$, a%, f% data 31,29,31,30,31,30,31,31,30,31,30,31 for i%=1 to 12 read j_mois%(i%) next i% on_close 1000,ann_date ' pour 31 jours nj% = 31 combo 1031 : top 1031,10 : left 1031,10 : width 1031,50 text 1031,"Jour" for i%=1 to 31 item_add 1031,str$(i%) : ' jour sur 1 ou 2 chiffres ' item_add 1031,right$("0"+str$(i%),2) : ' jour sur 2 chiffres next i%
' pour 30 jours combo 1030 : hide 1030 : top 1030,10 : left 1030,10 : width 1030,50 text 1030,"Jour" for i%=1 to 30 item_add 1030,str$(i%) : ' jour sur 1 ou 2 chiffres ' item_add 1030,right$("0"+str$(i%),2) : ' jour sur 2 chiffres next i%
' pour 29 jours combo 1029 : hide 1029 : top 1029,10 : left 1029,10 : width 1029,50 text 1029,"Jour" for i%=1 to 29 item_add 1029,str$(i%) : ' jour sur 1 ou 2 chiffres ' item_add 1029,right$("0"+str$(i%),2) : ' jour sur 2 chiffres next i%
' pour 28 jours combo 1028 : hide 1028 : top 1028,10 : left 1028,10 : width 1028,50 text 1028,"Jour" for i%=1 to 28 item_add 1028,str$(i%) : ' jour sur 1 ou 2 chiffres ' item_add 1028,right$("0"+str$(i%),2) : ' jour sur 2 chiffres next i%
' pour le mois combo 1012 : top 1012,10 : left 1012,70 : width 1012,50 text 1012,"Mois" : on_click 1012,ch_mois for i%=1 to 12 item_add 1012,str$(i%) : ' mois sur 1 ou 2 chiffres ' item_add 1012,right$("0"+str$(i%),2) : ' moisr sur 2 chiffres next i%
' pour l'année edit 1099 : top 1099,10 : left 1099,130 : width 1099,40 text 1099,"Année"
' pour valider button 1010 : top 1010,10 : left 1010,200 : caption 1010,"Valider" on_click 1010,val_date
' pour annuler button 1011 : top 1011,10 : left 1011,200 : caption 1011,"Annuler" on_click 1011,ann_date
end
ch_mois: off_click 1012 s$ = text$(1012) if numeric(s$)=0 text 1012,"Mois" else if val(s$)<1 text 1012,"1" else if val(s$)>12 then text 1012,"12" end_if end_if s$ = text$(1012) i% = j_mois%(val(s$)) if i%<>nj% s$ = text$(1000+nj%) if numeric(s$)=1 if val(s$)>i% then s$ = str$(i%) end_if text 1000+i%,s$ show 1000+i% hide 1000+nj% nj% = i% end_if on_click 1012,ch_mois return
val_date: if numeric(text$(1099))=0 text 1099,"Année" set_focus 1099 return end_if if text$(1012)="2" then gosub bissextile : ' mois sur 1 ou 2 chiffres ' if text$(1012)="02" then gosub bissextile : ' mois sur 2 chiffres date_saisie$ = "Date saisie: "+text$(1000+nj%)+"/"+text$(1012)+"/"+text$(1099) caption 2,date_saisie$ hide 1000 active 0 to_foreground 0 return ann_date: date_saisie$ = "" caption 2,date_saisie$ hide 1000 active 0 to_foreground 0 return hide 1000 active 0 to_foreground 0 return
bissextile: f% = 0 if numeric(text$(1099))=0 f% = 1 else ' ici, on détermine si c'est une année bissextile a% = val(text$(1099)) if a%-int(a%/4)*4=0 then f% = 1 if a%-int(a%/400)*400=0 then f% = 0 ' fin de contrôle d'année bissextile: f%=1 si c'est vrai end_if if f%=0 if text$(1000+nj%)="29" text 1028,"28" else text 1028,text$(1000+nj%) end_if show 1028 hide 1000+nj% nj% = 28 else if val(text$(1000+nj%))>29 text 1029,"29" else text 1029,text$(1000+nj%) end_if show 1029 if nj%<>29 then hide 1000+nj% nj% = 29 end_if return
saisir: date_saisie$ = "" show 1000 inactive 0 return | |
| | | 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 Lun 28 Mai 2012 - 10:25 | |
| Il y a aussi le "calendrier Pop-Up" que j'ai publié sur mon site depuis longtemps. Voici le source: - Code:
-
rem ********************************************************************** rem * * rem * calendrier_bas - programme de test pour un calendrier popup * rem * * rem * ce programme inclut en un seul morceau tous les modules * rem * qui peuvent être inclus par la directive #INCLUDE * rem * * rem **********************************************************************
rem #include "calendrier_labels.inc" rem ********************************************************************** rem * * rem * #INCLUDE "calendrier_labels.inc" * rem * * rem **********************************************************************
label show_calendrier, show_resultat label calendrier_dessiner, calendrier_redessiner label calendrier_prec, calendrier_suiv, calendrier_seldate label calendrier_abort, calendrier_cejour, calendrier_OK
rem ********************************************************************** rem * * rem * fin #INCLUDE "calendrier_labels.inc" * rem * * rem **********************************************************************
rem #include "dateadd_labels_labels.inc" rem ********************************************************************** rem * * rem * #INCLUDE "dateadd_labels.inc" * rem * * rem **********************************************************************
label dateadd_jj, dateadd_mm, dateadd_aaaa label dateadd_eclate, dateadd_fusionne, dateadd_fin_de_mois label dateadd_fevrier
rem ********************************************************************** rem * * rem * fin #INCLUDE "dateadd_labels.inc" * rem * * rem **********************************************************************
rem #include "jour_de_semaine_labels.inc" rem ********************************************************************** rem * * rem * #INCLUDE "jour_de_semaine_labels.inc" * rem * * rem **********************************************************************
label jour_de_semaine
rem ********************************************************************** rem * * rem * fin #INCLUDE "jour_de_semaine_labels.inc" * rem * * rem **********************************************************************
rem #include "calendrier_declarations.inc" rem ********************************************************************** rem * * rem * #INCLUDE "calendrier_declarations.inc" * rem * * rem **********************************************************************
dim calendrier_visible%, calendrier_resultat$ dim calendrier_cible%, calendrier_objet_calendrier% dim calendrier_objet_form% dim calendrier_decalage%, calendrier_modifie% dim calendrier_date$
rem ********************************************************************** rem * * rem * fin #INCLUDE "calendrier_declarations.inc" * rem * * rem **********************************************************************
rem #include "jour_de_semaine_declarations.inc" rem ********************************************************************** rem * * rem * #INCLUDE "jour_de_la_demaine_declarations.inc" * rem * * rem * Calcul du jour de la semaine * rem * * rem * Cette routine calcule le jour de la semaine à partir d'une * rem * date en format jj/mm/aaaa. * rem * * rem * Appel: * rem * gosub jour_de_semaine * rem * * rem * Paramètre en entrée: * rem * jour_de_semaine_date$ * rem * * rem * Paramètres en sortie: * rem * jour_de_semaine_numero% * rem * jour_de_semaine_text$ * rem * * rem * Installation: * rem * Copier les déclarations au début du programme, et le code * rem * à la fin du programme dans lequel on veut l'utiliser * rem * * rem * Utilisation: * rem * jour_de_semaine_date$ = "16/05/2010" * rem * gosub jour_de_semaine * rem * message str$(jour_de_semaine_numero%) + " = " + jour_de_semaine_text$ rem * * rem **********************************************************************
dim jour_de_semaine_date$, jour_de_semaine_numero%, jour_de_semaine_text$ dim jour_de_semaine_j%, jour_de_semaine_m%, jour_de_semaine_a% dim jour_de_semaine_m1%, jour_de_semaine_a1%, jour_de_semaine_ns% dim jour_de_semaine_as%, jour_de_semaine_f%
rem ********************************************************************** rem * * rem * fin #INCLUDE jour_de_semaine_declarations.inc * rem * * rem **********************************************************************
rem #include "dateadd_declarations.inc" rem **************************************************************** rem * * rem * #INCLUDE "dateadd_declarations.inc" * rem * * rem * dateadd - simulation de la fonction dateadd de VB * rem * * rem * Cette routine a 3 points d'entrée: * rem * dateadd_jj additionner des jours à une date * rem * dateadd_mm additionner des mois à une date * rem * dateadd_aaaa additionner des années à une date * rem * * rem * En entrée, 2 variables sont à charger: * rem * dateadd_date$ la date à modifier (en "jj/mm/aaa") * rem * dateadd_delta% la fraction à ajouter ou à retirer * rem * data_add_delta%<0: retirer * rem * data_add_delta%>0: ajouter * rem * * rem * En sortie, 1 variable est à consulter: * rem * dateadd_date$ la date résultante * rem * * rem * Installation: * rem * copier simplement ce module dans le source, en * rem * plaçant les déclarations au début et la * rem * partie code à la fin du source * rem * * rem ****************************************************************
dim dateadd_date$, dateadd_delta% dim dateadd_jj%, dateadd_mm%, dateadd_aaaa%, dateadd_jours%(12)
rem **************************************************************** rem * * rem * fin #INCLUDE dateadd_declarations.inc * rem * * rem ****************************************************************
rem **************************************************************** rem * * rem * Programme de test calendrier.bas principal * rem * * rem ****************************************************************
calendrier_visible% = 0 button 10 caption 10,"Calendrier" top 10,250 left 10,100 on_click 10,show_calendrier button 11 caption 11,"Résultat ?" top 11,300 left 11,100 on_click 11,show_resultat end
show_calendrier: if calendrier_visible%=0 calendrier_date$ = date$ calendrier_visible% = 1 gosub calendrier_dessiner show calendrier_objet_form% active calendrier_objet_form% inactive 0 else show calendrier_objet_form% active calendrier_objet_form% if calendrier_visible%=2 then calendrier_visible% = 1 inactive 0 end_if return
show_resultat: if calendrier_resultat$="" message "Aucune date n'a été choisie !" else message "La date choisie est le " + calendrier_resultat$ end_if return
rem #include "dateadd_procedure.inc" rem **************************************************************** rem * * rem * #INCLUDE dateadd_procedure.inc * rem * * rem * dateadd - simulation de la fonction dateadd de VB * rem * * rem * Cette routine a 3 points d'entrée: * rem * dateadd_jj additionner des jours à une date * rem * dateadd_mm additionner des mois à une date * rem * dateadd_aaaa additionner des années à une date * rem * * rem * En entrée, 2 variables sont à charger: * rem * dateadd_date$ la date à modifier (en "jj/mm/aaa") * rem * dateadd_delta% la fraction à ajouter ou à retirer * rem * data_add_delta%<0: retirer * rem * data_add_delta%>0: ajouter * rem * * rem * En sortie, 1 variable est à consulter: * rem * dateadd_date$ la date résultante * rem * * rem * Installation: * rem * copier simplement ce module dans le source, en * rem * plaçant les déclarations au début et la * rem * partie code à la fin du source * rem * * rem ****************************************************************
dateadd_eclate: dateadd_jj% = val(left$(dateadd_date$,2)) dateadd_mm% = val(mid$(dateadd_date$,4,2)) dateadd_aaaa% = val(right$(dateadd_date$,4)) return
dateadd_fusionne: dateadd_date$ = str$(dateadd_mm%) + "/" + str$(dateadd_aaaa%) if dateadd_mm%<10 then dateadd_date$ = "0" + dateadd_date$ dateadd_date$ = str$(dateadd_jj%) + "/" + dateadd_date$ if dateadd_jj%<10 then dateadd_date$ = "0" + dateadd_date$ return
dateadd_fin_de_mois: dateadd_jours%(1)=31 dateadd_jours%(2)=28 dateadd_jours%(3)=31 dateadd_jours%(4)=30 dateadd_jours%(5)=31 dateadd_jours%(6)=30 dateadd_jours%(7)=31 dateadd_jours%(8)=31 dateadd_jours%(9)=30 dateadd_jours%(10)=31 dateadd_jours%(11)=30 dateadd_jours%(12)=31 return
dateadd_fevrier: if dateadd_mm%=2 if dateadd_aaaa%=int(dateadd_aaaa%/4)*4 then dateadd_jours%(2) = 29 end_if return
dateadd_aaaa: gosub dateadd_eclate dateadd_aaaa% = dateadd_aaaa% + dateadd_delta% gosub dateadd_fusionne return
dateadd_mm: gosub dateadd_eclate gosub dateadd_fin_de_mois dateadd_mm% = dateadd_mm% + dateadd_delta% if dateadd_mm%<1 while dateadd_mm%<1 dateadd_aaaa% = dateadd_aaaa% - 1 dateadd_mm% = dateadd_mm% + 12 end_while else while dateadd_mm%>12 dateadd_aaaa% = dateadd_aaaa% + 1 dateadd_mm% = dateadd_mm% - 12 end_while end_if if dateadd_jj%>dateadd_jours%(dateadd_mm%) then dateadd_jj% = dateadd_jours%(dateadd_mm%) gosub dateadd_fusionne return
dateadd_jj: gosub dateadd_eclate gosub dateadd_fin_de_mois dateadd_jj% = dateadd_jj% + dateadd_delta% if dateadd_jj%<1 while dateadd_jj%<1 dateadd_mm% = dateadd_mm% - 1 if dateadd_mm%<1 dateadd_mm% = 12 dateadd_aaaa% = dateadd_aaaa% - 1 end_if gosub dateadd_fevrier dateadd_jj% = dateadd_jj% + dateadd_jours%(dateadd_mm%) end_while else while dateadd_jj%>dateadd_jours%(dateadd_mm%) gosub dateadd_fevrier dateadd_jj% = dateadd_jj% - dateadd_jours%(dateadd_mm%) dateadd_mm% = dateadd_mm% + 1 if dateadd_mm%>12 dateadd_mm% = 1 dateadd_aaaa% = dateadd_aaaa% + 1 end_if end_while end_if gosub dateadd_fusionne return
rem #include "jour_de_semaine_procedure.inc" rem ********************************************************************** rem * * rem * #INCLUDE jour_de_semaine_procedure.inc * rem * * rem * Début de la partie "code" à copier à la fin du source * rem * * rem **********************************************************************
jour_de_semaine: jour_de_semaine_j% = val(left$(jour_de_semaine_date$,2)) jour_de_semaine_m% = val(mid$(jour_de_semaine_date$,4,2)) jour_de_semaine_a% = val(right$(jour_de_semaine_date$,4))
if jour_de_semaine_m%<3 jour_de_semaine_m1% = jour_de_semaine_m% + 10 jour_de_semaine_a1% = jour_de_semaine_a% - 1 else jour_de_semaine_m1% = jour_de_semaine_m% - 2 jour_de_semaine_a1% = jour_de_semaine_a% end_if
jour_de_semaine_ns% = int(jour_de_semaine_a1%/100)
jour_de_semaine_as% = jour_de_semaine_a1% - jour_de_semaine_ns%*100
jour_de_semaine_f% = jour_de_semaine_j% + jour_de_semaine_as% + int(jour_de_semaine_as%/4) - 2* jour_de_semaine_ns% + int(jour_de_semaine_ns%/4) + int((26*jour_de_semaine_m1%-2)/10)
jour_de_semaine_numero% = jour_de_semaine_f% - int(jour_de_semaine_f%/7)*7
select jour_de_semaine_numero% case 0: jour_de_semaine_text$ = "Dimanche" case 1: jour_de_semaine_text$ = "Lundi" case 2: jour_de_semaine_text$ = "Mardi" case 3: jour_de_semaine_text$ = "Mercredi" case 4: jour_de_semaine_text$ = "Jeudi" case 5: jour_de_semaine_text$ = "Vendredi" case 6: jour_de_semaine_text$ = "Samedi" end_select
return rem **************************************************************** rem * * rem * fin #INCLUDE jour_de_semaine_procedure.inc * rem * * rem ****************************************************************
rem #include "calendrier_procedure.inc" rem ********************************************************************** rem * * rem * #INCLUDE calendrier_procedure.inc * rem * * rem * Début de la partie "code" à copier à la fin du source * rem * * rem **********************************************************************
rem ************************************************************************ rem * * rem * routines on_click du calendrier * rem * * rem ************************************************************************
calendrier_prec: dateadd_date$ = calendrier_date$ dateadd_delta% = -1 gosub dateadd_mm calendrier_date$ = dateadd_date$ goto calendrier_redessiner
calendrier_suiv: dateadd_date$ = calendrier_date$ dateadd_delta% = 1 gosub dateadd_mm calendrier_date$ = dateadd_date$ goto calendrier_redessiner
calendrier_abort: hide calendrier_objet_form% calendrier_visible%=2 inactive calendrier_objet_form% calendrier_resultat$ = "" active 0 to_foreground 0 return
calendrier_cejour: calendrier_date$ = date$ goto calendrier_redessiner
calendrier_OK: hide calendrier_objet_form% calendrier_visible%=2 inactive calendrier_objet_form% calendrier_resultat$ = calendrier_date$ active 0 to_foreground 0 return
calendrier_seldate: calendrier_j% = mouse_x_left_down(calendrier_objet_calendrier%) calendrier_i% = mouse_y_left_down(calendrier_objet_calendrier%) calendrier_j% = int((calendrier_j% + 33)/34) calendrier_i% = int((calendrier_i% + 23)/24) - 2 if calendrier_i%<1 then return dateadd_delta% = ((calendrier_i%-1)*7 + calendrier_j%) - ((calendrier_jlig%-1)*7 + calendrier_jcol%) dateadd_date$ = calendrier_date$ gosub dateadd_jj calendrier_date$ = dateadd_date$ goto calendrier_redessiner
rem ************************************************************************ rem * * rem * routines de service du calendrier * rem * * rem ************************************************************************
calendrier_dessiner:
calendrier_objet_form% = 1000 calendrier_objet_calendrier% = 1001 form calendrier_objet_form% command_target_is calendrier_objet_form% border_hide calendrier_objet_form% hide calendrier_objet_form% border_hide calendrier_objet_form% top calendrier_objet_form%,200 left calendrier_objet_form%,200 width calendrier_objet_form%, 248 height calendrier_objet_form%, 243 picture calendrier_objet_calendrier% width calendrier_objet_calendrier%, 238 height calendrier_objet_calendrier%, 216 caption calendrier_objet_form% , "Calendrier" on_click calendrier_objet_calendrier%, calendrier_seldate
dim calendrier_i%, calendrier_j%, calendrier_k%, dim calendrier_baseh%, calendrier_basev%, calendrier_basec% dim calendrier_debut_mois$ dim calendrier_jour2% dim calendrier_jour1%, calendrier_jours_prec%, calendrier_delta%, calendrier_jlig%, calendrier_jcol% dim calendrier_color_cadre%(2), calendrier_color_texte%(2), calendrier_color_fond_text%(2) dim calendrier_color_fond_jours%(2), calendrier_color_du_jour%(2) dim calendrier_color_jours%(2), calendrier_color_fond_texte%(2), calendrier_color_hors%(2) dim calendrier_mois$(12), calendrier_jmois%(12)
calendrier_color_cadre%(0) = 24 calendrier_color_cadre%(1) = 95 calendrier_color_cadre%(2) = 214 calendrier_color_texte%(0) = 255 calendrier_color_texte%(1) = 255 calendrier_color_texte%(2) = 255 calendrier_color_jours%(0) = 0 calendrier_color_jours%(1) = 0 calendrier_color_jours%(2) = 0 calendrier_color_fond_jours%(0) = 82 calendrier_color_fond_jours%(1) = 162 calendrier_color_fond_jours%(2) = 255 calendrier_color_fond_texte%(0) = 49 calendrier_color_fond_texte%(1) = 109 calendrier_color_fond_texte%(2) = 239 calendrier_color_du_jour%(0) = 255 calendrier_color_du_jour%(1) = 255 calendrier_color_du_jour%(2) = 0 calendrier_color_hors%(0) = 207 calendrier_color_hors%(1) = 207 calendrier_color_hors%(2) = 207
calendrier_mois$(1) = "Janvier" calendrier_mois$(2) = "Février" calendrier_mois$(3) = "Mars" calendrier_mois$(4) = "Avril" calendrier_mois$(5) = "Mai" calendrier_mois$(6) = "Juin" calendrier_mois$(7) = "Juillet" calendrier_mois$(8) = "Août" calendrier_mois$(9) = "Septembre" calendrier_mois$(10) = "Octobre" calendrier_mois$(11) = "Novembre" calendrier_mois$(12) = "Décembre" calendrier_jmois%(1) = 31 calendrier_jmois%(2) = 28 calendrier_jmois%(3) = 31 calendrier_jmois%(4) = 30 calendrier_jmois%(5) = 31 calendrier_jmois%(6) = 30 calendrier_jmois%(7) = 31 calendrier_jmois%(8) = 31 calendrier_jmois%(9) = 30 calendrier_jmois%(10) = 31 calendrier_jmois%(11) = 30 calendrier_jmois%(12) = 31
button calendrier_objet_calendrier%+1 left calendrier_objet_calendrier%+1, 2 top calendrier_objet_calendrier%+1, 2 width calendrier_objet_calendrier%+1, 30 height calendrier_objet_calendrier%+1,20 caption calendrier_objet_calendrier%+1,"<" on_click calendrier_objet_calendrier%+1,calendrier_prec
button calendrier_objet_calendrier%+2 left calendrier_objet_calendrier%+2, 204+2 top calendrier_objet_calendrier%+2, 2 width calendrier_objet_calendrier%+2, 30 height calendrier_objet_calendrier%+2,20 caption calendrier_objet_calendrier%+2, ">" on_click calendrier_objet_calendrier%+2,calendrier_suiv
button calendrier_objet_calendrier%+3 left calendrier_objet_calendrier%+3, 2 top calendrier_objet_calendrier%+3,192+2 width calendrier_objet_calendrier%+3, 66 height calendrier_objet_calendrier%+3,20 caption calendrier_objet_calendrier%+3,"Abandon" on_click calendrier_objet_calendrier%+3,calendrier_abort
button calendrier_objet_calendrier%+4 left calendrier_objet_calendrier%+4, 68+2 top calendrier_objet_calendrier%+4,192+2 width calendrier_objet_calendrier%+4, 100 height calendrier_objet_calendrier%+4,20 caption calendrier_objet_calendrier%+4,"Aujourd'hui" on_click calendrier_objet_calendrier%+4,calendrier_cejour
button calendrier_objet_calendrier%+5 left calendrier_objet_calendrier%+5, 170+2 top calendrier_objet_calendrier%+5,192+2 width calendrier_objet_calendrier%+5, 66 height calendrier_objet_calendrier%+5,20 caption calendrier_objet_calendrier%+5,"OK" on_click calendrier_objet_calendrier%+5,calendrier_OK
calendrier_redessiner:
cls calendrier_resultat$ = ""
calendrier_baseh% = 0 calendrier_basev% = 0 calendrier_basec% = 10
2d_target_is calendrier_objet_calendrier% print_target_is calendrier_objet_calendrier%
' barre de commande 2d_pen_color calendrier_color_cadre%(0), calendrier_color_cadre%(1), calendrier_color_cadre%(2) 2d_fill_color calendrier_color_cadre%(0), calendrier_color_cadre%(1), calendrier_color_cadre%(2) 2d_rectangle calendrier_baseh%, calendrier_basev%, calendrier_baseh% + 238, calendrier_basev% + 24 ' bouton "mois précédent" 2d_fill_color calendrier_color_fond_jours%(0), calendrier_color_fond_jours%(1), calendrier_color_fond_jours%(2) 2d_rectangle calendrier_baseh%+1, calendrier_basev%+1, calendrier_baseh% + 32, calendrier_basev% + 22 ' champs "nom du mois" 2d_rectangle calendrier_baseh%+34+1, calendrier_basev%+1, calendrier_baseh% + 202, calendrier_basev% + 22 ' bouton "mois suivant" 2d_rectangle calendrier_baseh%+204+1, calendrier_basev%+1, calendrier_baseh% + 238, calendrier_basev% + 22
' cases des jours calendrier_basev% = 24 For calendrier_j% = 1 To 7 calendrier_baseh% = 0 For calendrier_i% = 1 To 7 2d_fill_color calendrier_color_fond_jours%(0), calendrier_color_fond_jours%(1), calendrier_color_fond_jours%(2) 2d_rectangle calendrier_baseh%, calendrier_basev%, calendrier_baseh% + 34, calendrier_basev% + 24 If calendrier_j% = 1 2d_fill_color calendrier_color_fond_jours%(0), calendrier_color_fond_jours%(1), calendrier_color_fond_jours%(2) End_If 2d_rectangle calendrier_baseh%+1, calendrier_basev%+1, calendrier_baseh% + 32, calendrier_basev% + 22 calendrier_baseh% = calendrier_baseh% + 34 Next calendrier_i% calendrier_basev% = calendrier_basev% + 24 Next calendrier_j% ' cadre autour des boutons en bas de la form 2d_rectangle 0,192,238,216
' calculer le positionnement des chiffres dans le tableau dateadd_delta% = 1 - val(left$(calendrier_date$,2)) dateadd_date$ = calendrier_date$ gosub dateadd_jj calendrier_debut_mois$= dateadd_date$ jour_de_semaine_date$ = calendrier_debut_mois$ gosub jour_de_semaine calendrier_decalage% = jour_de_semaine_numero% If calendrier_decalage% = 1 calendrier_decalage% = 8 End_If
dateadd_date$ = calendrier_date$ dateadd_delta% = -1 gosub dateadd_mm calendrier_jour1% = 0 calendrier_jour1% = calendrier_jmois%(val(mid$(dateadd_date$,4,2))) calendrier_jours_prec% = calendrier_jmois%(val(mid$(dateadd_date$,4,2))) calendrier_i% = calendrier_decalage% - 1 calendrier_jlig% = Int((val(left$(calendrier_date$,2)) + calendrier_i% + 6) / 7) calendrier_jcol% = val(left$(calendrier_date$,2)) + calendrier_i% - (calendrier_jlig% - 1) * 7
' faire les libellés des boutons de commande font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2) calendrier_basev% = 4 print_locate 10,calendrier_basev% print "<" print_locate 214,calendrier_basev% print ">" 2d_rectangle calendrier_baseh%+34+1, calendrier_basev%+1, calendrier_baseh% + 202, calendrier_basev% + 22 print_locate 80,calendrier_basev% font_color calendrier_objet_calendrier%,calendrier_color_texte%(0), calendrier_color_texte%(1), calendrier_color_texte%(2) print calendrier_mois$(val(mid$(calendrier_date$,4,2))) + " " + right$(calendrier_date$,4) font_color calendrier_objet_calendrier%, calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2) calendrier_basev% = 28
' afficher les libellés des jours de semaine print_locate 10,calendrier_basev% print "Lu" print_locate 44,calendrier_basev% print "Ma" print_locate 78,calendrier_basev% print "Me" print_locate 112,calendrier_basev% print "Je" print_locate 146,calendrier_basev% print "Ve" print_locate 180,calendrier_basev% print "Sa" print_locate 214,calendrier_basev% print "Di"
' calculer le décalage du premier du mois calendrier_delta% = 0 calendrier_jour2% = 1 - calendrier_decalage% If calendrier_decalage% > 1 font_color calendrier_objet_calendrier%,calendrier_color_hors%(0), calendrier_color_hors%(1), calendrier_color_hors%(2) Else font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2) calendrier_jour2% = 1 End_If
' affichier les numéros des jours For calendrier_i% = 1 To 6 For calendrier_j% = 1 To 7 If calendrier_jour2% < 0 font_color calendrier_objet_calendrier%, calendrier_color_hors%(0), calendrier_color_hors%(1), calendrier_color_hors%(2) print_locate 4 + (calendrier_j% - 1) * 34,calendrier_basev% + calendrier_i% * 24 print calendrier_jours_prec% + calendrier_jour2% + 1 calendrier_jour2% = calendrier_jour2% + 1 If calendrier_jour2% = 0 font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2) calendrier_jour2% = calendrier_jour2% + 1 End_If Else If calendrier_jour2% > calendrier_jmois%(val(mid$(calendrier_date$,4,2))) font_color calendrier_objet_calendrier%,calendrier_color_hors%(0), calendrier_color_hors%(1), calendrier_color_hors%(2) calendrier_delta% = calendrier_jmois%(val(mid$(calendrier_date$,4,2))) End_If print_locate 4 + (calendrier_j% - 1) * 34, calendrier_basev% + calendrier_i% * 24 If calendrier_jlig% = calendrier_i% And calendrier_jcol% = calendrier_j% font_color calendrier_objet_calendrier%,calendrier_color_du_jour%(0), calendrier_color_du_jour%(1), calendrier_color_du_jour%(2) End_If Print str$(calendrier_jour2% - calendrier_delta%) If calendrier_jlig% = calendrier_i% And calendrier_jcol% = calendrier_j% font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2) End_If calendrier_jour2% = calendrier_jour2% + 1 End_If Next calendrier_j% Next calendrier_i%
return
rem **************************************************************** rem * * rem * fin #INCLUDE calendrier_procedure.inc * rem * * rem ****************************************************************
| |
| | | ambroise
Nombre de messages : 264 Localisation : Haute-Savoie Date d'inscription : 29/04/2012
| Sujet: Re: Utilitaire de saisie d'une date Lun 28 Mai 2012 - 10:42 | |
| - Klaus a écrit:
- Eh oui, je connais ça...
Ca me rassure... Question : dans mon formulaire, j'ai trois edit date (date du contrat / date de naissance du contractant 1 / date de naissance du contractant 2 ). Est-il possible de contrôler ces entrées par le même sous-programme (verif_date: ) ou me faut-il répéter 3 sous-programmes identiques à la différence près du numéro de l'edit référencé dans ces sous-programmes ? Le numéro de l'edit mis en argument au lancement du sous-programme me faciliterait bien les choses... | |
| | | 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 Lun 28 Mai 2012 - 11:40 | |
| @Ambroise, je n'ai pas ton code, mais à priori une routine est faite pour être utilisée chaque fois qu'on en a besoin. Si tu prends l'exemple de Klaus, avec la routine dans un FORM, il te suffit d'avoir 3 boutons pour tes 3 saisies, (date du contrat / date de naissance du contractant 1 / date de naissance du contractant 2 ). Tu peux aussi remplacer les boutons par des alphas que tu utilises une première fois pour lancer la routine, tu récupères tes variables et tu te sert de l'alpha pour l'affiche du résultat. @Klaus, le calendrier popup, c'est pas mal non plus. Mais attention car celui que tu as mis en ligne n'a pas de29/02/2012 | |
| | | 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 Lun 28 Mai 2012 - 11:56 | |
| Exactt ! Je vais regarder cela. | |
| | | 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 Lun 28 Mai 2012 - 12:25 | |
| Voici la correction du calendrier pop-up: - Code:
-
rem ********************************************************************** rem * * rem * calendrier_bas - programme de test pour un calendrier popup * rem * * rem * ce programme inclut en un seul morceau tous les modules * rem * qui peuvent être inclus par la directive #INCLUDE * rem * * rem **********************************************************************
rem #include "calendrier_labels.inc" rem ********************************************************************** rem * * rem * #INCLUDE "calendrier_labels.inc" * rem * * rem **********************************************************************
label show_calendrier, show_resultat label calendrier_dessiner, calendrier_redessiner label calendrier_prec, calendrier_suiv, calendrier_seldate label calendrier_abort, calendrier_cejour, calendrier_OK
rem ********************************************************************** rem * * rem * fin #INCLUDE "calendrier_labels.inc" * rem * * rem **********************************************************************
rem #include "dateadd_labels_labels.inc" rem ********************************************************************** rem * * rem * #INCLUDE "dateadd_labels.inc" * rem * * rem **********************************************************************
label dateadd_jj, dateadd_mm, dateadd_aaaa label dateadd_eclate, dateadd_fusionne, dateadd_fin_de_mois label dateadd_fevrier
rem ********************************************************************** rem * * rem * fin #INCLUDE "dateadd_labels.inc" * rem * * rem **********************************************************************
rem #include "jour_de_semaine_labels.inc" rem ********************************************************************** rem * * rem * #INCLUDE "jour_de_semaine_labels.inc" * rem * * rem **********************************************************************
label jour_de_semaine
rem ********************************************************************** rem * * rem * fin #INCLUDE "jour_de_semaine_labels.inc" * rem * * rem **********************************************************************
rem #include "calendrier_declarations.inc" rem ********************************************************************** rem * * rem * #INCLUDE "calendrier_declarations.inc" * rem * * rem **********************************************************************
dim calendrier_visible%, calendrier_resultat$ dim calendrier_cible%, calendrier_objet_calendrier% dim calendrier_objet_form% dim calendrier_decalage%, calendrier_modifie% dim calendrier_date$
rem ********************************************************************** rem * * rem * fin #INCLUDE "calendrier_declarations.inc" * rem * * rem **********************************************************************
rem #include "jour_de_semaine_declarations.inc" rem ********************************************************************** rem * * rem * #INCLUDE "jour_de_la_demaine_declarations.inc" * rem * * rem * Calcul du jour de la semaine * rem * * rem * Cette routine calcule le jour de la semaine à partir d'une * rem * date en format jj/mm/aaaa. * rem * * rem * Appel: * rem * gosub jour_de_semaine * rem * * rem * Paramètre en entrée: * rem * jour_de_semaine_date$ * rem * * rem * Paramètres en sortie: * rem * jour_de_semaine_numero% * rem * jour_de_semaine_text$ * rem * * rem * Installation: * rem * Copier les déclarations au début du programme, et le code * rem * à la fin du programme dans lequel on veut l'utiliser * rem * * rem * Utilisation: * rem * jour_de_semaine_date$ = "16/05/2010" * rem * gosub jour_de_semaine * rem * message str$(jour_de_semaine_numero%) + " = " + jour_de_semaine_text$ rem * * rem **********************************************************************
dim jour_de_semaine_date$, jour_de_semaine_numero%, jour_de_semaine_text$ dim jour_de_semaine_j%, jour_de_semaine_m%, jour_de_semaine_a% dim jour_de_semaine_m1%, jour_de_semaine_a1%, jour_de_semaine_ns% dim jour_de_semaine_as%, jour_de_semaine_f%
rem ********************************************************************** rem * * rem * fin #INCLUDE jour_de_semaine_declarations.inc * rem * * rem **********************************************************************
rem #include "dateadd_declarations.inc" rem **************************************************************** rem * * rem * #INCLUDE "dateadd_declarations.inc" * rem * * rem * dateadd - simulation de la fonction dateadd de VB * rem * * rem * Cette routine a 3 points d'entrée: * rem * dateadd_jj additionner des jours à une date * rem * dateadd_mm additionner des mois à une date * rem * dateadd_aaaa additionner des années à une date * rem * * rem * En entrée, 2 variables sont à charger: * rem * dateadd_date$ la date à modifier (en "jj/mm/aaa") * rem * dateadd_delta% la fraction à ajouter ou à retirer * rem * data_add_delta%<0: retirer * rem * data_add_delta%>0: ajouter * rem * * rem * En sortie, 1 variable est à consulter: * rem * dateadd_date$ la date résultante * rem * * rem * Installation: * rem * copier simplement ce module dans le source, en * rem * plaçant les déclarations au début et la * rem * partie code à la fin du source * rem * * rem ****************************************************************
dim dateadd_date$, dateadd_delta% dim dateadd_jj%, dateadd_mm%, dateadd_aaaa%, dateadd_jours%(12)
rem **************************************************************** rem * * rem * fin #INCLUDE dateadd_declarations.inc * rem * * rem ****************************************************************
rem **************************************************************** rem * * rem * Programme de test calendrier.bas principal * rem * * rem ****************************************************************
calendrier_visible% = 0 button 10 caption 10,"Calendrier" top 10,250 left 10,100 on_click 10,show_calendrier button 11 caption 11,"Résultat ?" top 11,300 left 11,100 on_click 11,show_resultat end
show_calendrier: if calendrier_visible%=0 calendrier_date$ = date$ calendrier_visible% = 1 gosub calendrier_dessiner show calendrier_objet_form% active calendrier_objet_form% inactive 0 else show calendrier_objet_form% active calendrier_objet_form% if calendrier_visible%=2 then calendrier_visible% = 1 inactive 0 end_if return
show_resultat: if calendrier_resultat$="" message "Aucune date n'a été choisie !" else message "La date choisie est le " + calendrier_resultat$ end_if return
rem #include "dateadd_procedure.inc" rem **************************************************************** rem * * rem * #INCLUDE dateadd_procedure.inc * rem * * rem * dateadd - simulation de la fonction dateadd de VB * rem * * rem * Cette routine a 3 points d'entrée: * rem * dateadd_jj additionner des jours à une date * rem * dateadd_mm additionner des mois à une date * rem * dateadd_aaaa additionner des années à une date * rem * * rem * En entrée, 2 variables sont à charger: * rem * dateadd_date$ la date à modifier (en "jj/mm/aaa") * rem * dateadd_delta% la fraction à ajouter ou à retirer * rem * data_add_delta%<0: retirer * rem * data_add_delta%>0: ajouter * rem * * rem * En sortie, 1 variable est à consulter: * rem * dateadd_date$ la date résultante * rem * * rem * Installation: * rem * copier simplement ce module dans le source, en * rem * plaçant les déclarations au début et la * rem * partie code à la fin du source * rem * * rem ****************************************************************
dateadd_eclate: dateadd_jj% = val(left$(dateadd_date$,2)) dateadd_mm% = val(mid$(dateadd_date$,4,2)) dateadd_aaaa% = val(right$(dateadd_date$,4)) return
dateadd_fusionne: dateadd_date$ = str$(dateadd_mm%) + "/" + str$(dateadd_aaaa%) if dateadd_mm%<10 then dateadd_date$ = "0" + dateadd_date$ dateadd_date$ = str$(dateadd_jj%) + "/" + dateadd_date$ if dateadd_jj%<10 then dateadd_date$ = "0" + dateadd_date$ return
dateadd_fin_de_mois: dateadd_jours%(1)=31 dateadd_jours%(2)=28 dateadd_jours%(3)=31 dateadd_jours%(4)=30 dateadd_jours%(5)=31 dateadd_jours%(6)=30 dateadd_jours%(7)=31 dateadd_jours%(8)=31 dateadd_jours%(9)=30 dateadd_jours%(10)=31 dateadd_jours%(11)=30 dateadd_jours%(12)=31 if dateadd_mm%=2 dateadd_jours%(2) = 28 if dateadd_aaaa%-int(dateadd_aaaa%/4)*4=0 if dateadd_aaaa%-int(dateadd_aaaa%/400)*400>0 dateadd_jours%(2) = 29 end_if end_if end_if return
dateadd_fevrier: if dateadd_mm%=2 if dateadd_aaaa%=int(dateadd_aaaa%/4)*4 then dateadd_jours%(2) = 29 end_if return
dateadd_aaaa: gosub dateadd_eclate dateadd_aaaa% = dateadd_aaaa% + dateadd_delta% gosub dateadd_fusionne return
dateadd_mm: gosub dateadd_eclate gosub dateadd_fin_de_mois dateadd_mm% = dateadd_mm% + dateadd_delta% if dateadd_mm%<1 while dateadd_mm%<1 dateadd_aaaa% = dateadd_aaaa% - 1 dateadd_mm% = dateadd_mm% + 12 end_while else while dateadd_mm%>12 dateadd_aaaa% = dateadd_aaaa% + 1 dateadd_mm% = dateadd_mm% - 12 end_while end_if if dateadd_jj%>dateadd_jours%(dateadd_mm%) then dateadd_jj% = dateadd_jours%(dateadd_mm%) gosub dateadd_fusionne return
dateadd_jj: gosub dateadd_eclate gosub dateadd_fin_de_mois dateadd_jj% = dateadd_jj% + dateadd_delta% if dateadd_jj%<1 while dateadd_jj%<1 dateadd_mm% = dateadd_mm% - 1 if dateadd_mm%<1 dateadd_mm% = 12 dateadd_aaaa% = dateadd_aaaa% - 1 end_if gosub dateadd_fevrier dateadd_jj% = dateadd_jj% + dateadd_jours%(dateadd_mm%) end_while else while dateadd_jj%>dateadd_jours%(dateadd_mm%) gosub dateadd_fevrier dateadd_jj% = dateadd_jj% - dateadd_jours%(dateadd_mm%) dateadd_mm% = dateadd_mm% + 1 if dateadd_mm%>12 dateadd_mm% = 1 dateadd_aaaa% = dateadd_aaaa% + 1 end_if end_while end_if gosub dateadd_fusionne return
rem #include "jour_de_semaine_procedure.inc" rem ********************************************************************** rem * * rem * #INCLUDE jour_de_semaine_procedure.inc * rem * * rem * Début de la partie "code" à copier à la fin du source * rem * * rem **********************************************************************
jour_de_semaine: jour_de_semaine_j% = val(left$(jour_de_semaine_date$,2)) jour_de_semaine_m% = val(mid$(jour_de_semaine_date$,4,2)) jour_de_semaine_a% = val(right$(jour_de_semaine_date$,4))
if jour_de_semaine_m%<3 jour_de_semaine_m1% = jour_de_semaine_m% + 10 jour_de_semaine_a1% = jour_de_semaine_a% - 1 else jour_de_semaine_m1% = jour_de_semaine_m% - 2 jour_de_semaine_a1% = jour_de_semaine_a% end_if
jour_de_semaine_ns% = int(jour_de_semaine_a1%/100)
jour_de_semaine_as% = jour_de_semaine_a1% - jour_de_semaine_ns%*100
jour_de_semaine_f% = jour_de_semaine_j% + jour_de_semaine_as% + int(jour_de_semaine_as%/4) - 2* jour_de_semaine_ns% + int(jour_de_semaine_ns%/4) + int((26*jour_de_semaine_m1%-2)/10)
jour_de_semaine_numero% = jour_de_semaine_f% - int(jour_de_semaine_f%/7)*7
select jour_de_semaine_numero% case 0: jour_de_semaine_text$ = "Dimanche" case 1: jour_de_semaine_text$ = "Lundi" case 2: jour_de_semaine_text$ = "Mardi" case 3: jour_de_semaine_text$ = "Mercredi" case 4: jour_de_semaine_text$ = "Jeudi" case 5: jour_de_semaine_text$ = "Vendredi" case 6: jour_de_semaine_text$ = "Samedi" end_select
return rem **************************************************************** rem * * rem * fin #INCLUDE jour_de_semaine_procedure.inc * rem * * rem ****************************************************************
rem #include "calendrier_procedure.inc" rem ********************************************************************** rem * * rem * #INCLUDE calendrier_procedure.inc * rem * * rem * Début de la partie "code" à copier à la fin du source * rem * * rem **********************************************************************
rem ************************************************************************ rem * * rem * routines on_click du calendrier * rem * * rem ************************************************************************
calendrier_prec: dateadd_date$ = calendrier_date$ dateadd_delta% = -1 gosub dateadd_mm calendrier_date$ = dateadd_date$ goto calendrier_redessiner
calendrier_suiv: dateadd_date$ = calendrier_date$ dateadd_delta% = 1 gosub dateadd_mm calendrier_date$ = dateadd_date$ goto calendrier_redessiner
calendrier_abort: hide calendrier_objet_form% calendrier_visible%=2 inactive calendrier_objet_form% calendrier_resultat$ = "" active 0 to_foreground 0 return
calendrier_cejour: calendrier_date$ = date$ goto calendrier_redessiner
calendrier_OK: hide calendrier_objet_form% calendrier_visible%=2 inactive calendrier_objet_form% calendrier_resultat$ = calendrier_date$ active 0 to_foreground 0 return
calendrier_seldate: calendrier_j% = mouse_x_left_down(calendrier_objet_calendrier%) calendrier_i% = mouse_y_left_down(calendrier_objet_calendrier%) calendrier_j% = int((calendrier_j% + 33)/34) calendrier_i% = int((calendrier_i% + 23)/24) - 2 if calendrier_i%<1 then return dateadd_delta% = ((calendrier_i%-1)*7 + calendrier_j%) - ((calendrier_jlig%-1)*7 + calendrier_jcol%) dateadd_date$ = calendrier_date$ gosub dateadd_jj calendrier_date$ = dateadd_date$ goto calendrier_redessiner
rem ************************************************************************ rem * * rem * routines de service du calendrier * rem * * rem ************************************************************************
calendrier_dessiner:
calendrier_objet_form% = 1000 calendrier_objet_calendrier% = 1001 form calendrier_objet_form% command_target_is calendrier_objet_form% border_hide calendrier_objet_form% hide calendrier_objet_form% border_hide calendrier_objet_form% top calendrier_objet_form%,200 left calendrier_objet_form%,200 width calendrier_objet_form%, 248 height calendrier_objet_form%, 243 picture calendrier_objet_calendrier% width calendrier_objet_calendrier%, 238 height calendrier_objet_calendrier%, 216 caption calendrier_objet_form% , "Calendrier" on_click calendrier_objet_calendrier%, calendrier_seldate
dim calendrier_i%, calendrier_j%, calendrier_k%, dim calendrier_baseh%, calendrier_basev%, calendrier_basec% dim calendrier_debut_mois$ dim calendrier_jour2% dim calendrier_jour1%, calendrier_jours_prec%, calendrier_delta%, calendrier_jlig%, calendrier_jcol% dim calendrier_color_cadre%(2), calendrier_color_texte%(2), calendrier_color_fond_text%(2) dim calendrier_color_fond_jours%(2), calendrier_color_du_jour%(2) dim calendrier_color_jours%(2), calendrier_color_fond_texte%(2), calendrier_color_hors%(2) dim calendrier_mois$(12), calendrier_jmois%(12)
calendrier_color_cadre%(0) = 24 calendrier_color_cadre%(1) = 95 calendrier_color_cadre%(2) = 214 calendrier_color_texte%(0) = 255 calendrier_color_texte%(1) = 255 calendrier_color_texte%(2) = 255 calendrier_color_jours%(0) = 0 calendrier_color_jours%(1) = 0 calendrier_color_jours%(2) = 0 calendrier_color_fond_jours%(0) = 82 calendrier_color_fond_jours%(1) = 162 calendrier_color_fond_jours%(2) = 255 calendrier_color_fond_texte%(0) = 49 calendrier_color_fond_texte%(1) = 109 calendrier_color_fond_texte%(2) = 239 calendrier_color_du_jour%(0) = 255 calendrier_color_du_jour%(1) = 255 calendrier_color_du_jour%(2) = 0 calendrier_color_hors%(0) = 207 calendrier_color_hors%(1) = 207 calendrier_color_hors%(2) = 207
calendrier_mois$(1) = "Janvier" calendrier_mois$(2) = "Février" calendrier_mois$(3) = "Mars" calendrier_mois$(4) = "Avril" calendrier_mois$(5) = "Mai" calendrier_mois$(6) = "Juin" calendrier_mois$(7) = "Juillet" calendrier_mois$(8) = "Août" calendrier_mois$(9) = "Septembre" calendrier_mois$(10) = "Octobre" calendrier_mois$(11) = "Novembre" calendrier_mois$(12) = "Décembre" calendrier_jmois%(1) = 31 calendrier_jmois%(2) = 28 calendrier_jmois%(3) = 31 calendrier_jmois%(4) = 30 calendrier_jmois%(5) = 31 calendrier_jmois%(6) = 30 calendrier_jmois%(7) = 31 calendrier_jmois%(8) = 31 calendrier_jmois%(9) = 30 calendrier_jmois%(10) = 31 calendrier_jmois%(11) = 30 calendrier_jmois%(12) = 31
if val(mid$(calendrier_date$,4,2))=2 calendrier_jmois%(2) = 28 if val(mid$(calendrier_date$,7,4))-int(val(mid$(calendrier_date$,7,4))/4)*4=0 if val(mid$(calendrier_date$,7,4))-int(val(mid$(calendrier_date$,7,4))/400)*400>0 calendrier_jmois%(2) = 29 end_if end_if end_if
button calendrier_objet_calendrier%+1 left calendrier_objet_calendrier%+1, 2 top calendrier_objet_calendrier%+1, 2 width calendrier_objet_calendrier%+1, 30 height calendrier_objet_calendrier%+1,20 caption calendrier_objet_calendrier%+1,"<" on_click calendrier_objet_calendrier%+1,calendrier_prec
button calendrier_objet_calendrier%+2 left calendrier_objet_calendrier%+2, 204+2 top calendrier_objet_calendrier%+2, 2 width calendrier_objet_calendrier%+2, 30 height calendrier_objet_calendrier%+2,20 caption calendrier_objet_calendrier%+2, ">" on_click calendrier_objet_calendrier%+2,calendrier_suiv
button calendrier_objet_calendrier%+3 left calendrier_objet_calendrier%+3, 2 top calendrier_objet_calendrier%+3,192+2 width calendrier_objet_calendrier%+3, 66 height calendrier_objet_calendrier%+3,20 caption calendrier_objet_calendrier%+3,"Abandon" on_click calendrier_objet_calendrier%+3,calendrier_abort
button calendrier_objet_calendrier%+4 left calendrier_objet_calendrier%+4, 68+2 top calendrier_objet_calendrier%+4,192+2 width calendrier_objet_calendrier%+4, 100 height calendrier_objet_calendrier%+4,20 caption calendrier_objet_calendrier%+4,"Aujourd'hui" on_click calendrier_objet_calendrier%+4,calendrier_cejour
button calendrier_objet_calendrier%+5 left calendrier_objet_calendrier%+5, 170+2 top calendrier_objet_calendrier%+5,192+2 width calendrier_objet_calendrier%+5, 66 height calendrier_objet_calendrier%+5,20 caption calendrier_objet_calendrier%+5,"OK" on_click calendrier_objet_calendrier%+5,calendrier_OK
calendrier_redessiner:
cls calendrier_resultat$ = ""
calendrier_baseh% = 0 calendrier_basev% = 0 calendrier_basec% = 10
2d_target_is calendrier_objet_calendrier% print_target_is calendrier_objet_calendrier%
' barre de commande 2d_pen_color calendrier_color_cadre%(0), calendrier_color_cadre%(1), calendrier_color_cadre%(2) 2d_fill_color calendrier_color_cadre%(0), calendrier_color_cadre%(1), calendrier_color_cadre%(2) 2d_rectangle calendrier_baseh%, calendrier_basev%, calendrier_baseh% + 238, calendrier_basev% + 24 ' bouton "mois précédent" 2d_fill_color calendrier_color_fond_jours%(0), calendrier_color_fond_jours%(1), calendrier_color_fond_jours%(2) 2d_rectangle calendrier_baseh%+1, calendrier_basev%+1, calendrier_baseh% + 32, calendrier_basev% + 22 ' champs "nom du mois" 2d_rectangle calendrier_baseh%+34+1, calendrier_basev%+1, calendrier_baseh% + 202, calendrier_basev% + 22 ' bouton "mois suivant" 2d_rectangle calendrier_baseh%+204+1, calendrier_basev%+1, calendrier_baseh% + 238, calendrier_basev% + 22
' cases des jours calendrier_basev% = 24 For calendrier_j% = 1 To 7 calendrier_baseh% = 0 For calendrier_i% = 1 To 7 2d_fill_color calendrier_color_fond_jours%(0), calendrier_color_fond_jours%(1), calendrier_color_fond_jours%(2) 2d_rectangle calendrier_baseh%, calendrier_basev%, calendrier_baseh% + 34, calendrier_basev% + 24 If calendrier_j% = 1 2d_fill_color calendrier_color_fond_jours%(0), calendrier_color_fond_jours%(1), calendrier_color_fond_jours%(2) End_If 2d_rectangle calendrier_baseh%+1, calendrier_basev%+1, calendrier_baseh% + 32, calendrier_basev% + 22 calendrier_baseh% = calendrier_baseh% + 34 Next calendrier_i% calendrier_basev% = calendrier_basev% + 24 Next calendrier_j% ' cadre autour des boutons en bas de la form 2d_rectangle 0,192,238,216
' calculer le positionnement des chiffres dans le tableau dateadd_delta% = 1 - val(left$(calendrier_date$,2)) dateadd_date$ = calendrier_date$ gosub dateadd_jj calendrier_debut_mois$= dateadd_date$ jour_de_semaine_date$ = calendrier_debut_mois$ gosub jour_de_semaine calendrier_decalage% = jour_de_semaine_numero% If calendrier_decalage% = 1 calendrier_decalage% = 8 End_If
dateadd_date$ = calendrier_date$ dateadd_delta% = -1 gosub dateadd_mm calendrier_jour1% = 0 calendrier_jour1% = calendrier_jmois%(val(mid$(dateadd_date$,4,2))) calendrier_jours_prec% = calendrier_jmois%(val(mid$(dateadd_date$,4,2))) calendrier_i% = calendrier_decalage% - 1 calendrier_jlig% = Int((val(left$(calendrier_date$,2)) + calendrier_i% + 6) / 7) calendrier_jcol% = val(left$(calendrier_date$,2)) + calendrier_i% - (calendrier_jlig% - 1) * 7
' faire les libellés des boutons de commande font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2) calendrier_basev% = 4 print_locate 10,calendrier_basev% print "<" print_locate 214,calendrier_basev% print ">" 2d_rectangle calendrier_baseh%+34+1, calendrier_basev%+1, calendrier_baseh% + 202, calendrier_basev% + 22 print_locate 80,calendrier_basev% font_color calendrier_objet_calendrier%,calendrier_color_texte%(0), calendrier_color_texte%(1), calendrier_color_texte%(2) print calendrier_mois$(val(mid$(calendrier_date$,4,2))) + " " + right$(calendrier_date$,4) font_color calendrier_objet_calendrier%, calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2) calendrier_basev% = 28 if val(mid$(calendrier_date$,4,2))=2 calendrier_jmois%(2) = 28 if val(mid$(calendrier_date$,7,4))-int(val(mid$(calendrier_date$,7,4))/4)*4=0 if val(mid$(calendrier_date$,7,4))-int(val(mid$(calendrier_date$,7,4))/400)*400>0 calendrier_jmois%(2) = 29 end_if end_if end_if
' afficher les libellés des jours de semaine print_locate 10,calendrier_basev% print "Lu" print_locate 44,calendrier_basev% print "Ma" print_locate 78,calendrier_basev% print "Me" print_locate 112,calendrier_basev% print "Je" print_locate 146,calendrier_basev% print "Ve" print_locate 180,calendrier_basev% print "Sa" print_locate 214,calendrier_basev% print "Di"
' calculer le décalage du premier du mois calendrier_delta% = 0 calendrier_jour2% = 1 - calendrier_decalage% If calendrier_decalage% > 1 font_color calendrier_objet_calendrier%,calendrier_color_hors%(0), calendrier_color_hors%(1), calendrier_color_hors%(2) Else font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2) calendrier_jour2% = 1 End_If
' affichier les numéros des jours For calendrier_i% = 1 To 6 For calendrier_j% = 1 To 7 If calendrier_jour2% < 0 font_color calendrier_objet_calendrier%, calendrier_color_hors%(0), calendrier_color_hors%(1), calendrier_color_hors%(2) print_locate 4 + (calendrier_j% - 1) * 34,calendrier_basev% + calendrier_i% * 24 print calendrier_jours_prec% + calendrier_jour2% + 1 calendrier_jour2% = calendrier_jour2% + 1 If calendrier_jour2% = 0 font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2) calendrier_jour2% = calendrier_jour2% + 1 End_If Else If calendrier_jour2% > calendrier_jmois%(val(mid$(calendrier_date$,4,2))) font_color calendrier_objet_calendrier%,calendrier_color_hors%(0), calendrier_color_hors%(1), calendrier_color_hors%(2) calendrier_delta% = calendrier_jmois%(val(mid$(calendrier_date$,4,2))) End_If print_locate 4 + (calendrier_j% - 1) * 34, calendrier_basev% + calendrier_i% * 24 If calendrier_jlig% = calendrier_i% And calendrier_jcol% = calendrier_j% font_color calendrier_objet_calendrier%,calendrier_color_du_jour%(0), calendrier_color_du_jour%(1), calendrier_color_du_jour%(2) End_If Print str$(calendrier_jour2% - calendrier_delta%) If calendrier_jlig% = calendrier_i% And calendrier_jcol% = calendrier_j% font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2) End_If calendrier_jour2% = calendrier_jour2% + 1 End_If Next calendrier_j% Next calendrier_i%
return
rem **************************************************************** rem * * rem * fin #INCLUDE calendrier_procedure.inc * rem * * rem ****************************************************************
| |
| | | ambroise
Nombre de messages : 264 Localisation : Haute-Savoie Date d'inscription : 29/04/2012
| Sujet: Re: Utilitaire de saisie d'une date Lun 28 Mai 2012 - 13:56 | |
| Voici ma solution pour pallier à l'absence d'argument dans l'envoi du sous-programme : - Code:
-
edit1% = 1 edit edit1% on_change edit1%, choisir_edit1
edit2% = 2 edit edit2% on_change edit2%, choisir_edit2
edit3% = 3 edit edit3% on_change edit3%, choisir_edit3
...etc...
end
choisir_edit1: edit% = edit1% gosub verif return
choisir_edit2: edit% = edit2% gosub verif return
choisir_edit3: edit% = edit3% gosub verif return
verif: ... ... if val(right$(text$(edit%),1))>3 text edit%,"" ... etc ... return
| |
| | | 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 Lun 28 Mai 2012 - 14:06 | |
| Tu peux faire la même chose comme ceci: - Code:
-
edit1% = 1 edit edit1% on_change edit1%, verif
edit2% = 2 edit edit2% on_change edit2%, verif
edit3% = 3 edit edit3% on_change edit3%, verif
...etc...
end
verif: edit% = number_change ... ... if val(right$(text$(edit%),1))>3 text edit%,"" ... etc ... return
| |
| | | ambroise
Nombre de messages : 264 Localisation : Haute-Savoie Date d'inscription : 29/04/2012
| Sujet: Re: Utilitaire de saisie d'une date Lun 28 Mai 2012 - 16:43 | |
| C'est ce qui s'appelle réinventer la roue !... Voilà ce que c'est de ne pas connaître toutes les fonctions de Panoramic ! Heureusement que ce forum compte bien des gens compétents. Merci ! | |
| | | 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 29 Mai 2012 - 9:38 | |
| Petite amélioration du calendrier pop-up: j'ai rajouté des boutons "année précédente" et "année suivante": - Code:
-
rem ********************************************************************** rem * * rem * calendrier_bas - programme de test pour un calendrier popup * rem * * rem * ce programme inclut en un seul morceau tous les modules * rem * qui peuvent être inclus par la directive #INCLUDE * rem * * rem **********************************************************************
rem #include "calendrier_labels.inc" rem ********************************************************************** rem * * rem * #INCLUDE "calendrier_labels.inc" * rem * * rem **********************************************************************
label show_calendrier, show_resultat label calendrier_dessiner, calendrier_redessiner label calendrier_prec, calendrier_suiv, calendrier_seldate label calendrier_abort, calendrier_cejour, calendrier_OK label calendrier_prec_ann, calendrier_suiv_ann
rem ********************************************************************** rem * * rem * fin #INCLUDE "calendrier_labels.inc" * rem * * rem **********************************************************************
rem #include "dateadd_labels_labels.inc" rem ********************************************************************** rem * * rem * #INCLUDE "dateadd_labels.inc" * rem * * rem **********************************************************************
label dateadd_jj, dateadd_mm, dateadd_aaaa label dateadd_eclate, dateadd_fusionne, dateadd_fin_de_mois label dateadd_fevrier
rem ********************************************************************** rem * * rem * fin #INCLUDE "dateadd_labels.inc" * rem * * rem **********************************************************************
rem #include "jour_de_semaine_labels.inc" rem ********************************************************************** rem * * rem * #INCLUDE "jour_de_semaine_labels.inc" * rem * * rem **********************************************************************
label jour_de_semaine
rem ********************************************************************** rem * * rem * fin #INCLUDE "jour_de_semaine_labels.inc" * rem * * rem **********************************************************************
rem #include "calendrier_declarations.inc" rem ********************************************************************** rem * * rem * #INCLUDE "calendrier_declarations.inc" * rem * * rem **********************************************************************
dim calendrier_visible%, calendrier_resultat$ dim calendrier_cible%, calendrier_objet_calendrier% dim calendrier_objet_form% dim calendrier_decalage%, calendrier_modifie% dim calendrier_date$
rem ********************************************************************** rem * * rem * fin #INCLUDE "calendrier_declarations.inc" * rem * * rem **********************************************************************
rem #include "jour_de_semaine_declarations.inc" rem ********************************************************************** rem * * rem * #INCLUDE "jour_de_la_demaine_declarations.inc" * rem * * rem * Calcul du jour de la semaine * rem * * rem * Cette routine calcule le jour de la semaine à partir d'une * rem * date en format jj/mm/aaaa. * rem * * rem * Appel: * rem * gosub jour_de_semaine * rem * * rem * Paramètre en entrée: * rem * jour_de_semaine_date$ * rem * * rem * Paramètres en sortie: * rem * jour_de_semaine_numero% * rem * jour_de_semaine_text$ * rem * * rem * Installation: * rem * Copier les déclarations au début du programme, et le code * rem * à la fin du programme dans lequel on veut l'utiliser * rem * * rem * Utilisation: * rem * jour_de_semaine_date$ = "16/05/2010" * rem * gosub jour_de_semaine * rem * message str$(jour_de_semaine_numero%) + " = " + jour_de_semaine_text$ rem * * rem **********************************************************************
dim jour_de_semaine_date$, jour_de_semaine_numero%, jour_de_semaine_text$ dim jour_de_semaine_j%, jour_de_semaine_m%, jour_de_semaine_a% dim jour_de_semaine_m1%, jour_de_semaine_a1%, jour_de_semaine_ns% dim jour_de_semaine_as%, jour_de_semaine_f%
rem ********************************************************************** rem * * rem * fin #INCLUDE jour_de_semaine_declarations.inc * rem * * rem **********************************************************************
rem #include "dateadd_declarations.inc" rem **************************************************************** rem * * rem * #INCLUDE "dateadd_declarations.inc" * rem * * rem * dateadd - simulation de la fonction dateadd de VB * rem * * rem * Cette routine a 3 points d'entrée: * rem * dateadd_jj additionner des jours à une date * rem * dateadd_mm additionner des mois à une date * rem * dateadd_aaaa additionner des années à une date * rem * * rem * En entrée, 2 variables sont à charger: * rem * dateadd_date$ la date à modifier (en "jj/mm/aaa") * rem * dateadd_delta% la fraction à ajouter ou à retirer * rem * data_add_delta%<0: retirer * rem * data_add_delta%>0: ajouter * rem * * rem * En sortie, 1 variable est à consulter: * rem * dateadd_date$ la date résultante * rem * * rem * Installation: * rem * copier simplement ce module dans le source, en * rem * plaçant les déclarations au début et la * rem * partie code à la fin du source * rem * * rem ****************************************************************
dim dateadd_date$, dateadd_delta% dim dateadd_jj%, dateadd_mm%, dateadd_aaaa%, dateadd_jours%(12)
rem **************************************************************** rem * * rem * fin #INCLUDE dateadd_declarations.inc * rem * * rem ****************************************************************
rem **************************************************************** rem * * rem * Programme de test calendrier.bas principal * rem * * rem ****************************************************************
calendrier_visible% = 0 button 10 caption 10,"Calendrier" top 10,250 left 10,100 on_click 10,show_calendrier button 11 caption 11,"Résultat ?" top 11,300 left 11,100 on_click 11,show_resultat end
show_calendrier: if calendrier_visible%=0 calendrier_date$ = date$ calendrier_visible% = 1 gosub calendrier_dessiner show calendrier_objet_form% active calendrier_objet_form% inactive 0 else show calendrier_objet_form% active calendrier_objet_form% if calendrier_visible%=2 then calendrier_visible% = 1 inactive 0 end_if return
show_resultat: if calendrier_resultat$="" message "Aucune date n'a été choisie !" else message "La date choisie est le " + calendrier_resultat$ end_if return
rem #include "dateadd_procedure.inc" rem **************************************************************** rem * * rem * #INCLUDE dateadd_procedure.inc * rem * * rem * dateadd - simulation de la fonction dateadd de VB * rem * * rem * Cette routine a 3 points d'entrée: * rem * dateadd_jj additionner des jours à une date * rem * dateadd_mm additionner des mois à une date * rem * dateadd_aaaa additionner des années à une date * rem * * rem * En entrée, 2 variables sont à charger: * rem * dateadd_date$ la date à modifier (en "jj/mm/aaa") * rem * dateadd_delta% la fraction à ajouter ou à retirer * rem * data_add_delta%<0: retirer * rem * data_add_delta%>0: ajouter * rem * * rem * En sortie, 1 variable est à consulter: * rem * dateadd_date$ la date résultante * rem * * rem * Installation: * rem * copier simplement ce module dans le source, en * rem * plaçant les déclarations au début et la * rem * partie code à la fin du source * rem * * rem ****************************************************************
dateadd_eclate: dateadd_jj% = val(left$(dateadd_date$,2)) dateadd_mm% = val(mid$(dateadd_date$,4,2)) dateadd_aaaa% = val(right$(dateadd_date$,4)) return
dateadd_fusionne: dateadd_date$ = str$(dateadd_mm%) + "/" + str$(dateadd_aaaa%) if dateadd_mm%<10 then dateadd_date$ = "0" + dateadd_date$ dateadd_date$ = str$(dateadd_jj%) + "/" + dateadd_date$ if dateadd_jj%<10 then dateadd_date$ = "0" + dateadd_date$ return
dateadd_fin_de_mois: dateadd_jours%(1)=31 dateadd_jours%(2)=28 dateadd_jours%(3)=31 dateadd_jours%(4)=30 dateadd_jours%(5)=31 dateadd_jours%(6)=30 dateadd_jours%(7)=31 dateadd_jours%(8)=31 dateadd_jours%(9)=30 dateadd_jours%(10)=31 dateadd_jours%(11)=30 dateadd_jours%(12)=31 if dateadd_mm%=2 dateadd_jours%(2) = 28 if dateadd_aaaa%-int(dateadd_aaaa%/4)*4=0 if dateadd_aaaa%-int(dateadd_aaaa%/400)*400>0 dateadd_jours%(2) = 29 end_if end_if end_if return
dateadd_fevrier: if dateadd_mm%=2 if dateadd_aaaa%=int(dateadd_aaaa%/4)*4 then dateadd_jours%(2) = 29 end_if return
dateadd_aaaa: gosub dateadd_eclate dateadd_aaaa% = dateadd_aaaa% + dateadd_delta% gosub dateadd_fusionne return
dateadd_mm: gosub dateadd_eclate gosub dateadd_fin_de_mois dateadd_mm% = dateadd_mm% + dateadd_delta% if dateadd_mm%<1 while dateadd_mm%<1 dateadd_aaaa% = dateadd_aaaa% - 1 dateadd_mm% = dateadd_mm% + 12 end_while else while dateadd_mm%>12 dateadd_aaaa% = dateadd_aaaa% + 1 dateadd_mm% = dateadd_mm% - 12 end_while end_if if dateadd_jj%>dateadd_jours%(dateadd_mm%) then dateadd_jj% = dateadd_jours%(dateadd_mm%) gosub dateadd_fusionne return
dateadd_jj: gosub dateadd_eclate gosub dateadd_fin_de_mois dateadd_jj% = dateadd_jj% + dateadd_delta% if dateadd_jj%<1 while dateadd_jj%<1 dateadd_mm% = dateadd_mm% - 1 if dateadd_mm%<1 dateadd_mm% = 12 dateadd_aaaa% = dateadd_aaaa% - 1 end_if gosub dateadd_fevrier dateadd_jj% = dateadd_jj% + dateadd_jours%(dateadd_mm%) end_while else while dateadd_jj%>dateadd_jours%(dateadd_mm%) gosub dateadd_fevrier dateadd_jj% = dateadd_jj% - dateadd_jours%(dateadd_mm%) dateadd_mm% = dateadd_mm% + 1 if dateadd_mm%>12 dateadd_mm% = 1 dateadd_aaaa% = dateadd_aaaa% + 1 end_if end_while end_if gosub dateadd_fusionne return
rem #include "jour_de_semaine_procedure.inc" rem ********************************************************************** rem * * rem * #INCLUDE jour_de_semaine_procedure.inc * rem * * rem * Début de la partie "code" à copier à la fin du source * rem * * rem **********************************************************************
jour_de_semaine: jour_de_semaine_j% = val(left$(jour_de_semaine_date$,2)) jour_de_semaine_m% = val(mid$(jour_de_semaine_date$,4,2)) jour_de_semaine_a% = val(right$(jour_de_semaine_date$,4))
if jour_de_semaine_m%<3 jour_de_semaine_m1% = jour_de_semaine_m% + 10 jour_de_semaine_a1% = jour_de_semaine_a% - 1 else jour_de_semaine_m1% = jour_de_semaine_m% - 2 jour_de_semaine_a1% = jour_de_semaine_a% end_if
jour_de_semaine_ns% = int(jour_de_semaine_a1%/100)
jour_de_semaine_as% = jour_de_semaine_a1% - jour_de_semaine_ns%*100
jour_de_semaine_f% = jour_de_semaine_j% + jour_de_semaine_as% + int(jour_de_semaine_as%/4) - 2* jour_de_semaine_ns% + int(jour_de_semaine_ns%/4) + int((26*jour_de_semaine_m1%-2)/10)
jour_de_semaine_numero% = jour_de_semaine_f% - int(jour_de_semaine_f%/7)*7
select jour_de_semaine_numero% case 0: jour_de_semaine_text$ = "Dimanche" case 1: jour_de_semaine_text$ = "Lundi" case 2: jour_de_semaine_text$ = "Mardi" case 3: jour_de_semaine_text$ = "Mercredi" case 4: jour_de_semaine_text$ = "Jeudi" case 5: jour_de_semaine_text$ = "Vendredi" case 6: jour_de_semaine_text$ = "Samedi" end_select
return rem **************************************************************** rem * * rem * fin #INCLUDE jour_de_semaine_procedure.inc * rem * * rem ****************************************************************
rem #include "calendrier_procedure.inc" rem ********************************************************************** rem * * rem * #INCLUDE calendrier_procedure.inc * rem * * rem * Début de la partie "code" à copier à la fin du source * rem * * rem **********************************************************************
rem ************************************************************************ rem * * rem * routines on_click du calendrier * rem * * rem ************************************************************************
calendrier_prec: dateadd_date$ = calendrier_date$ dateadd_delta% = -1 gosub dateadd_mm calendrier_date$ = dateadd_date$ goto calendrier_redessiner
calendrier_prec_ann: dateadd_date$ = calendrier_date$ dateadd_delta% = -1 gosub dateadd_aaaa calendrier_date$ = dateadd_date$ goto calendrier_redessiner
calendrier_suiv: dateadd_date$ = calendrier_date$ dateadd_delta% = 1 gosub dateadd_mm calendrier_date$ = dateadd_date$ goto calendrier_redessiner
calendrier_suiv_ann: dateadd_date$ = calendrier_date$ dateadd_delta% = 1 gosub dateadd_aaaa calendrier_date$ = dateadd_date$ goto calendrier_redessiner
calendrier_abort: hide calendrier_objet_form% calendrier_visible%=2 inactive calendrier_objet_form% calendrier_resultat$ = "" active 0 to_foreground 0 return
calendrier_cejour: calendrier_date$ = date$ goto calendrier_redessiner
calendrier_OK: hide calendrier_objet_form% calendrier_visible%=2 inactive calendrier_objet_form% calendrier_resultat$ = calendrier_date$ active 0 to_foreground 0 return
calendrier_seldate: calendrier_j% = mouse_x_left_down(calendrier_objet_calendrier%) calendrier_i% = mouse_y_left_down(calendrier_objet_calendrier%) calendrier_j% = int((calendrier_j% + 33)/34) calendrier_i% = int((calendrier_i% + 23)/24) - 2 if calendrier_i%<1 then return dateadd_delta% = ((calendrier_i%-1)*7 + calendrier_j%) - ((calendrier_jlig%-1)*7 + calendrier_jcol%) dateadd_date$ = calendrier_date$ gosub dateadd_jj calendrier_date$ = dateadd_date$ goto calendrier_redessiner
rem ************************************************************************ rem * * rem * routines de service du calendrier * rem * * rem ************************************************************************
calendrier_dessiner:
calendrier_objet_form% = 1000 calendrier_objet_calendrier% = 1001 form calendrier_objet_form% command_target_is calendrier_objet_form% border_hide calendrier_objet_form% hide calendrier_objet_form% border_hide calendrier_objet_form% top calendrier_objet_form%,200 left calendrier_objet_form%,200 width calendrier_objet_form%, 248 height calendrier_objet_form%, 243 picture calendrier_objet_calendrier% width calendrier_objet_calendrier%, 238 height calendrier_objet_calendrier%, 216 caption calendrier_objet_form% , "Calendrier" on_click calendrier_objet_calendrier%, calendrier_seldate
dim calendrier_i%, calendrier_j%, calendrier_k%, dim calendrier_baseh%, calendrier_basev%, calendrier_basec% dim calendrier_debut_mois$ dim calendrier_jour2% dim calendrier_jour1%, calendrier_jours_prec%, calendrier_delta%, calendrier_jlig%, calendrier_jcol% dim calendrier_color_cadre%(2), calendrier_color_texte%(2), calendrier_color_fond_text%(2) dim calendrier_color_fond_jours%(2), calendrier_color_du_jour%(2) dim calendrier_color_jours%(2), calendrier_color_fond_texte%(2), calendrier_color_hors%(2) dim calendrier_mois$(12), calendrier_jmois%(12)
calendrier_color_cadre%(0) = 24 calendrier_color_cadre%(1) = 95 calendrier_color_cadre%(2) = 214 calendrier_color_texte%(0) = 255 calendrier_color_texte%(1) = 255 calendrier_color_texte%(2) = 255 calendrier_color_jours%(0) = 0 calendrier_color_jours%(1) = 0 calendrier_color_jours%(2) = 0 calendrier_color_fond_jours%(0) = 82 calendrier_color_fond_jours%(1) = 162 calendrier_color_fond_jours%(2) = 255 calendrier_color_fond_texte%(0) = 49 calendrier_color_fond_texte%(1) = 109 calendrier_color_fond_texte%(2) = 239 calendrier_color_du_jour%(0) = 255 calendrier_color_du_jour%(1) = 255 calendrier_color_du_jour%(2) = 0 calendrier_color_hors%(0) = 207 calendrier_color_hors%(1) = 207 calendrier_color_hors%(2) = 207
calendrier_mois$(1) = "Janvier" calendrier_mois$(2) = "Février" calendrier_mois$(3) = "Mars" calendrier_mois$(4) = "Avril" calendrier_mois$(5) = "Mai" calendrier_mois$(6) = "Juin" calendrier_mois$(7) = "Juillet" calendrier_mois$(8) = "Août" calendrier_mois$(9) = "Septembre" calendrier_mois$(10) = "Octobre" calendrier_mois$(11) = "Novembre" calendrier_mois$(12) = "Décembre" calendrier_jmois%(1) = 31 calendrier_jmois%(2) = 28 calendrier_jmois%(3) = 31 calendrier_jmois%(4) = 30 calendrier_jmois%(5) = 31 calendrier_jmois%(6) = 30 calendrier_jmois%(7) = 31 calendrier_jmois%(8) = 31 calendrier_jmois%(9) = 30 calendrier_jmois%(10) = 31 calendrier_jmois%(11) = 30 calendrier_jmois%(12) = 31
if val(mid$(calendrier_date$,4,2))=2 calendrier_jmois%(2) = 28 if val(mid$(calendrier_date$,7,4))-int(val(mid$(calendrier_date$,7,4))/4)*4=0 if val(mid$(calendrier_date$,7,4))-int(val(mid$(calendrier_date$,7,4))/400)*400>0 calendrier_jmois%(2) = 29 end_if end_if end_if
button calendrier_objet_calendrier%+1 left calendrier_objet_calendrier%+1, 2 top calendrier_objet_calendrier%+1, 2 width calendrier_objet_calendrier%+1, 30 height calendrier_objet_calendrier%+1,20 caption calendrier_objet_calendrier%+1,"<<" on_click calendrier_objet_calendrier%+1,calendrier_prec_ann
button calendrier_objet_calendrier%+6 left calendrier_objet_calendrier%+6, 36 top calendrier_objet_calendrier%+6, 2 width calendrier_objet_calendrier%+6, 30 height calendrier_objet_calendrier%+6,20 caption calendrier_objet_calendrier%+6,"<" on_click calendrier_objet_calendrier%+6,calendrier_prec
button calendrier_objet_calendrier%+2 left calendrier_objet_calendrier%+2, 204+2-34 top calendrier_objet_calendrier%+2, 2 width calendrier_objet_calendrier%+2, 30 height calendrier_objet_calendrier%+2,20 caption calendrier_objet_calendrier%+2, ">" on_click calendrier_objet_calendrier%+2,calendrier_suiv
button calendrier_objet_calendrier%+7 left calendrier_objet_calendrier%+7, 204+2 top calendrier_objet_calendrier%+7, 2 width calendrier_objet_calendrier%+7, 30 height calendrier_objet_calendrier%+7,20 caption calendrier_objet_calendrier%+7, ">>" on_click calendrier_objet_calendrier%+7,calendrier_suiv_ann
button calendrier_objet_calendrier%+3 left calendrier_objet_calendrier%+3, 2 top calendrier_objet_calendrier%+3,192+2 width calendrier_objet_calendrier%+3, 66 height calendrier_objet_calendrier%+3,20 caption calendrier_objet_calendrier%+3,"Abandon" on_click calendrier_objet_calendrier%+3,calendrier_abort
button calendrier_objet_calendrier%+4 left calendrier_objet_calendrier%+4, 68+2 top calendrier_objet_calendrier%+4,192+2 width calendrier_objet_calendrier%+4, 100 height calendrier_objet_calendrier%+4,20 caption calendrier_objet_calendrier%+4,"Aujourd'hui" on_click calendrier_objet_calendrier%+4,calendrier_cejour
button calendrier_objet_calendrier%+5 left calendrier_objet_calendrier%+5, 170+2 top calendrier_objet_calendrier%+5,192+2 width calendrier_objet_calendrier%+5, 66 height calendrier_objet_calendrier%+5,20 caption calendrier_objet_calendrier%+5,"OK" on_click calendrier_objet_calendrier%+5,calendrier_OK
calendrier_redessiner:
cls calendrier_resultat$ = ""
calendrier_baseh% = 0 calendrier_basev% = 0 calendrier_basec% = 10
2d_target_is calendrier_objet_calendrier% print_target_is calendrier_objet_calendrier%
' barre de commande 2d_pen_color calendrier_color_cadre%(0), calendrier_color_cadre%(1), calendrier_color_cadre%(2) 2d_fill_color calendrier_color_cadre%(0), calendrier_color_cadre%(1), calendrier_color_cadre%(2) 2d_rectangle calendrier_baseh%, calendrier_basev%, calendrier_baseh% + 238, calendrier_basev% + 24 ' bouton "année précédente" 2d_fill_color calendrier_color_fond_jours%(0), calendrier_color_fond_jours%(1), calendrier_color_fond_jours%(2) 2d_rectangle calendrier_baseh%+1, calendrier_basev%+1, calendrier_baseh% + 32, calendrier_basev% + 22 ' bouton "mois précédent" 2d_rectangle calendrier_baseh%+1+32, calendrier_basev%+1, calendrier_baseh% +34+32, calendrier_basev% + 22 ' champs "nom du mois" 2d_rectangle calendrier_baseh%+34+34+1, calendrier_basev%+1, calendrier_baseh% + 202-34, calendrier_basev% + 22 ' bouton "mois suivant" 2d_rectangle calendrier_baseh%+204-32+1, calendrier_basev%+1, calendrier_baseh% + 238-34, calendrier_basev% + 22 ' bouton "année suivante" 2d_rectangle calendrier_baseh%+204+1, calendrier_basev%+1, calendrier_baseh% + 238, calendrier_basev% + 22
' cases des jours calendrier_basev% = 24 For calendrier_j% = 1 To 7 calendrier_baseh% = 0 For calendrier_i% = 1 To 7 2d_fill_color calendrier_color_fond_jours%(0), calendrier_color_fond_jours%(1), calendrier_color_fond_jours%(2) 2d_rectangle calendrier_baseh%, calendrier_basev%, calendrier_baseh% + 34, calendrier_basev% + 24 If calendrier_j% = 1 2d_fill_color calendrier_color_fond_jours%(0), calendrier_color_fond_jours%(1), calendrier_color_fond_jours%(2) End_If 2d_rectangle calendrier_baseh%+1, calendrier_basev%+1, calendrier_baseh% + 32, calendrier_basev% + 22 calendrier_baseh% = calendrier_baseh% + 34 Next calendrier_i% calendrier_basev% = calendrier_basev% + 24 Next calendrier_j% ' cadre autour des boutons en bas de la form 2d_rectangle 0,192,238,216
' calculer le positionnement des chiffres dans le tableau dateadd_delta% = 1 - val(left$(calendrier_date$,2)) dateadd_date$ = calendrier_date$ gosub dateadd_jj calendrier_debut_mois$= dateadd_date$ jour_de_semaine_date$ = calendrier_debut_mois$ gosub jour_de_semaine calendrier_decalage% = jour_de_semaine_numero% If calendrier_decalage% = 1 calendrier_decalage% = 8 End_If
dateadd_date$ = calendrier_date$ dateadd_delta% = -1 gosub dateadd_mm calendrier_jour1% = 0 calendrier_jour1% = calendrier_jmois%(val(mid$(dateadd_date$,4,2))) calendrier_jours_prec% = calendrier_jmois%(val(mid$(dateadd_date$,4,2))) calendrier_i% = calendrier_decalage% - 1 calendrier_jlig% = Int((val(left$(calendrier_date$,2)) + calendrier_i% + 6) / 7) calendrier_jcol% = val(left$(calendrier_date$,2)) + calendrier_i% - (calendrier_jlig% - 1) * 7
' faire les libellés des boutons de commande font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2) calendrier_basev% = 4 print_locate 10,calendrier_basev% print "<" print_locate 214,calendrier_basev% print ">" 2d_rectangle calendrier_baseh%+34+1, calendrier_basev%+1, calendrier_baseh% + 202, calendrier_basev% + 22 print_locate 80,calendrier_basev% font_color calendrier_objet_calendrier%,calendrier_color_texte%(0), calendrier_color_texte%(1), calendrier_color_texte%(2) print calendrier_mois$(val(mid$(calendrier_date$,4,2))) + " " + right$(calendrier_date$,4) font_color calendrier_objet_calendrier%, calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2) calendrier_basev% = 28 if val(mid$(calendrier_date$,4,2))=2 calendrier_jmois%(2) = 28 if val(mid$(calendrier_date$,7,4))-int(val(mid$(calendrier_date$,7,4))/4)*4=0 if val(mid$(calendrier_date$,7,4))-int(val(mid$(calendrier_date$,7,4))/400)*400>0 calendrier_jmois%(2) = 29 end_if end_if end_if
' afficher les libellés des jours de semaine print_locate 10,calendrier_basev% print "Lu" print_locate 44,calendrier_basev% print "Ma" print_locate 78,calendrier_basev% print "Me" print_locate 112,calendrier_basev% print "Je" print_locate 146,calendrier_basev% print "Ve" print_locate 180,calendrier_basev% print "Sa" print_locate 214,calendrier_basev% print "Di"
' calculer le décalage du premier du mois calendrier_delta% = 0 calendrier_jour2% = 1 - calendrier_decalage% If calendrier_decalage% > 1 font_color calendrier_objet_calendrier%,calendrier_color_hors%(0), calendrier_color_hors%(1), calendrier_color_hors%(2) Else font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2) calendrier_jour2% = 1 End_If
' affichier les numéros des jours For calendrier_i% = 1 To 6 For calendrier_j% = 1 To 7 If calendrier_jour2% < 0 font_color calendrier_objet_calendrier%, calendrier_color_hors%(0), calendrier_color_hors%(1), calendrier_color_hors%(2) print_locate 4 + (calendrier_j% - 1) * 34,calendrier_basev% + calendrier_i% * 24 print calendrier_jours_prec% + calendrier_jour2% + 1 calendrier_jour2% = calendrier_jour2% + 1 If calendrier_jour2% = 0 font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2) calendrier_jour2% = calendrier_jour2% + 1 End_If Else If calendrier_jour2% > calendrier_jmois%(val(mid$(calendrier_date$,4,2))) font_color calendrier_objet_calendrier%,calendrier_color_hors%(0), calendrier_color_hors%(1), calendrier_color_hors%(2) calendrier_delta% = calendrier_jmois%(val(mid$(calendrier_date$,4,2))) End_If print_locate 4 + (calendrier_j% - 1) * 34, calendrier_basev% + calendrier_i% * 24 If calendrier_jlig% = calendrier_i% And calendrier_jcol% = calendrier_j% font_color calendrier_objet_calendrier%,calendrier_color_du_jour%(0), calendrier_color_du_jour%(1), calendrier_color_du_jour%(2) End_If Print str$(calendrier_jour2% - calendrier_delta%) If calendrier_jlig% = calendrier_i% And calendrier_jcol% = calendrier_j% font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2) End_If calendrier_jour2% = calendrier_jour2% + 1 End_If Next calendrier_j% Next calendrier_i%
return
rem **************************************************************** rem * * rem * fin #INCLUDE calendrier_procedure.inc * rem * * rem ****************************************************************
| |
| | | 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 Mar 29 Mai 2012 - 13:37 | |
| Très bien Klaus, ce calendrier pop-up devient plus pratique. J'ai revu ma copie en fonction des interventions des uns et des autres et de mes préférences, et le tout sous forme de routine insérable dans un code. Je vous la livre pour la passer une nouvelle fois au ban d'essai. - Code:
-
' Routine saisie_date par Jean-Claude (Mai 2012) ' (avec la participation de nombreux "Panoramiciens")
' 1) vérifier si ces variables sont dèjà déclarées dans le code destination ' sinon il faut les insérer dim no%,n%,bouton,x,y label start,bouton
' 2) insérer les 4 lignes ci-dessous dans le code destination avan end dim top_container_date,left_container_date,aaaa$,dat$,mm$,jj$,container_date% ' aaaa$=right$(date$,4):mm$=mid$(date$,4,2):jj$=left$(date$,2):' règlages affichage aaaa$="":mm$="":jj$="":' règlages affichage top_container_date=100:left_container_date=200:' règlages position label init_sub_date,saisie_date:gosub init_sub_date ' ' ------------------------------------------------------------------------------- ' code destination avant end no%=no%+1:main_menu no% no%=no%+1:sub_menu no%:parent no%,no%-1:caption no%," START ":on_click no%,start
END ' ============================== CODE DESTINATION ============================== ' code destination après end start: gosub saisie_date:hide container_date%:' lance la routine et libère la place dat$=jj$+"/"+mm$+"/"+aaaa$:' definir le format ou/et récupérer les variables
' affichage caption 0,dat$
aaaa$="":mm$="":jj$="":' remise à zéro return
' 4) ===================== Routine saisie_date à inserer ================================================= init_sub_date: if container_date%<>0 then return dim edit_date%,combo_mois%,combo_jour%,aaaa%,bissextile,maxj,alpha_suite% dim alpha_suite2%,alpha_valide%,alpha_retour% label ctrl_annee_bissextiles,ctrl_an_bi,saisie_mois,ctrl_jour,fin_date,saisie_jour,reinit_date ' GUI de la routine no%=no%+1:container_date%=no%:container no%:width no%,240:height no%,38:hide no% top no%,top_container_date:left no%,left_container_date:' position du container_date no%=no%+1:edit_date%=no%:edit no%:parent no%,container_date% width no%,40:top no%,11:left no%,5 if aaaa$<>"" then text no%,aaaa$ if aaaa$="" then text no%,"Année":off_click no% on_change no%,ctrl_annee_bissextiles
no%=no%+1:alpha_suite%=no%:alpha no%:parent no%,container_date% font_name no%,"wingdings 3":font_size no%,14:caption no%,chr$(95) top no%,11:left no%,48:on_click no%,ctrl_an_bi:hint no%," Valider l'Année et Continuer " no%=no%+1:combo_mois%=no%:combo no%:parent no%,container_date% width no%,50:text no%,"Mois":top no%,11:left no%,68:inactive no% for n%=1 to 12 if n%<10 then item_add no%,"0"+str$(n%) if n%>9 then item_add no%,str$(n%) next n% if mm$<>"" then text no%,mm$ if mm$="" then text no%,"Mois" on_click no%,ctrl_jour
no%=no%+1:alpha_suite2%=no%:alpha no%:parent no%,container_date%:hint no%," Valider le Mois et Continuer " font_name no%,"wingdings 3":font_size no%,14:caption no%,chr$(95) top no%,11:left no%,120:on_click no%,ctrl_jour:inactive no%
no%=no%+1:combo_jour%=no%:combo no%:parent no%,container_date% width no%,50:text no%,"Jour":top no%,11:left no%,140:inactive no% if jj$<>"" then text no%,jj$ if jj$="" then text no%,"Jour" on_click no%,saisie_jour
no%=no%+1:alpha_valide%=no%:alpha no%:parent no%,container_date%:hint no%," Valider la Date et Quitter " font_name no%,"Symbol":font_size no%,16:caption no%,chr$(197) top no%,7:left no%,193:on_click no%,fin_date:inactive no%
no%=no%+1:alpha_retour%=no%:alpha no%:parent no%,container_date%:hint no%," Recommencer " font_name no%,"Symbol":font_size no%,16:caption no%,chr$(196) top no%,7:left no%,212:on_click no%,reinit_date:inactive no% return ' ------------------------------------ routine --------------------------------------------------------------- saisie_date: show container_date%:active alpha_suite%:active edit_date%:set_focus edit_date% if text$(edit_date%)="Année" then inactive alpha_suite% end:return
fin_date: if text$(combo_jour%)="28" then jj$=text$(combo_jour%) bouton=alpha_valide%:gosub bouton:inactive alpha_retour%:inactive alpha_valide% inactive combo_jour% return
reinit_date: bouton=alpha_retour%:gosub bouton:inactive alpha_retour%:inactive alpha_suite2% inactive combo_mois%:clear combo_jour%:inactive combo_jour%:text combo_jour%,"Jour" active alpha_suite%:active edit_date%:set_focus edit_date%:text edit_date%,aaaa$ end:return
saisie_jour: jj$=item_index$(combo_jour%):inactive combo_jour% if jj$="" then jj$=text,combo_jour% active alpha_valide% end:return
saisie_mois: active alpha_retour%:inactive alpha_suite%:inactive edit_date%:active combo_mois% if mm$<>"" then active alpha_suite2% if jj$="" then clear combo_jour%:text combo_jour%,"Jour" active alpha_valide% if text$(combo_jour%)="Jour" then inactive alpha_valide% return
ctrl_jour: bouton=alpha_suite2%:gosub bouton mm$=item_index$(combo_mois%):inactive combo_mois%:inactive alpha_suite2% if mm$="" then mm$=text$(combo_mois%) if mm$="04" or mm$="06" or mm$="09" or mm$="11" maxj=30 else maxj=31 end_if if bissextile=1 and mm$="02" then maxj=29 if bissextile=0 and mm$="02" then maxj=28:text combo_jour%,"28" for n%= 1 to maxj if n%<10 then item_add combo_jour%,"0"+str$(n%) if n%>9 then item_add combo_jour%,str$(n%) next n% active combo_jour% end:return
ctrl_annee_bissextiles: if text$(edit_date%)="Année" then text edit_date%,"" aaaa$=text$(edit_date%) if aaaa$="" then return ctrl_an_bi: bouton=alpha_suite%:gosub bouton if aaaa$="" then aaaa$=text$(edit_date%) aaaa%=val(aaaa$) bissextile=0: IF (FRAC(aaaa%/4)=0 AND FRAC(aaaa%/100)>0) OR FRAC(aaaa%/400)=0 THEN bissextile=1:' JL35 if len(aaaa$)>3 then gosub saisie_mois end:return
bouton: if active(bouton)=0 or show(bouton)=0 or clicked(bouton)=0 then return x=top(bouton):y=left(bouton) top bouton,x+2:left bouton,y+2 wait 200 top bouton,x:left bouton,y return
Une précision: faites les essais en changeant alternativement les lignes 11 et 12.J'espère que c'est la dernière version. A+ | |
| | | ambroise
Nombre de messages : 264 Localisation : Haute-Savoie Date d'inscription : 29/04/2012
| Sujet: Re: Utilitaire de saisie d'une date Mar 29 Mai 2012 - 14:46 | |
| Bonjour, Je m'aperçois que lorsque le programme envoie vers un sous-programme tel que notre verif pour notre date, au retour il place le curseur au début de la date entrée par l'utilisateur. C'est assez gênant. Voyez dans le code ci-dessous destiné à convertir en majuscules un nom entré dans un edit. Si on n'y prend garde, on obtient un nom inversé : - Code:
-
dim edit% label nommer
edit 1 text 1,"" on_change 1, nommer end
nommer: edit% = number_change text edit%, upper$(text$(edit%)) return
Existe-t-il un moyen de positionner automatiquement le curseur en fin de mot dans l'edit à chaque retour du sous-programme ? Merci encore.
Dernière édition par ambroise le Mar 29 Mai 2012 - 14:50, é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 29 Mai 2012 - 14:48 | |
| Ca marche très bien.
Une petite remarque: quand on revient dans la saisie pour la seconde fois, la date précédente est présentée par défaut. Mais pourtant, il faut resaisir TOUS les champs, même si l'on ne veut changer que l'année ou le jour. As-tu prévu un moyen de changer un champ ponctuellement ? Sinon, il vaut mieux présenter toujours une date vide, comme au démarrage. | |
| | | 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 29 Mai 2012 - 14:49 | |
| | |
| | | Invité Invité
| Sujet: Re: Utilitaire de saisie d'une date Mar 29 Mai 2012 - 15:26 | |
| Bonjour Ambroise, - Citation :
- Existe-t-il un moyen de positionner automatiquement le curseur en fin de mot dans l'edit à chaque retour du sous-programme ?
La réponse est oui: - Code:
-
edit 1 text 1,"salut à toi!" set_focus 1 caret_position 1,5 Juste une parenthèse,c'est dommage qu'il n'y ai pas un post pour les astuces. Je viens de faire ceci dans un programme: - Code:
-
' en exemple: label demarre memo 1 on_change 1,demarre item_add 1,"":end demarre: off_change 1 message "il y a eu un évennement automatique sans timer provisoir" return
|
| | | ambroise
Nombre de messages : 264 Localisation : Haute-Savoie Date d'inscription : 29/04/2012
| Sujet: Re: Utilitaire de saisie d'une date Mar 29 Mai 2012 - 15:38 | |
| Merci Cosmos70, Ce Panoramic est rempli de richesses cachées... Heureux ceux qui savent chercher... Moi, je cherchais dans l'aide au mot cursor ! - Code:
-
dim edit% , curseur% label nommer
edit 1 text 1,"" on_change 1, nommer end nommer: edit% = number_change curseur% = len(text$(edit%)) text edit%, upper$(text$(edit%)) caret_position edit%,curseur% return
Dernière édition par ambroise le Mar 29 Mai 2012 - 17:28, édité 2 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 29 Mai 2012 - 16:46 | |
| Merci, Cosmos70 ! Tu m'as appris quelque chose. J'étais convaincu que caret_position ne s'appliquait qu'aux mémos. Une fois de plus: il faut relire la doc... | |
| | | ambroise
Nombre de messages : 264 Localisation : Haute-Savoie Date d'inscription : 29/04/2012
| Sujet: Re: Utilitaire de saisie d'une date Mar 29 Mai 2012 - 17:28 | |
| | |
| | | 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 30 Mai 2012 - 1:20 | |
| Bonsoir à toute la planète Panoramic, Finalement ils m'ont laissé sortir de l'hôpital en fin d'après-midi. J'ai plus de 48 heures de lecture forum à rattraper. Pour Jean-Claude, ton dernier programme pour rentrer des dates, j'ai bien aimé, sauf que j'ai détecté un bug. Si pour l'année, tu tapes une lettre ou un autre caractère qu'un chiffre, le programme part en erreur et plante. A noter que le point décimal est accepté une fois dans la saisie! Pour Ambroise, si tu avais bien regardé et étudié le programme que j'avais mis sur la première page de ce post, tu te serais apperçu que j'utilise à plusieurs reprises l'instruction caret_position. Mais c'est bien que tu ais posé la question du curseur dans un edit, car cela a permis à Cosmos de préciser que Caret_position permet de mettre le curseur où l'on veut dans un edit, et d'autres personnes ont ainsi pu enrichir certainement leurs connaissances. Pour en revenir aux problèmes des dates, comme il s'agit certainement de saisir celles-ci avec le minimum d'erreur, je me suis dis qu'il n'y aurait que des chiffres à saisir. Donc, 3 edit. Les fautes de frappe sont signalés par un message de rappel à l'ordre ainsi que les mois de 30 jours et le mois de février. Le programme gère les années bissextiles de 29 jours. Dès que vous êtes dans le champ de l'année après l'avoir saisie, vous validez avec enter, et là votre date apparaît à gauche dans un list. Si vous vous êtes malgré tout quand même trompé dans la saisie, vous cliquez dessus dans le list, et elle réapparait dans les 3 edit sous sa forme initiale, prête à être corrigée! Dès que vous appuyez sur enter, elle reprend sa place dans le list, rectifiée. Cerise sur le gâteau! les dates se classent chronologiquement dans le list au fur et à mesure de leurs saisies grâce à un algorythme maison (calcul de p et q). Ça je pense qu'Ambroise va aimer, car c'est très utile, surtout pour des recherches en généalogie. En plus, le programme permet si on ne connaît pas la date exacte de ne rentrer que le mois et l'année ou que l'année seule! - Code:
-
dim i,j,p,q,j$,m$,modif:label verif1,verif2,verif3,valide,voir_date:height 0,700 edit 1:left 1,200:top 1,50:width 1,20:on_change 1,verif1 edit 2:left 2,240:top 2,50:width 2,20:on_change 2,verif2 edit 3:left 3,280:top 3,50:width 3,40:on_change 3,verif3:on_key_up 3,valide alpha 4:left 4,200:top 4,25:caption 4,"FORMAT DATE JJ/MM/AAAA" alpha 5:left 5,225:top 5,55:caption 5,"/" alpha 6:left 6,265:top 6,55:caption 6,"/" alpha 7:left 7,200:top 7,75:caption 7,"Ne saisir que des chiffres SVP" alpha 8:left 8,5:font_name 8,"Fixedsys":caption 8,"JJ/MM/AAAA" list 10:height 10,640:top 10,20:font_name 10,"Fixedsys":on_click 10,voir_date set_focus 1 end
verif1: if len(text$(1))=0 then return if numeric(right$(text$(1),1))=0 or right$(text$(1),1)="." then beep_error:message "Quantième jour en chiffres SVP":text 1,"":return if val(left$(text$(1),1))>3 then beep_error:message "Quantième jour ne peut être supérieur à 31 SVP":text 1,"":return if len(text$(1))=2 and val(text$(1))=0 or val(text$(1))>31 then beep_error:message "Quantième jour 00 ou supérieur à 31 impossible":text 1,"":return if len(text$(1))=2 then gosub verif2:set_focus 2:gosub verif2 return verif2: if len(text$(2))=0 then return if numeric(right$(text$(2),1))=0 or right$(text$(2),1)="." then beep_error:message "Quantième mois en chiffres SVP":text 2,"":return if val(left$(text$(2),1))>1 then beep_error:message "Quantième mois ne peut être supérieur à 12 SVP":text 2,"":return if len(text$(2))=2 and val(text$(2))=0 or val(text$(2))>12 then beep_error:message "Quantième mois 00 ou supérieur à 12 impossible":text 2,"":return if text$(1)<>"" if (text$(2)="02" and val(text$(1))>29) then beep_error:message "Quantième mois de Février ne peut être supérieur à 29":text 1,"29" if text$(2)="04" or text$(2)="06" or text$(2)="09" or text$(2)="11" and val(text$(1))>30 then beep_error:message "Les mois d'Avril, Juin, Septembre et Novembre n'ont que 30 jours":text 1,"30" end_if if len(text$(2))=2 then set_focus 3 return verif3: if len(text$(3))=0 then return if len(text$(3))>4 then beep_error:message "Quatre chiffres maximum pour l'année SVP":text 3,left$(text$(3),4):caret_position 3,4 if numeric(right$(text$(3),1))=0 or right$(text$(3),1)="." then beep_error:message "Quantième année en chiffres SVP":text 3,"":return if text$(1)<>"" if len(text$(3))=4 and text$(2)="02" and val(text$(1))>28 if val(text$(3))-int(val(text$(3))/100)*100=0 if val(text$(3))-int(val(text$(3))/400)*400>0 then beep_error:message "Il n'y a que 28 jours en Février "+text$(3):set_focus 1 end_if if val(text$(3))-int(val(text$(3))/4)*4>0 then beep_error:message "Il n'y a que 28 jours en Février "+text$(3):set_focus 1 end_if end_if return valide: if key_up_code=13 and len(text$(3))=4 j$=text$(1):if j$="" then j$=" " m$=text$(2):if m$="" then m$=" " if modif=0 item_add 10,j$+"/"+m$+"/"+text$(3):text 1,"":text 2,"":text 3,"":set_focus 1 else item_delete 10,modif:item_insert 10,modif,j$+"/"+m$+"/"+text$(3):text 1,"":text 2,"":text 3,"":modif=0:set_focus 1 end_if end_if if count(10)>1 for i=1 to count(10)-1 for j=i to count(10) if left$(item_read$(10,j),2)=" " then p=0 if left$(item_read$(10,j),2)<>" " then p=val(left$(item_read$(10,j),2)) if mid$(item_read$(10,j),4,2)=" " then p=p+0 if mid$(item_read$(10,j),4,2)<>" " then p=p+(val(mid$(item_read$(10,j),4,2))*30.4375) p=p+(val(right$(item_read$(10,j),4))*365.25) if left$(item_read$(10,i),2)=" " then q=0 if left$(item_read$(10,i),2)<>" " then q=val(left$(item_read$(10,i),2)) if mid$(item_read$(10,i),4,2)=" " then q=q+0 if mid$(item_read$(10,i),4,2)<>" " then q=q+(val(mid$(item_read$(10,i),4,2))*30.4375) q=q+(val(right$(item_read$(10,i),4))*365.25) if p<q then item_insert 10,i,item_read$(10,j):item_delete 10,j+1 next j next i end_if return voir_date: if right$(item_index$(10),4)="" then return text 1,left$(item_index$(10),2):text 2,mid$(item_index$(10),4,2):text 3,right$(item_index$(10),4):modif=item_index(10):set_focus 1 return
Bon, je suis fatigué A bientôt | |
| | | 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
| |
| |
| |