FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» trop de fichiers en cours
Combo date : sélecteur de date Emptypar Marc Aujourd'hui à 11:42

» Bataille navale SM
Combo date : sélecteur de date Emptypar jjn4 Hier à 17:39

» Une calculatrice en une ligne de programme
Combo date : sélecteur de date Emptypar jean_debord Hier à 8:01

» Gestion d'un système client-serveur.
Combo date : sélecteur de date Emptypar Pedro Jeu 25 Avr 2024 - 19:31

» Les maths du crocodile
Combo date : sélecteur de date Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Combo date : sélecteur de date Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Combo date : sélecteur de date Emptypar Froggy One Mer 24 Avr 2024 - 18:38

» Dessine-moi une galaxie
Combo date : sélecteur de date Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Combo date : sélecteur de date Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Combo date : sélecteur de date Emptypar papydall Dim 21 Avr 2024 - 23:30

» Form
Combo date : sélecteur de date Emptypar leclode Dim 21 Avr 2024 - 18:09

» 2D_fill_color(résolu)
Combo date : sélecteur de date Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Combo date : sélecteur de date Emptypar leclode Mer 17 Avr 2024 - 11:07

» on_key_down (résolu)
Combo date : sélecteur de date Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
Combo date : sélecteur de date Emptypar jjn4 Jeu 4 Avr 2024 - 14:42

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Avril 2024
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
2930     
CalendrierCalendrier
Le Deal du moment :
Cartes Pokémon 151 : où trouver le ...
Voir le deal

 

 Combo date : sélecteur de date

Aller en bas 
2 participants
AuteurMessage
Marc

Marc


Nombre de messages : 2380
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Combo date : sélecteur de date Empty
MessageSujet: Combo date : sélecteur de date   Combo date : sélecteur de date EmptyVen 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 ».

Combo date : sélecteur de date Combod11


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 choisirDate

Aucune 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.
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2380
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Combo date : sélecteur de date Empty
MessageSujet: Re: Combo date : sélecteur de date   Combo date : sélecteur de date EmptySam 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

Combo date : sélecteur de date Combod13


Bonne programmation à tous !
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2690
Date d'inscription : 13/09/2009

Combo date : sélecteur de date Empty
MessageSujet: Re: Combo date : sélecteur de date   Combo date : sélecteur de date EmptySam 20 Jan 2024 - 17:17

Joli !
Très utile pour des programmes comptables ou administratifs !
Bravo Marc !
cheers
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Contenu sponsorisé





Combo date : sélecteur de date Empty
MessageSujet: Re: Combo date : sélecteur de date   Combo date : sélecteur de date Empty

Revenir en haut Aller en bas
 
Combo date : sélecteur de date
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Ne cherchez plus vos couleurs grace à ma petite palette!
» Date <-> Date julienne
» Un sélecteur de dossiers 100 % Panoramic
» Sélecteur de chemin pour création d'un nouveau dossier
» Sélecteur graphique de caractères Unicode avec export

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: