Avril 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 |
|
| | Combo date : sélecteur de date | |
| | Auteur | Message |
---|
Marc
Nombre de messages : 2380 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Combo date : sélecteur de date Ven 12 Jan 2024 - 19:48 | |
| Bonjour à tous ! Voici un « comboDate » qui permet de sélectionner une date du calendrier au format français. Deux formats d'affichage sont disponibles : « 19/01/2024 » ou « 19 janvier 2024 ». Un clic sur le champ de saisie fait apparaître une fenêtre modale de sélection de la date. Il se présente sous forme d’une SUB avec cette syntaxe : comboDate(P1,P2,P3,P4,P5)P1 = numéro de l’objet sur lequel sera construit le comboDate ( FORM, PANEL ou CONTAINER) ; P2 = numéro d’objet attribué au comboDate ; P3 = la position en X ; P4 = la position en Y ; P5 = 0 ou 1 pour le format d’affichage : 0 pour « 19/01/2024 » ; 1 pour « 19 janvier 2024 ». Un seul LABEL est nécessaire pour son fonctionnement : LABEL choisirDateAucune variable à déclarer. Vous pouvez créer autant de comboDate que vous le souhaitez, dans la limite des possibilités techniques de PANORAMIC. Un comboDate occupe une largeur de 20 objets consécutifs. Explication : Par exemple, un comboDate défini avec le numéro d’objet 100 (paramètre P2), occupera les numéros d’objets 100 à 120 pour son fonctionnement interne. Le comboDate interdit toute saisie erronée. Il gère les années bissextiles et s’étend de 1900 à 2050. En modifiant le code source, il est possible d’élargir ou de restreindre la plage des années. Lecture de la valeur du comboDate :La lecture de la date s’effectue par la fonction CAPTION$(numéro d’objet). Le numéro d’objet est le paramètre P2 lors de la création du comboDate. Le comboDate peut s’implanter en plusieurs exemplaires sur n’importe quel FORM, PANEL ou CONTAINER. Il n’est pas compatible avec un TAB. - Code:
-
' Combo-date ' Marc - Janvier 2024 ' Ecrit en langage PANORAMIC 0.9.29.i9
' Syntaxe : ' comboDate(P1,P2 ,P3,P4,P5) ' P1 = numéro de l'objet sur lequel sera construit le comboDate (FORM, PANEL ou CONTAINER) ' P2 = numéro d'objet attribué au comboDate ' P3 = la position en X ' P4 = la position en Y ' P5 = 0 ou 1 pour le format d'affichage : 0 pour " 19/01/2024 " ; 1 pour " 19 janvier 2024 "
' Un comboDate occupe en interne une largeur de 20 objets consécutifs ' La lecture d'une date s'effectue via la fonction CAPTION$(numéro du comboDate) => c'est le paramètre P2
label choisirDate
comboDate(0,100,60,60,0)
end
' ------------------------------------------------------------------------------ choisirDate: if object_type(number_click) = 9 selectionnerDate(number_click - 1) else selectionnerDate(number_click) end_if return ' ------------------------------------------------------------------------------ sub comboDate(objetParent%,n%,x%,y%,formatAffichage%) dim_local an%, jour$, nj%
' construire le COMBO-DATE sur le FORM ou le PANEL souhaité command_target_is objetParent% ' créer le champ d'affichage de la date sélectionnée picture n%+1 top n%+1,y% left n%+1,x% width n%+1,107 height n%+1,21 color n%+1,255,255,255 ' dessiner le cadre autour du PICTURE 2d_target_is n%+1 2d_pen_color 160,160,160 2d_line 0,0,0,20 2d_line 0,0,106,0 2d_pen_color 105,105,105 2d_line 1,1,1,19 2d_line 1,1,105,1 2d_pen_color 255,255,255 2d_line 0,20,105,20 2d_pen_color 227,227,227 2d_line 1,19,106,19 2d_line 105,1,105,20 cursor_point n%+1
' ALPHA d'affichage de la date alpha n% top n%,y%+2 left n%,x%+5 color n%,255,255,255 cursor_point n%
' créer la fenêtre du sélecteur de date form n%+2 border_hide n%+2 width n%+2,210 height n%+2,115 color n%+2,255,255,255 command_target_is n%+2 hide n%+2 ' image de fond de la fenêtre picture n%+20 width n%+20,width(n%+2) height n%+20,height(n%+2) color n%+20,255,255,255 ' dessiner contour de la fenêtre 2d_target_is n%+20 2d_pen_width 1 2d_fill_off 2d_pen_color 207,207,207 2d_rectangle 0,0,width(n%+2),height(n%+2)
' titre de la fenêtre alpha n%+3 top n%+3,5 left n%+3,4 font_name n%+3,"Arial" font_size n%+3,9 font_bold n%+3 caption n%+3,"CALENDRIER :"
alpha n%+4 top n%+4,5 left n%+4,85 font_name n%+4,"Arial" font_size n%+4,9 font_italic n%+4 caption n%+4,"Choisir une date"
' croix blanche sur fond rouge pour fermer la fenêtre (abandon saisie) picture n%+5 width n%+5,19 height n%+5,19 left n%+5,187 top n%+5,3 color n%+5,199,80,80 2d_target_is n%+5 2d_pen_color 255,255,255 2d_line 6,6,8,6 2d_line 11,6,13,6 2d_line 7,7,9,7 2d_line 10,7,12,7 2d_line 8,8,11,8 2d_point 9,9 2d_line 8,10,11,10 2d_line 7,11,9,11 2d_line 10,11,12,11 2d_line 6,12,8,12 2d_line 11,12,13,12 cursor_point n%+5 ' créer bouton "Valider" button n%+6 top n%+6,71 left n%+6,134 width n%+6,65 height n%+6,25 caption n%+6,"Valider" cursor_point n%+6 ' créer bouton "Aujourd'hui" button n%+7 top n%+7,71 left n%+7,52 width n%+7,65 height n%+7,25 caption n%+7,"Aujourd'hui" cursor_point n%+7 ' créer simili COMBO de sélection du jour picture n%+8 top n%+8,35 left n%+8,10 width n%+8,21 height n%+8,20 color n%+8,255,255,255 2d_target_is n%+8 2d_pen_color 160,160,160 2d_line 0,0,21,0 2d_line 0,0,0,20 2d_pen_color 105,105,105 2d_line 1,1,21,1 2d_line 1,1,1,19 2d_pen_color 227,227,227 2d_line 1,19,21,19 ' dessiner bouton pour afficher la liste des jours picture n%+9 top n%+9,35 left n%+9,31 width n%+9,18 height n%+9,20 2d_target_is n%+9 2d_pen_color 160,160,160 2d_line 0,0,18,0 2d_line 15,3,15,18 2d_line 1,17,16,17 2d_pen_color 105,105,105 2d_line 0,1,17,1 2d_line 16,1,16,19 2d_line 0,18,17,18 2d_pen_color 227,227,227 2d_line 0,2,16,2 2d_line 0,2,0,18 2d_line 0,19,18,19 2d_line 17,1,17,20 2d_pen_color 255,255,255 2d_line 1,3,15,3 2d_line 1,3,1,17 2d_fill_color 240,240,240 2d_pen_color 240,240,240 2d_rectangle 2,4,15,17 2d_pen_color 0,0,0 2d_line 5,9,12,9 2d_line 6,10,11,10 2d_line 7,11,10,11 2d_point 8,12 cursor_point n%+9 ' creer buffer image image n%+10 ' copier modèle du bouton dans le buffer image 2d_image_copy n%+10,0,0,18,20 ' créer la liste des jours create_hide list n%+11 create_show top n%+11,55 left n%+11,10 width n%+11,39 height n%+11,55 color n%+11,255,255,220 for nj% = 1 to 31 jour$ = str$(nj%) if len(jour$) < 2 jour$ = "0" + jour$ end_if item_add n%+11,jour$ next nj% item_select n%+11,date_day
' créer simili COMBO de sélection du mois picture n%+12 top n%+12,35 left n%+12,60 width n%+12,61 height n%+12,20 color n%+12,255,255,255 2d_target_is n%+12 2d_pen_color 160,160,160 2d_line 0,0,61,0 2d_line 0,0,0,20 2d_pen_color 105,105,105 2d_line 1,1,61,1 2d_line 1,1,1,19 2d_pen_color 227,227,227 2d_line 1,19,61,19 ' dessiner bouton pour afficher la liste des mois picture n%+13 top n%+13,35 left n%+13,121 width n%+13,18 height n%+13,20 2d_target_is n%+13 cursor_point n%+13 ' copier modèle du bouton depuis le buffer image 2d_image_paste n%+10,0,0 ' créer la liste des mois create_hide list n%+14 create_show top n%+14,55 left n%+14,60 width n%+14,79 height n%+14,55 color n%+14,255,255,220 item_add n%+14,"janvier" item_add n%+14,"février" item_add n%+14,"mars" item_add n%+14,"avril" item_add n%+14,"mai" item_add n%+14,"juin" item_add n%+14,"juillet" item_add n%+14,"août" item_add n%+14,"septembre" item_add n%+14,"octobre" item_add n%+14,"novembre" item_add n%+14,"décembre"
' créer simili COMBO de sélection de l'année picture n%+15 top n%+15,35 left n%+15,150 width n%+15,31 height n%+15,20 color n%+15,255,255,255 2d_target_is n%+15 2d_pen_color 160,160,160 2d_line 0,0,31,0 2d_line 0,0,0,20 2d_pen_color 105,105,105 2d_line 1,1,31,1 2d_line 1,1,1,19 2d_pen_color 227,227,227 2d_line 1,19,31,19 ' dessiner bouton pour afficher la liste des années picture n%+16 top n%+16,35 left n%+16,181 width n%+16,18 height n%+16,20 2d_target_is n%+16 cursor_point n%+16 ' copier modèle du bouton depuis le buffer image 2d_image_paste n%+10,0,0 ' créer la liste des années create_hide list n%+17 create_show top n%+17,55 left n%+17,150 width n%+17,49 height n%+17,55 color n%+17,255,255,220 for an% = 1900 to 2050 item_add n%+17,an% next an% ' créer l'icone de la poubelle picture n%+18 top n%+18,25 height n%+18,25 width n%+18,25 top n%+18,71 left n%+18,10 color n%+18,240,240,240 cursor_point n%+18 hint n%+18,"Effacer la date" 2d_target_is n%+18 ' dessiner les bordure du PICTURE 2d_pen_color 227,227,227 2d_line 1,1,23,1 2d_line 1,1,1,23 2d_pen_color 160,160,160 2d_line 1,23,24,23 2d_line 23,1,23,24 2d_pen_color 105,105,105 2d_line 0,24,25,24 2d_line 24,0,24,25 ' dessiner la poubelle 2d_pen_color 0,70,0 2d_line 9,5,16,5 2d_point 9,6 2d_point 15,6 2d_line 6,7,19,7 2d_line 5,8,5,10 2d_line 19,8,19,10 2d_line 7,9,7,20 2d_point 8,19 2d_line 8,20,17,20 2d_point 16,19 2d_line 17,9,17,20 2d_line 10,10,10,18 2d_line 14,10,14,18 ' EDIT non visible pour mémoriser le format d'affichage du COMBO_DATE create_hide edit n%+19 create_show text n%+19,str$(formatAffichage%) command_target_is 0
' appel du calendrier on_click n%+1,choisirDate on_click n%,choisirDate
end_sub ' ------------------------------------------------------------------------------ sub selectionnerDate(numObjet%) dim_local mm$, objet%, objetParent%, typeObjet%, formParent%, topComboDate%, leftComboDate%, bordForm%, typeAffichage%
' récupérer le format d'affichage typeAffichage% = text$(numObjet%+19)
' rechercher et désactiver le FORM parent du COMBO-DATE ' calculer la position du COMBO-DATE par rapport à l'écran objet% = numObjet% objetParent% = parent(objet%) if objetParent% = 0 formParent% = 0 else typeObjet% = object_type(objetParent%) while typeObjet% <> 7 topComboDate% = topComboDate% + top(objetParent%) leftComboDate% = leftComboDate% + left(objetParent%) objetParent% = parent(objetParent%) typeObjet% = object_type(objetParent%) if objetParent% < 1 objetParent% = 0 exit_while end_if end_while formParent% = objetParent% end_if
inactive formParent% inactive 0 show numObjet%+2 bordForm% = (width(formParent%) - width_client(formParent%)) / 2 topComboDate% = topComboDate% + top(formParent%) + top(numObjet%+1) + height(numObjet%+1) + height(formParent%) - height_client(formParent%) - bordForm% leftComboDate% = leftComboDate% + left(formParent%) + left(numObjet%+1) + bordForm% left numObjet%+2,leftComboDate% top numObjet%+2,topComboDate%
' changer la forme du curseur de la souris cursor_default numObjet%+1 cursor_default numObjet%
actualiserComboDate(numObjet%)
while 1=1 if clicked(numObjet%+5) = 1 :' croix blanche sur fond rouge (quitter le calendrier) hide numObjet% + 11 hide numObjet% + 14 hide numObjet% + 17 exit_while end_if
if clicked(numObjet% + 9) = 1 :' bouton simili COMBO de sélection du jour if show(numObjet% + 11) = 1 hide numObjet% +11 else hide numObjet% + 14 hide numObjet% + 17 show numObjet% + 11 end_if end_if
if clicked(numObjet% + 13) = 1 :' bouton simili COMBO de sélection du mois if show(numObjet% + 14) = 1 hide numObjet% + 14 else hide numObjet% + 11 hide numObjet% + 17 show numObjet% + 14 end_if end_if
if clicked(numObjet% + 16) = 1 :' bouton simili COMBO de sélection de l'année if show(numObjet% + 17) = 1 hide numObjet% + 17 else hide numObjet% + 11 hide numObjet% + 14 show numObjet% + 17 end_if end_if
if clicked(numObjet% + 11) = 1 :' LIST de sélection du jour print_target_is numObjet%+8 print_locate 4,3 print item_index$(numObjet%+11) hide numObjet%+11 end_if
if clicked(numObjet% + 14) = 1 :' LIST de sélection du mois print_target_is numObjet%+12 print_locate 4,3 print item_index$(numObjet%+14)+string$(15,chr$(32)) hide numObjet%+14 actualiserComboJours(numObjet%) end_if
if clicked(numObjet% + 17) = 1 :' LIST de sélection de l'année print_target_is numObjet%+15 print_locate 4,3 print item_index$(numObjet%+17)+string$(5,chr$(32)) hide numObjet%+17 actualiserComboJours(numObjet%) end_if
if clicked(numObjet% + 18) = 1 :' Icone de la poubelle caption numObjet%,"" exit_while end_if
if clicked(numObjet%+6) = 1 :' bouton "Valider" if typeAffichage% = 0 mm$ = str$(item_index(numObjet%+14)) if len(mm$) < 2 mm$ = "0" + mm$ end_if caption numObjet%,item_index$(numObjet%+11) + "/" + mm$ + "/" + item_index$(numObjet%+17) end_if if typeAffichage% = 1 caption numObjet%,item_index$(numObjet%+11) + " " + item_index$(numObjet%+14) + " " + item_index$(numObjet%+17) end_if exit_while end_if if clicked(numObjet%+7) = 1 :' bouton "Aujourd'hui" afficherDateDuJour(numObjet%) end_if pause 10 end_while
' fermer le calendrier hide numObjet% + 2
' changer la forme du curseur de la souris cursor_point numObjet%+1 cursor_point numObjet%
' activer le FORM parent active 0 active formParent% to_foreground formParent% set_focus formParent% end_sub ' ------------------------------------------------------------------------------ sub actualiserComboDate(numObjet%) dim_local champ$, jj$,mm$, mm1$, aa$, jour%, mois%, annee%, dateInvalide%, bordForm%, affichage%
' pré-remplir les COMBOs avec la date existante dans le champ DATE (ALPHA numObjet%) ' s'il n'a a pas de date, remplir avec la date du jour fournie par l'O.S. dateInvalide% = 0 champ$ = caption$(numObjet%)
if len(champ$) > 9 :' longueur 10 caractères minimum [ex 01/05/2008]
' extraire le jour et vérifier s'il est valide jj$ = left$(champ$,3) if numeric(jj$) = 1 jour% = val(jj$) if jour% < 1 or jour% > 31 dateInvalide% = 1 else print_target_is numObjet%+8 print_locate 4,3 print jj$ item_select numObjet%+11,val(jj$) end_if end_if
' extraire l'année et vérifier si elle est valide aa$ = right$(champ$,4) if numeric(aa$) = 1 annee% = val(aa$) if annee% < 1900 or annee% > 2050 dateInvalide% = 1 else print_target_is numObjet%+15 print_locate 4,3 print aa$ item_select numObjet%+17,val(aa$) - 1899 end_if end_if ' récupérer le format d'affichage affichage% = text$(numObjet%+19) ' extraire le mois et vérifier s'il est valide ' pour le format d'affichage jj/mm/aaaa if affichage% = 0 mm$ = mid$(champ$,4,2) if numeric(mm$) = 1 mois% = val(mm$) if mois% < 1 or mois% > 12 dateInvalide% = 1 else print_target_is numObjet%+12 print_locate 4,3 select mois% case 1 print "janvier" + string$(15,chr$(32)) item_select numObjet%+14,1 case 2 print "février" + string$(15,chr$(32)) item_select numObjet%+14,2 case 3 print "mars" + string$(15,chr$(32)) item_select numObjet%+14,3 case 4 print "avril" + string$(15,chr$(32)) item_select numObjet%+14,4 case 5 print "mai" + string$(15,chr$(32)) item_select numObjet%+14,5 case 6 print "juin" + string$(15,chr$(32)) item_select numObjet%+14,6 case 7 print "juillet" + string$(15,chr$(32)) item_select numObjet%+14,7 case 8 print "août" + string$(15,chr$(32)) item_select numObjet%+14,8 case 9 print "septembre" + string$(15,chr$(32)) item_select numObjet%+14,9 case 10 print "octobre" + string$(15,chr$(32)) item_select numObjet%+14,10 case 11 print "novembre" + string$(15,chr$(32)) item_select numObjet%+14,11 case 12 print "décembre" + string$(15,chr$(32)) item_select numObjet%+14,12 end_select end_if end_if end_if
' pour le format d'affichage comme ceci : "19 janvier 2024" if affichage% = 1 mm$ = mid$(champ$,4,len(champ$)-8 ) mm1$ = mm$ + str$(len(mm$)) if instr("janvier7,février7,mars4,avril5,mai3,juin4,juillet7,août4,septembre9,octobre7,novembre8,décembre8",mm1$) < 1 dateInvalide% = 1 else print_target_is numObjet%+12 print_locate 4,3 print mm$ + string$(15,chr$(32)) if mm$ = "janvier" item_select numObjet%+14,1 else if mm$ = "février" item_select numObjet%+14,2 else if mm$ = "mars" item_select numObjet%+14,3 else if mm$ = "avril" item_select numObjet%+14,4 else if mm$ = "mai" item_select numObjet%+14,5 else if mm$ = "juin" item_select numObjet%+14,6 else if mm$ = "juillet" item_select numObjet%+14,7 else if mm$ = "août" item_select numObjet%+14,8 else if mm$ = "septembre" item_select numObjet%+14,9 else if mm$ = "octobre" item_select numObjet%+14,10 else if mm$ = "novembre" item_select numObjet%+14,11 else if mm$ = "décembre" item_select numObjet%+14,12 end_if end_if end_if end_if end_if end_if end_if end_if end_if end_if end_if end_if end_if end_if else dateInvalide% = 1 end_if
' Préselectionner les COMBOS avec la date de l'O.S. s'il n'y a pas de date valide dans le champ DATE (ALPHA calendrier%) if dateInvalide% = 1 afficherDateDuJour(numObjet%) end_if end_sub ' ------------------------------------------------------------------------------ sub afficherDateDuJour(numObjet%) dim_local mois%, jj$ ' afficher le mois en cours mois% = date_month item_select numObjet%+14,mois% print_target_is numObjet%+12 print_locate 4,3 select mois% case 1 print "janvier" + string$(15,chr$(32)) case 2 print "février" + string$(15,chr$(32)) case 3 print "mars" + string$(15,chr$(32)) case 4 print "avril" + string$(15,chr$(32)) case 5 print "mai" + string$(15,chr$(32)) case 6 print "juin" + string$(15,chr$(32)) case 7 print "juillet" + string$(15,chr$(32)) case 8 print "août" + string$(15,chr$(32)) case 9 print "septembre" + string$(15,chr$(32)) case 10 print "octobre" + string$(15,chr$(32)) case 11 print "novembre" + string$(15,chr$(32)) case 12 print "décembre" + string$(15,chr$(32)) end_select
' afficher l'année print_target_is numObjet%+15 print_locate 4,3 print date_year item_select numObjet%+17,date_year - 1899 ' remplir la liste du Combo avec le nombre de jours possibles en fonction de l'année et du mois actualiserComboJours(numObjet%)
' afficher le jour jj$ = str$(date_day)
if len(jj$) < 2 jj$ = "0" + jj$ end_if
print_target_is numObjet%+8 print_locate 4,3 print jj$ item_select numObjet%+11,val(jj$) end_sub ' ------------------------------------------------------------------------------ sub actualiserComboJours(numObjet%) dim_local jour$, mois$, annee$, jourActif$, an%, bissextile%, nombreJours%, n% ' déterminer si l'année est bissextile annee$ = item_index$(numObjet%+17) an% = val(annee$)
if frac(an%/4) = 0 and frac(an%/100) <> 0 bissextile% = 1 end_if if frac (an%/400) = 0 bissextile% = 1 end_if
' déterminer le nombre de jour en fonction du mois et de l'année si elle est bissextile mois$ = item_index$(numObjet%+14)
if mois$ = "janvier" nombreJours% = 31 else if mois$ = "février" if bissextile% = 0 nombreJours% = 28 else nombreJours% = 29 end_if else if mois$ = "mars" nombreJours% = 31 else if mois$ = "avril" nombreJours% = 30 else if mois$ = "mai" nombreJours% = 31 else if mois$ = "juin" nombreJours% = 30 else if mois$ = "juillet" nombreJours% = 31 else if mois$ = "août" nombreJours% = 31 else if mois$ = "septembre" nombreJours% = 30 else if mois$ = "octobre" nombreJours% = 31 else if mois$ = "novembre" nombreJours% = 30 else if mois$ = "décembre" nombreJours% = 31 end_if end_if end_if end_if end_if end_if end_if end_if end_if end_if end_if end_if
' actualiser la liste du combo JOUR jourActif$ = item_index$(numObjet%+11) clear numObjet%+11
for n% = 1 to nombreJours% jour$ = str$(n%) if len(jour$) < 2 jour$ = "0" + jour$ end_if item_add numObjet%+11,jour$ next n%
if val(jourActif$) > nombreJours% jourActif$ = str$(nombreJours%) end_if
item_select numObjet%+11,val(jourActif$) print_target_is numObjet%+8 print_locate 4,3 print jourActif$ end_sub EDIT du 20/01/2024 : Suite à l'évolution du comboDate, cet article et le code source ont été mis à jour. | |
| | | Marc
Nombre de messages : 2380 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Combo date : sélecteur de date Sam 20 Jan 2024 - 1:54 | |
| Bonjour à tous ! Le comboDate a énormément évolué ! Le post ci-dessus a été entièrement mis à jour. Voici un programme de test. Il est composé de 6 supports pouvant accueillir des comboDate : - la FORM 0 qui comprend un PANEL 1 avec à intérieur de celui-ci un CONTAINER 2 ; - et d’une FORM 3 qui accueille un PANEL 4 avec un CONTAINER 5. Sur chacun de ces 6 supports, j’ai mis un couple mixte de comboDate (un de chaque format d’affichage). Un bouton permet la lecture de tous les comboDate. L’affichage se fait dans le LIST. - Code:
-
' Combo-date - Programme de test ' Marc - Janvier 2024 ' Ecrit en langage PANORAMIC 0.9.29.i9
' Syntaxe : ' comboDate(P1,P2 ,P3,P4,P5) ' P1 = numéro de l'objet sur lequel sera construit le comboDate (FORM, PANEL ou CONTAINER) ' P2 = numéro d'objet attribué au comboDate ' P3 = la position en X ' P4 = la position en Y ' P5 = 0 ou 1 pour le format d'affichage : 0 pour " 19/01/2024 " ; 1 pour " 19 janvier 2024 "
' Un comboDate occupe en interne une largeur de 20 objets ' La lecture d'une date s'effectue via la fonction CAPTION$(numéro du comboDate) => c'est le paramètre P2
label choisirDate, lireDates
' Construction d'une interface utilisateur de test top 0,20 : left 0,20 : width 0,500 : height 0,320 : color 0,240,240,220 : caption 0,"FORM 0" panel 1 : top 1,50 : left 1,20 : width 1,300 : height 1,200 : color 1,255,255,255 container 2 : parent 2,1 : top 2,60 : left 2,55 : color 2,240,255,255 : caption 2,"Container 2" form 3 : width 3,400 : height 3,320 : top 3,60 : left 3,520 : color 3,240,240,255 : caption 3,"FORM 3" panel 4 : parent 4,3 : top 4,50 : left 4,20 : width 4,300 : height 4,200 : color 4,220,220,255 container 5 : parent 5,4 : top 5,60 : left 5,55 : : color 5,200,200,240 : caption 5,"Container 5" list 7 : top 7,50 : left 7,340 : height 7,200 button 8 : top 8,20 : left 8,340 : width 8,120 : caption 8,"Lire les dates" : on_click 8,lireDates
' dans le FORM 0 comboDate(0,100,40,15,0) comboDate(0,130,170,15,1) ' dans le PANEL 1 comboDate(1,160,20,20,1) comboDate(1,190,175,20,0) ' dans le CONTAINER 2 comboDate(2,220,40,25,0) comboDate(2,250,40,70,1) ' dans le FORM 3 comboDate(3,280,40,15,0) comboDate(3,310,170,15,1) ' dans le PANEL 4 comboDate(4,340,20,20,1) comboDate(4,370,175,20,0) ' dans le CONTAINER 5 comboDate(5,400,40,25,0) comboDate(5,430,40,70,1)
end
' ------------------------------------------------------------------------------ lireDates: clear 7 item_add 7,caption$(100) item_add 7,caption$(130) item_add 7,caption$(160) item_add 7,caption$(190) item_add 7,caption$(220) item_add 7,caption$(250) item_add 7,caption$(280) item_add 7,caption$(310) item_add 7,caption$(340) item_add 7,caption$(370) item_add 7,caption$(400) item_add 7,caption$(430) return ' ------------------------------------------------------------------------------ choisirDate: if object_type(number_click) = 9 selectionnerDate(number_click - 1) else selectionnerDate(number_click) end_if return ' ------------------------------------------------------------------------------ sub comboDate(objetParent%,n%,x%,y%,formatAffichage%) dim_local an%, jour$, nj%
' construire le COMBO-DATE sur le FORM ou le PANEL souhaité command_target_is objetParent% ' créer le champ d'affichage de la date sélectionnée picture n%+1 top n%+1,y% left n%+1,x% width n%+1,107 height n%+1,21 color n%+1,255,255,255 ' dessiner le cadre autour du PICTURE 2d_target_is n%+1 2d_pen_color 160,160,160 2d_line 0,0,0,20 2d_line 0,0,106,0 2d_pen_color 105,105,105 2d_line 1,1,1,19 2d_line 1,1,105,1 2d_pen_color 255,255,255 2d_line 0,20,105,20 2d_pen_color 227,227,227 2d_line 1,19,106,19 2d_line 105,1,105,20 cursor_point n%+1
' ALPHA d'affichage de la date alpha n% top n%,y%+2 left n%,x%+5 color n%,255,255,255 cursor_point n%
' créer la fenêtre du sélecteur de date form n%+2 border_hide n%+2 width n%+2,210 height n%+2,115 color n%+2,255,255,255 command_target_is n%+2 hide n%+2 ' image de fond de la fenêtre picture n%+20 width n%+20,width(n%+2) height n%+20,height(n%+2) color n%+20,255,255,255 ' dessiner contour de la fenêtre 2d_target_is n%+20 2d_pen_width 1 2d_fill_off 2d_pen_color 207,207,207 2d_rectangle 0,0,width(n%+2),height(n%+2)
' titre de la fenêtre alpha n%+3 top n%+3,5 left n%+3,4 font_name n%+3,"Arial" font_size n%+3,9 font_bold n%+3 caption n%+3,"CALENDRIER :"
alpha n%+4 top n%+4,5 left n%+4,85 font_name n%+4,"Arial" font_size n%+4,9 font_italic n%+4 caption n%+4,"Choisir une date"
' croix blanche sur fond rouge pour fermer la fenêtre (abandon saisie) picture n%+5 width n%+5,19 height n%+5,19 left n%+5,187 top n%+5,3 color n%+5,199,80,80 2d_target_is n%+5 2d_pen_color 255,255,255 2d_line 6,6,8,6 2d_line 11,6,13,6 2d_line 7,7,9,7 2d_line 10,7,12,7 2d_line 8,8,11,8 2d_point 9,9 2d_line 8,10,11,10 2d_line 7,11,9,11 2d_line 10,11,12,11 2d_line 6,12,8,12 2d_line 11,12,13,12 cursor_point n%+5 ' créer bouton "Valider" button n%+6 top n%+6,71 left n%+6,134 width n%+6,65 height n%+6,25 caption n%+6,"Valider" cursor_point n%+6 ' créer bouton "Aujourd'hui" button n%+7 top n%+7,71 left n%+7,52 width n%+7,65 height n%+7,25 caption n%+7,"Aujourd'hui" cursor_point n%+7 ' créer simili COMBO de sélection du jour picture n%+8 top n%+8,35 left n%+8,10 width n%+8,21 height n%+8,20 color n%+8,255,255,255 2d_target_is n%+8 2d_pen_color 160,160,160 2d_line 0,0,21,0 2d_line 0,0,0,20 2d_pen_color 105,105,105 2d_line 1,1,21,1 2d_line 1,1,1,19 2d_pen_color 227,227,227 2d_line 1,19,21,19 ' dessiner bouton pour afficher la liste des jours picture n%+9 top n%+9,35 left n%+9,31 width n%+9,18 height n%+9,20 2d_target_is n%+9 2d_pen_color 160,160,160 2d_line 0,0,18,0 2d_line 15,3,15,18 2d_line 1,17,16,17 2d_pen_color 105,105,105 2d_line 0,1,17,1 2d_line 16,1,16,19 2d_line 0,18,17,18 2d_pen_color 227,227,227 2d_line 0,2,16,2 2d_line 0,2,0,18 2d_line 0,19,18,19 2d_line 17,1,17,20 2d_pen_color 255,255,255 2d_line 1,3,15,3 2d_line 1,3,1,17 2d_fill_color 240,240,240 2d_pen_color 240,240,240 2d_rectangle 2,4,15,17 2d_pen_color 0,0,0 2d_line 5,9,12,9 2d_line 6,10,11,10 2d_line 7,11,10,11 2d_point 8,12 cursor_point n%+9 ' creer buffer image image n%+10 ' copier modèle du bouton dans le buffer image 2d_image_copy n%+10,0,0,18,20 ' créer la liste des jours create_hide list n%+11 create_show top n%+11,55 left n%+11,10 width n%+11,39 height n%+11,55 color n%+11,255,255,220 for nj% = 1 to 31 jour$ = str$(nj%) if len(jour$) < 2 jour$ = "0" + jour$ end_if item_add n%+11,jour$ next nj% item_select n%+11,date_day
' créer simili COMBO de sélection du mois picture n%+12 top n%+12,35 left n%+12,60 width n%+12,61 height n%+12,20 color n%+12,255,255,255 2d_target_is n%+12 2d_pen_color 160,160,160 2d_line 0,0,61,0 2d_line 0,0,0,20 2d_pen_color 105,105,105 2d_line 1,1,61,1 2d_line 1,1,1,19 2d_pen_color 227,227,227 2d_line 1,19,61,19 ' dessiner bouton pour afficher la liste des mois picture n%+13 top n%+13,35 left n%+13,121 width n%+13,18 height n%+13,20 2d_target_is n%+13 cursor_point n%+13 ' copier modèle du bouton depuis le buffer image 2d_image_paste n%+10,0,0 ' créer la liste des mois create_hide list n%+14 create_show top n%+14,55 left n%+14,60 width n%+14,79 height n%+14,55 color n%+14,255,255,220 item_add n%+14,"janvier" item_add n%+14,"février" item_add n%+14,"mars" item_add n%+14,"avril" item_add n%+14,"mai" item_add n%+14,"juin" item_add n%+14,"juillet" item_add n%+14,"août" item_add n%+14,"septembre" item_add n%+14,"octobre" item_add n%+14,"novembre" item_add n%+14,"décembre"
' créer simili COMBO de sélection de l'année picture n%+15 top n%+15,35 left n%+15,150 width n%+15,31 height n%+15,20 color n%+15,255,255,255 2d_target_is n%+15 2d_pen_color 160,160,160 2d_line 0,0,31,0 2d_line 0,0,0,20 2d_pen_color 105,105,105 2d_line 1,1,31,1 2d_line 1,1,1,19 2d_pen_color 227,227,227 2d_line 1,19,31,19 ' dessiner bouton pour afficher la liste des années picture n%+16 top n%+16,35 left n%+16,181 width n%+16,18 height n%+16,20 2d_target_is n%+16 cursor_point n%+16 ' copier modèle du bouton depuis le buffer image 2d_image_paste n%+10,0,0 ' créer la liste des années create_hide list n%+17 create_show top n%+17,55 left n%+17,150 width n%+17,49 height n%+17,55 color n%+17,255,255,220 for an% = 1900 to 2050 item_add n%+17,an% next an% ' créer l'icone de la poubelle picture n%+18 top n%+18,25 height n%+18,25 width n%+18,25 top n%+18,71 left n%+18,10 color n%+18,240,240,240 cursor_point n%+18 hint n%+18,"Effacer la date" 2d_target_is n%+18 ' dessiner les bordure du PICTURE 2d_pen_color 227,227,227 2d_line 1,1,23,1 2d_line 1,1,1,23 2d_pen_color 160,160,160 2d_line 1,23,24,23 2d_line 23,1,23,24 2d_pen_color 105,105,105 2d_line 0,24,25,24 2d_line 24,0,24,25 ' dessiner la poubelle 2d_pen_color 0,70,0 2d_line 9,5,16,5 2d_point 9,6 2d_point 15,6 2d_line 6,7,19,7 2d_line 5,8,5,10 2d_line 19,8,19,10 2d_line 7,9,7,20 2d_point 8,19 2d_line 8,20,17,20 2d_point 16,19 2d_line 17,9,17,20 2d_line 10,10,10,18 2d_line 14,10,14,18 ' EDIT non visible pour mémoriser le format d'affichage du COMBO_DATE create_hide edit n%+19 create_show text n%+19,str$(formatAffichage%) command_target_is 0
' appel du calendrier on_click n%+1,choisirDate on_click n%,choisirDate
end_sub ' ------------------------------------------------------------------------------ sub selectionnerDate(numObjet%) dim_local mm$, objet%, objetParent%, typeObjet%, formParent%, topComboDate%, leftComboDate%, bordForm%, typeAffichage%
' récupérer le format d'affichage typeAffichage% = text$(numObjet%+19)
' rechercher et désactiver le FORM parent du COMBO-DATE ' calculer la position du COMBO-DATE par rapport à l'écran objet% = numObjet% objetParent% = parent(objet%) if objetParent% = 0 formParent% = 0 else typeObjet% = object_type(objetParent%) while typeObjet% <> 7 topComboDate% = topComboDate% + top(objetParent%) leftComboDate% = leftComboDate% + left(objetParent%) objetParent% = parent(objetParent%) typeObjet% = object_type(objetParent%) if objetParent% < 1 objetParent% = 0 exit_while end_if end_while formParent% = objetParent% end_if
inactive formParent% inactive 0 show numObjet%+2 bordForm% = (width(formParent%) - width_client(formParent%)) / 2 topComboDate% = topComboDate% + top(formParent%) + top(numObjet%+1) + height(numObjet%+1) + height(formParent%) - height_client(formParent%) - bordForm% leftComboDate% = leftComboDate% + left(formParent%) + left(numObjet%+1) + bordForm% left numObjet%+2,leftComboDate% top numObjet%+2,topComboDate%
' changer la forme du curseur de la souris cursor_default numObjet%+1 cursor_default numObjet%
actualiserComboDate(numObjet%)
while 1=1 if clicked(numObjet%+5) = 1 :' croix blanche sur fond rouge (quitter le calendrier) hide numObjet% + 11 hide numObjet% + 14 hide numObjet% + 17 exit_while end_if
if clicked(numObjet% + 9) = 1 :' bouton simili COMBO de sélection du jour if show(numObjet% + 11) = 1 hide numObjet% +11 else hide numObjet% + 14 hide numObjet% + 17 show numObjet% + 11 end_if end_if
if clicked(numObjet% + 13) = 1 :' bouton simili COMBO de sélection du mois if show(numObjet% + 14) = 1 hide numObjet% + 14 else hide numObjet% + 11 hide numObjet% + 17 show numObjet% + 14 end_if end_if
if clicked(numObjet% + 16) = 1 :' bouton simili COMBO de sélection de l'année if show(numObjet% + 17) = 1 hide numObjet% + 17 else hide numObjet% + 11 hide numObjet% + 14 show numObjet% + 17 end_if end_if
if clicked(numObjet% + 11) = 1 :' LIST de sélection du jour print_target_is numObjet%+8 print_locate 4,3 print item_index$(numObjet%+11) hide numObjet%+11 end_if
if clicked(numObjet% + 14) = 1 :' LIST de sélection du mois print_target_is numObjet%+12 print_locate 4,3 print item_index$(numObjet%+14)+string$(15,chr$(32)) hide numObjet%+14 actualiserComboJours(numObjet%) end_if
if clicked(numObjet% + 17) = 1 :' LIST de sélection de l'année print_target_is numObjet%+15 print_locate 4,3 print item_index$(numObjet%+17)+string$(5,chr$(32)) hide numObjet%+17 actualiserComboJours(numObjet%) end_if
if clicked(numObjet% + 18) = 1 :' Icone de la poubelle caption numObjet%,"" exit_while end_if
if clicked(numObjet%+6) = 1 :' bouton "Valider" if typeAffichage% = 0 mm$ = str$(item_index(numObjet%+14)) if len(mm$) < 2 mm$ = "0" + mm$ end_if caption numObjet%,item_index$(numObjet%+11) + "/" + mm$ + "/" + item_index$(numObjet%+17) end_if if typeAffichage% = 1 caption numObjet%,item_index$(numObjet%+11) + " " + item_index$(numObjet%+14) + " " + item_index$(numObjet%+17) end_if exit_while end_if if clicked(numObjet%+7) = 1 :' bouton "Aujourd'hui" afficherDateDuJour(numObjet%) end_if pause 10 end_while
' fermer le calendrier hide numObjet% + 2
' changer la forme du curseur de la souris cursor_point numObjet%+1 cursor_point numObjet%
' activer le FORM parent active 0 active formParent% to_foreground formParent% set_focus formParent% end_sub ' ------------------------------------------------------------------------------ sub actualiserComboDate(numObjet%) dim_local champ$, jj$,mm$, mm1$, aa$, jour%, mois%, annee%, dateInvalide%, bordForm%, affichage%
' pré-remplir les COMBOs avec la date existante dans le champ DATE (ALPHA numObjet%) ' s'il n'a a pas de date, remplir avec la date du jour fournie par l'O.S. dateInvalide% = 0 champ$ = caption$(numObjet%)
if len(champ$) > 9 :' longueur 10 caractères minimum [ex 01/05/2008]
' extraire le jour et vérifier s'il est valide jj$ = left$(champ$,3) if numeric(jj$) = 1 jour% = val(jj$) if jour% < 1 or jour% > 31 dateInvalide% = 1 else print_target_is numObjet%+8 print_locate 4,3 print jj$ item_select numObjet%+11,val(jj$) end_if end_if
' extraire l'année et vérifier si elle est valide aa$ = right$(champ$,4) if numeric(aa$) = 1 annee% = val(aa$) if annee% < 1900 or annee% > 2050 dateInvalide% = 1 else print_target_is numObjet%+15 print_locate 4,3 print aa$ item_select numObjet%+17,val(aa$) - 1899 end_if end_if ' récupérer le format d'affichage affichage% = text$(numObjet%+19) ' extraire le mois et vérifier s'il est valide ' pour le format d'affichage jj/mm/aaaa if affichage% = 0 mm$ = mid$(champ$,4,2) if numeric(mm$) = 1 mois% = val(mm$) if mois% < 1 or mois% > 12 dateInvalide% = 1 else print_target_is numObjet%+12 print_locate 4,3 select mois% case 1 print "janvier" + string$(15,chr$(32)) item_select numObjet%+14,1 case 2 print "février" + string$(15,chr$(32)) item_select numObjet%+14,2 case 3 print "mars" + string$(15,chr$(32)) item_select numObjet%+14,3 case 4 print "avril" + string$(15,chr$(32)) item_select numObjet%+14,4 case 5 print "mai" + string$(15,chr$(32)) item_select numObjet%+14,5 case 6 print "juin" + string$(15,chr$(32)) item_select numObjet%+14,6 case 7 print "juillet" + string$(15,chr$(32)) item_select numObjet%+14,7 case 8 print "août" + string$(15,chr$(32)) item_select numObjet%+14,8 case 9 print "septembre" + string$(15,chr$(32)) item_select numObjet%+14,9 case 10 print "octobre" + string$(15,chr$(32)) item_select numObjet%+14,10 case 11 print "novembre" + string$(15,chr$(32)) item_select numObjet%+14,11 case 12 print "décembre" + string$(15,chr$(32)) item_select numObjet%+14,12 end_select end_if end_if end_if
' pour le format d'affichage comme ceci : "19 janvier 2024" if affichage% = 1 mm$ = mid$(champ$,4,len(champ$)-8 ) mm1$ = mm$ + str$(len(mm$)) if instr("janvier7,février7,mars4,avril5,mai3,juin4,juillet7,août4,septembre9,octobre7,novembre8,décembre8",mm1$) < 1 dateInvalide% = 1 else print_target_is numObjet%+12 print_locate 4,3 print mm$ + string$(15,chr$(32)) if mm$ = "janvier" item_select numObjet%+14,1 else if mm$ = "février" item_select numObjet%+14,2 else if mm$ = "mars" item_select numObjet%+14,3 else if mm$ = "avril" item_select numObjet%+14,4 else if mm$ = "mai" item_select numObjet%+14,5 else if mm$ = "juin" item_select numObjet%+14,6 else if mm$ = "juillet" item_select numObjet%+14,7 else if mm$ = "août" item_select numObjet%+14,8 else if mm$ = "septembre" item_select numObjet%+14,9 else if mm$ = "octobre" item_select numObjet%+14,10 else if mm$ = "novembre" item_select numObjet%+14,11 else if mm$ = "décembre" item_select numObjet%+14,12 end_if end_if end_if end_if end_if end_if end_if end_if end_if end_if end_if end_if end_if end_if else dateInvalide% = 1 end_if
' Préselectionner les COMBOS avec la date de l'O.S. s'il n'y a pas de date valide dans le champ DATE (ALPHA calendrier%) if dateInvalide% = 1 afficherDateDuJour(numObjet%) end_if end_sub ' ------------------------------------------------------------------------------ sub afficherDateDuJour(numObjet%) dim_local mois%, jj$ ' afficher le mois en cours mois% = date_month item_select numObjet%+14,mois% print_target_is numObjet%+12 print_locate 4,3 select mois% case 1 print "janvier" + string$(15,chr$(32)) case 2 print "février" + string$(15,chr$(32)) case 3 print "mars" + string$(15,chr$(32)) case 4 print "avril" + string$(15,chr$(32)) case 5 print "mai" + string$(15,chr$(32)) case 6 print "juin" + string$(15,chr$(32)) case 7 print "juillet" + string$(15,chr$(32)) case 8 print "août" + string$(15,chr$(32)) case 9 print "septembre" + string$(15,chr$(32)) case 10 print "octobre" + string$(15,chr$(32)) case 11 print "novembre" + string$(15,chr$(32)) case 12 print "décembre" + string$(15,chr$(32)) end_select
' afficher l'année print_target_is numObjet%+15 print_locate 4,3 print date_year item_select numObjet%+17,date_year - 1899 ' remplir la liste du Combo avec le nombre de jours possibles en fonction de l'année et du mois actualiserComboJours(numObjet%)
' afficher le jour jj$ = str$(date_day)
if len(jj$) < 2 jj$ = "0" + jj$ end_if
print_target_is numObjet%+8 print_locate 4,3 print jj$ item_select numObjet%+11,val(jj$) end_sub ' ------------------------------------------------------------------------------ sub actualiserComboJours(numObjet%) dim_local jour$, mois$, annee$, jourActif$, an%, bissextile%, nombreJours%, n% ' déterminer si l'année est bissextile annee$ = item_index$(numObjet%+17) an% = val(annee$)
if frac(an%/4) = 0 and frac(an%/100) <> 0 bissextile% = 1 end_if if frac (an%/400) = 0 bissextile% = 1 end_if
' déterminer le nombre de jour en fonction du mois et de l'année si elle est bissextile mois$ = item_index$(numObjet%+14)
if mois$ = "janvier" nombreJours% = 31 else if mois$ = "février" if bissextile% = 0 nombreJours% = 28 else nombreJours% = 29 end_if else if mois$ = "mars" nombreJours% = 31 else if mois$ = "avril" nombreJours% = 30 else if mois$ = "mai" nombreJours% = 31 else if mois$ = "juin" nombreJours% = 30 else if mois$ = "juillet" nombreJours% = 31 else if mois$ = "août" nombreJours% = 31 else if mois$ = "septembre" nombreJours% = 30 else if mois$ = "octobre" nombreJours% = 31 else if mois$ = "novembre" nombreJours% = 30 else if mois$ = "décembre" nombreJours% = 31 end_if end_if end_if end_if end_if end_if end_if end_if end_if end_if end_if end_if
' actualiser la liste du combo JOUR jourActif$ = item_index$(numObjet%+11) clear numObjet%+11
for n% = 1 to nombreJours% jour$ = str$(n%) if len(jour$) < 2 jour$ = "0" + jour$ end_if item_add numObjet%+11,jour$ next n%
if val(jourActif$) > nombreJours% jourActif$ = str$(nombreJours%) end_if
item_select numObjet%+11,val(jourActif$) print_target_is numObjet%+8 print_locate 4,3 print jourActif$ end_sub Bonne programmation à tous ! | |
| | | jjn4
Nombre de messages : 2690 Date d'inscription : 13/09/2009
| Sujet: Re: Combo date : sélecteur de date Sam 20 Jan 2024 - 17:17 | |
| Joli ! Très utile pour des programmes comptables ou administratifs ! Bravo Marc ! | |
| | | Contenu sponsorisé
| Sujet: Re: Combo date : sélecteur de date | |
| |
| | | | Combo date : sélecteur de date | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |