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
» Logiciel de planétarium.
Utilitaire de saisie d'une date - Page 3 Emptypar Pedro Aujourd'hui à 8:08

» Un autre pense-bête...
Utilitaire de saisie d'une date - Page 3 Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Utilitaire de saisie d'une date - Page 3 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Utilitaire de saisie d'une date - Page 3 Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Utilitaire de saisie d'une date - Page 3 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Utilitaire de saisie d'une date - Page 3 Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Utilitaire de saisie d'une date - Page 3 Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Utilitaire de saisie d'une date - Page 3 Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Utilitaire de saisie d'une date - Page 3 Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Utilitaire de saisie d'une date - Page 3 Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Utilitaire de saisie d'une date - Page 3 Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Utilitaire de saisie d'une date - Page 3 Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Utilitaire de saisie d'une date - Page 3 Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Utilitaire de saisie d'une date - Page 3 Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Utilitaire de saisie d'une date - Page 3 Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le deal à ne pas rater :
SSD interne Crucial BX500 2,5″ SATA – 500 Go à 29,99€
29.99 €
Voir le deal

 

 Utilitaire de saisie d'une date

Aller en bas 
+3
Jicehel
Klaus
Jean Claude
7 participants
Aller à la page : Précédent  1, 2, 3, 4  Suivant
AuteurMessage
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyDim 27 Mai 2012 - 21:01

Citation :
Une question : pourquoi afficher les combo avec 1 pixel de décalage les uns des autres ?
??? Regarde bien: les 4 combos 1028, 1029, 1030 et 1031 sont affichés exactement à la même position. Ce qui change, c'est leur numéro qui est 1000 + le nombre de jours dans le mois...

Pour tes remarques concernant la programmation: ce sont des idées intéressantes. Le modulo est facile à mettre en oeuvre, et le résultat est fonctionnellement identique à ce que j'ai fait. C'est une affaire de goût, de style de programmation. Pour l'adaptation automatique des mois, c'est un peu plus complexe: il faut mettre en place le même mécanisme que pour les jours: 2 combos différents en fonction du numéro du jour saisi: un combo avec les 12 mois tant que le numéro du jour est inférieur à 29, et un combo avec les mois de 31 jours si le jour est 31. Mais on ne peut pas aller plus loin. Est-ce que ça vaut la peine ?
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyDim 27 Mai 2012 - 21:28

@Klaus,

Grace à l'affichage du résultat dans caption 0 j'ai compris comment attribuer des variables si besoin. (je n'ai pas l'habitude d'utiliser text$(N) directement comme variable.)

Je n'arrive pas (même en jouant l'utilisateur vicieux, pervers, ....) à planter ton programme.

Là encore je m’aperçois que tu gères les évènements d'une manière différente de la mienne; ou plus exactement je ne gère pas comme toi. Maintenant je commence à comprendre certaine de mes difficultés avec Panoramic.
Dans ton code avant END, il n'y a pas de goto ou de gosub, juste un on_click (parce qu'il faut bien démarrer le programme). Et c'est bien là mon erreur de jugement par rapport aux évènements.

Ce qui est remarquable dans ta méthode, c'est que l'utilisateur peut commencer par n'importe quel bout (jour, mois , année) çà ne perturbe en rien la correction automatique (si besoin) ou un remplissage des combos correct en cas de saisie en premier par le mois ou l'année.

Pour soutenir Ambroise, je dirais que quelques messages pour avertir l'utilisateur que la date a été réajustée automatiquement par le programme serait les biens-venus, mais bon c'est simple de le faire.

Autre chose: pour le programmeur tu as prévus le remplissage des combo mois et jour par 2 chiffres....
Aussi: on économise 3 alphas en affichant dans les objets la sasie attendue.

Je m'incline,

Au bout du compte, je te décerne le prix "Jean Claude" du meilleurs code de saisie d'une date.

Simple, sans erreur, libre d'utilisation pour l'utilisateur, et intuitif.

Bravo.



EDIT: on s'est croisé, mais cela ne change rien pour moi.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyDim 27 Mai 2012 - 21:40

Mille merci pour ton appréciation détaillée, Jean-Claude ! J'apprécie ces commentaires, surtout venant de quelqu'un d'aussi rompu que toi, à la programmation et l'analyse du code des autres.

Une autre piste possible: gérer la date par des scroll_bar dont les valeurs maxi seraient le nombre de jours selon les 4 cas, et le nombre de mois. Ca pourrait être sympa aussi. Il y a plein de méthodes différentes !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyLun 28 Mai 2012 - 8:20

Heu... rompu à la programmation, là tu y vas fort. Analyser le code des autres, là tu es plus dans la vrai Very Happy

Ce qui compte, c'est que sur ce sujet, entre toi, Ambroise, Bignono, JL35, Pappydal, Jicehel, Cosmos, j'ai appris.

A+
Revenir en haut Aller en bas
ambroise




Nombre de messages : 264
Localisation : Haute-Savoie
Date d'inscription : 29/04/2012

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyLun 28 Mai 2012 - 9:36

Klaus a écrit:

??? Regarde bien: les 4 combos 1028, 1029, 1030 et 1031 sont affichés exactement à la même position.
Je m'interroge avec toi sur ma propre question... Je ne sais pas où j'ai vu un décalage d'un pixel ? J'en conclus que je ne dois pas programmer pendant la digestion ! Il ne me reste plus guère de temps dans la journée pour programmer l'esprit clair... Exclamation
Revenir en haut Aller en bas
http://genealogie.cwebh.org/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyLun 28 Mai 2012 - 9:55

Eh oui, je connais ça...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyLun 28 Mai 2012 - 10:22

J'ai fait une version dans laquelle le module de saisie de date est encapsulé dans une form qui est déclenchée par un bouton.
Code:
' saisie de date par Klaus

label saisir
dim date_saisie$

button 1 : top 1,10 : left 1,10 : width 1,150
  caption 1,"Saisir une date" : on_click 1,saisir
alpha 2 : top 2,40 : left 2,10

' form de saisie de date
form 1000 : hide 1000 : command_target_is 1000
  height 1000,90 : width 1000,330
  top 1000,200 : left 1000,300
  caption 1000,"Saisir une date"
 
' déclarations pour le module "date"
label ch_mois, val_date, ann_date, bissextile
dim i%, nj%, j_mois%(12), s$, a%, f%
data 31,29,31,30,31,30,31,31,30,31,30,31
for i%=1 to 12
  read j_mois%(i%)
next i%
on_close 1000,ann_date
 
' pour 31 jours
nj% = 31
combo 1031 : top 1031,10 : left 1031,10 : width 1031,50
 text 1031,"Jour"
 for i%=1 to 31
  item_add 1031,str$(i%)  : ' jour sur 1 ou 2 chiffres
'  item_add 1031,right$("0"+str$(i%),2)  : ' jour sur 2 chiffres
 next i%

' pour 30 jours
combo 1030 : hide 1030 : top 1030,10 : left 1030,10 : width 1030,50
 text 1030,"Jour"
 for i%=1 to 30
  item_add 1030,str$(i%)  : ' jour sur 1 ou 2 chiffres
'  item_add 1030,right$("0"+str$(i%),2)  : ' jour sur 2 chiffres
 next i%

' pour 29 jours
combo 1029 : hide 1029 : top 1029,10 : left 1029,10 : width 1029,50
 text 1029,"Jour"
 for i%=1 to 29
  item_add 1029,str$(i%)  : ' jour sur 1 ou 2 chiffres
'  item_add 1029,right$("0"+str$(i%),2)  : ' jour sur 2 chiffres
 next i%

' pour 28 jours
combo 1028 : hide 1028 : top 1028,10 : left 1028,10 : width 1028,50
 text 1028,"Jour"
 for i%=1 to 28
  item_add 1028,str$(i%)  : ' jour sur 1 ou 2 chiffres
'  item_add 1028,right$("0"+str$(i%),2)  : ' jour sur 2 chiffres
 next i%

' pour le mois
combo 1012 : top 1012,10 : left 1012,70 : width 1012,50
 text 1012,"Mois" : on_click 1012,ch_mois
 for i%=1 to 12
  item_add 1012,str$(i%)  : ' mois sur 1 ou 2 chiffres
'  item_add 1012,right$("0"+str$(i%),2)  : ' moisr sur 2 chiffres
 next i%

' pour l'année
edit 1099 : top 1099,10 : left 1099,130 : width 1099,40
  text 1099,"Année"

' pour valider
button 1010 : top 1010,10 : left 1010,200 : caption 1010,"Valider"
  on_click 1010,val_date

' pour annuler
button 1011 : top 1011,10 : left 1011,200 : caption 1011,"Annuler"
  on_click 1011,ann_date

 end

ch_mois:
  off_click 1012
  s$ = text$(1012)
  if numeric(s$)=0
    text 1012,"Mois"
  else
    if val(s$)<1
      text 1012,"1"
    else
      if val(s$)>12 then text 1012,"12"
    end_if
  end_if
  s$ = text$(1012)
  i% = j_mois%(val(s$))
  if i%<>nj%
    s$ = text$(1000+nj%)
    if numeric(s$)=1
      if val(s$)>i% then s$ = str$(i%)
    end_if
    text 1000+i%,s$
    show 1000+i%
    hide 1000+nj%
    nj% = i%
  end_if
  on_click 1012,ch_mois
  return

val_date:
  if numeric(text$(1099))=0
    text 1099,"Année"
    set_focus 1099
    return
  end_if
  if text$(1012)="2" then gosub bissextile  : ' mois sur 1 ou 2 chiffres
'  if text$(1012)="02" then gosub bissextile  : ' mois sur 2 chiffres
  date_saisie$ = "Date saisie: "+text$(1000+nj%)+"/"+text$(1012)+"/"+text$(1099)
  caption 2,date_saisie$
  hide 1000
  active 0
  to_foreground 0
  return
 
ann_date:
  date_saisie$ = ""
  caption 2,date_saisie$
  hide 1000
  active 0
  to_foreground 0
  return
  hide 1000
  active 0
  to_foreground 0
  return

bissextile:
  f% = 0
  if numeric(text$(1099))=0
    f% = 1
  else
' ici, on détermine si c'est une année bissextile
    a% = val(text$(1099))
    if a%-int(a%/4)*4=0 then f% = 1
    if a%-int(a%/400)*400=0 then f% = 0
' fin de contrôle d'année bissextile:  f%=1 si c'est vrai
  end_if
  if f%=0
    if text$(1000+nj%)="29"
      text 1028,"28"
    else
      text 1028,text$(1000+nj%)
    end_if
    show 1028
    hide 1000+nj%
    nj% = 28
  else
    if val(text$(1000+nj%))>29
      text 1029,"29"
    else
      text 1029,text$(1000+nj%)
    end_if
    show 1029
    if nj%<>29 then hide 1000+nj%
    nj% = 29
  end_if
  return

saisir:
  date_saisie$ = ""
  show 1000
  inactive 0
  return
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyLun 28 Mai 2012 - 10:25

Il y a aussi le "calendrier Pop-Up" que j'ai publié sur mon site depuis longtemps. Voici le source:
Code:
rem **********************************************************************
rem *                                                                    *
rem *  calendrier_bas  -  programme de test pour un calendrier popup  *
rem *                                                                    *
rem *  ce programme inclut en un seul morceau tous les modules          *
rem *  qui peuvent être inclus par la directive #INCLUDE                *
rem *                                                                    *
rem **********************************************************************

rem #include "calendrier_labels.inc"
rem **********************************************************************
rem *                                                                    *
rem *    #INCLUDE "calendrier_labels.inc"                                *
rem *                                                                    *
rem **********************************************************************

label show_calendrier, show_resultat
label calendrier_dessiner, calendrier_redessiner
label calendrier_prec, calendrier_suiv, calendrier_seldate
label calendrier_abort, calendrier_cejour, calendrier_OK

rem **********************************************************************
rem *                                                                    *
rem *    fin #INCLUDE "calendrier_labels.inc"                            *
rem *                                                                    *
rem **********************************************************************

rem #include "dateadd_labels_labels.inc"
rem **********************************************************************
rem *                                                                    *
rem *    #INCLUDE "dateadd_labels.inc"                                  *
rem *                                                                    *
rem **********************************************************************

label dateadd_jj, dateadd_mm, dateadd_aaaa
label dateadd_eclate, dateadd_fusionne, dateadd_fin_de_mois
label dateadd_fevrier

rem **********************************************************************
rem *                                                                    *
rem *    fin #INCLUDE "dateadd_labels.inc"                              *
rem *                                                                    *
rem **********************************************************************

rem #include "jour_de_semaine_labels.inc"
rem **********************************************************************
rem *                                                                    *
rem *    #INCLUDE "jour_de_semaine_labels.inc"                          *
rem *                                                                    *
rem **********************************************************************

label jour_de_semaine

rem **********************************************************************
rem *                                                                    *
rem *    fin #INCLUDE "jour_de_semaine_labels.inc"                      *
rem *                                                                    *
rem **********************************************************************

rem #include "calendrier_declarations.inc"
rem **********************************************************************
rem *                                                                    *
rem *    #INCLUDE "calendrier_declarations.inc"                          *
rem *                                                                    *
rem **********************************************************************

dim calendrier_visible%, calendrier_resultat$
dim calendrier_cible%, calendrier_objet_calendrier%
dim calendrier_objet_form%
dim calendrier_decalage%, calendrier_modifie%
dim calendrier_date$

rem **********************************************************************
rem *                                                                    *
rem *    fin #INCLUDE "calendrier_declarations.inc"                      *
rem *                                                                    *
rem **********************************************************************


rem #include "jour_de_semaine_declarations.inc"
rem **********************************************************************
rem *                                                                    *
rem *    #INCLUDE "jour_de_la_demaine_declarations.inc"                  *
rem *                                                                    *
rem *    Calcul du jour de la semaine                                    *
rem *                                                                    *
rem *    Cette routine calcule le jour de la semaine à partir d'une      *
rem *    date en format jj/mm/aaaa.                                      *
rem *                                                                    *
rem *    Appel:                                                          *
rem *        gosub jour_de_semaine                                      *
rem *                                                                    *
rem *    Paramètre en entrée:                                            *
rem *        jour_de_semaine_date$                                      *
rem *                                                                    *
rem *    Paramètres en sortie:                                          *
rem *        jour_de_semaine_numero%                                    *
rem *        jour_de_semaine_text$                                      *
rem *                                                                    *
rem *    Installation:                                                  *
rem *        Copier les déclarations au début du programme, et le code  *
rem *        à la fin du programme dans lequel on veut l'utiliser        *
rem *                                                                    *
rem *    Utilisation:                                                    *
rem *      jour_de_semaine_date$ = "16/05/2010"                          *
rem *      gosub jour_de_semaine                                        *
rem *      message str$(jour_de_semaine_numero%) + " = " + jour_de_semaine_text$
rem *                                                                    *
rem **********************************************************************

dim jour_de_semaine_date$, jour_de_semaine_numero%, jour_de_semaine_text$
dim jour_de_semaine_j%, jour_de_semaine_m%, jour_de_semaine_a%
dim jour_de_semaine_m1%, jour_de_semaine_a1%, jour_de_semaine_ns%
dim jour_de_semaine_as%, jour_de_semaine_f%

rem **********************************************************************
rem *                                                                    *
rem *  fin #INCLUDE jour_de_semaine_declarations.inc                    *
rem *                                                                    *
rem **********************************************************************


rem #include "dateadd_declarations.inc"
rem ****************************************************************
rem *                                                              *
rem *    #INCLUDE "dateadd_declarations.inc"                      *
rem *                                                              *
rem *      dateadd - simulation de la fonction dateadd de VB      *
rem *                                                              *
rem *    Cette routine a 3 points d'entrée:                        *
rem *          dateadd_jj    additionner des jours à une date    *
rem *          dateadd_mm    additionner des mois à une date    *
rem *          dateadd_aaaa  additionner des années à une date  *
rem *                                                              *
rem *    En entrée, 2 variables sont à charger:                    *
rem *          dateadd_date$  la date à modifier (en "jj/mm/aaa") *
rem *          dateadd_delta% la fraction à ajouter ou à retirer  *
rem *              data_add_delta%<0:  retirer                    *
rem *              data_add_delta%>0:  ajouter                    *
rem *                                                              *
rem *    En sortie, 1 variable est à consulter:                    *
rem *          dateadd_date$  la date résultante                  *
rem *                                                              *
rem *    Installation:                                            *
rem *          copier simplement ce module dans le source, en    *
rem *          plaçant les déclarations au début et la            *
rem *          partie code à la fin du source                    *
rem *                                                              *
rem ****************************************************************

dim dateadd_date$, dateadd_delta%
dim dateadd_jj%, dateadd_mm%, dateadd_aaaa%, dateadd_jours%(12)

rem ****************************************************************
rem *                                                              *
rem *  fin #INCLUDE dateadd_declarations.inc                      *
rem *                                                              *
rem ****************************************************************

rem ****************************************************************
rem *                                                              *
rem *  Programme de test calendrier.bas principal                *
rem *                                                              *
rem ****************************************************************

calendrier_visible% = 0
button 10
caption 10,"Calendrier"
top 10,250
left 10,100
on_click 10,show_calendrier
button 11
caption 11,"Résultat ?"
top 11,300
left 11,100
on_click 11,show_resultat
end

show_calendrier:
    if calendrier_visible%=0
        calendrier_date$ = date$
        calendrier_visible% = 1
        gosub calendrier_dessiner
        show calendrier_objet_form%
      active calendrier_objet_form%
        inactive 0
    else
        show calendrier_objet_form%
        active calendrier_objet_form%
        if calendrier_visible%=2 then calendrier_visible% = 1
        inactive 0
    end_if
 return

show_resultat:
    if calendrier_resultat$=""
        message "Aucune date n'a été choisie !"
    else
        message "La date choisie est le " + calendrier_resultat$
    end_if
    return

rem #include "dateadd_procedure.inc"
rem ****************************************************************
rem *                                                              *
rem *  #INCLUDE dateadd_procedure.inc                            *
rem *                                                              *
rem *      dateadd - simulation de la fonction dateadd de VB      *
rem *                                                              *
rem *    Cette routine a 3 points d'entrée:                        *
rem *          dateadd_jj    additionner des jours à une date    *
rem *          dateadd_mm    additionner des mois à une date    *
rem *          dateadd_aaaa  additionner des années à une date  *
rem *                                                              *
rem *    En entrée, 2 variables sont à charger:                    *
rem *          dateadd_date$  la date à modifier (en "jj/mm/aaa") *
rem *          dateadd_delta% la fraction à ajouter ou à retirer  *
rem *              data_add_delta%<0:  retirer                    *
rem *              data_add_delta%>0:  ajouter                    *
rem *                                                              *
rem *    En sortie, 1 variable est à consulter:                    *
rem *          dateadd_date$  la date résultante                  *
rem *                                                              *
rem *    Installation:                                            *
rem *          copier simplement ce module dans le source, en    *
rem *          plaçant les déclarations au début et la            *
rem *          partie code à la fin du source                    *
rem *                                                              *
rem ****************************************************************

dateadd_eclate:
    dateadd_jj% = val(left$(dateadd_date$,2))
    dateadd_mm% = val(mid$(dateadd_date$,4,2))
    dateadd_aaaa% = val(right$(dateadd_date$,4))
    return

dateadd_fusionne:
    dateadd_date$ = str$(dateadd_mm%) + "/" + str$(dateadd_aaaa%)
    if dateadd_mm%<10 then dateadd_date$ = "0" + dateadd_date$
    dateadd_date$ = str$(dateadd_jj%) + "/" + dateadd_date$
    if dateadd_jj%<10 then dateadd_date$ = "0" + dateadd_date$
    return

dateadd_fin_de_mois:
    dateadd_jours%(1)=31
    dateadd_jours%(2)=28
    dateadd_jours%(3)=31
    dateadd_jours%(4)=30
    dateadd_jours%(5)=31
    dateadd_jours%(6)=30
    dateadd_jours%(7)=31
    dateadd_jours%(8)=31
    dateadd_jours%(9)=30
    dateadd_jours%(10)=31
    dateadd_jours%(11)=30
    dateadd_jours%(12)=31
    return

dateadd_fevrier:
    if dateadd_mm%=2
        if dateadd_aaaa%=int(dateadd_aaaa%/4)*4 then dateadd_jours%(2) = 29
    end_if
    return

 dateadd_aaaa:
    gosub dateadd_eclate
    dateadd_aaaa% = dateadd_aaaa% + dateadd_delta%
    gosub dateadd_fusionne
    return

 dateadd_mm:
    gosub dateadd_eclate
    gosub dateadd_fin_de_mois
    dateadd_mm% = dateadd_mm% + dateadd_delta%
    if dateadd_mm%<1
        while dateadd_mm%<1
            dateadd_aaaa% = dateadd_aaaa% - 1
            dateadd_mm% = dateadd_mm% + 12
        end_while
    else
        while dateadd_mm%>12
            dateadd_aaaa% = dateadd_aaaa% + 1
            dateadd_mm% = dateadd_mm% - 12
        end_while
    end_if
    if dateadd_jj%>dateadd_jours%(dateadd_mm%) then dateadd_jj% = dateadd_jours%(dateadd_mm%)
    gosub dateadd_fusionne
    return

 dateadd_jj:
    gosub dateadd_eclate
    gosub dateadd_fin_de_mois
    dateadd_jj% = dateadd_jj% + dateadd_delta%
    if dateadd_jj%<1
        while dateadd_jj%<1
            dateadd_mm% = dateadd_mm% - 1
            if dateadd_mm%<1
                dateadd_mm% = 12
                dateadd_aaaa% = dateadd_aaaa% - 1
            end_if
            gosub dateadd_fevrier
            dateadd_jj% = dateadd_jj% + dateadd_jours%(dateadd_mm%)
        end_while
    else
        while dateadd_jj%>dateadd_jours%(dateadd_mm%)
            gosub dateadd_fevrier
            dateadd_jj% = dateadd_jj% - dateadd_jours%(dateadd_mm%)
            dateadd_mm% = dateadd_mm% + 1
            if dateadd_mm%>12
                dateadd_mm% = 1
                dateadd_aaaa% = dateadd_aaaa% + 1
            end_if
        end_while
    end_if
    gosub dateadd_fusionne
    return

rem #include "jour_de_semaine_procedure.inc"
rem **********************************************************************
rem *                                                                    *
rem *  #INCLUDE jour_de_semaine_procedure.inc                          *
rem *                                                                    *
rem *    Début de la partie "code" à copier à la fin du source          *
rem *                                                                    *
rem **********************************************************************

jour_de_semaine:
    jour_de_semaine_j% = val(left$(jour_de_semaine_date$,2))
    jour_de_semaine_m% = val(mid$(jour_de_semaine_date$,4,2))
    jour_de_semaine_a% = val(right$(jour_de_semaine_date$,4))

    if jour_de_semaine_m%<3
        jour_de_semaine_m1% = jour_de_semaine_m% + 10
        jour_de_semaine_a1% = jour_de_semaine_a% - 1
    else
        jour_de_semaine_m1% = jour_de_semaine_m% - 2
        jour_de_semaine_a1% = jour_de_semaine_a%
    end_if

    jour_de_semaine_ns% = int(jour_de_semaine_a1%/100)

    jour_de_semaine_as% = jour_de_semaine_a1% - jour_de_semaine_ns%*100

    jour_de_semaine_f% = jour_de_semaine_j% + jour_de_semaine_as% + int(jour_de_semaine_as%/4) - 2* jour_de_semaine_ns% + int(jour_de_semaine_ns%/4) + int((26*jour_de_semaine_m1%-2)/10)

    jour_de_semaine_numero% = jour_de_semaine_f% - int(jour_de_semaine_f%/7)*7

    select jour_de_semaine_numero%
        case 0: jour_de_semaine_text$ = "Dimanche"
        case 1: jour_de_semaine_text$ = "Lundi"
        case 2: jour_de_semaine_text$ = "Mardi"
        case 3: jour_de_semaine_text$ = "Mercredi"
        case 4: jour_de_semaine_text$ = "Jeudi"
        case 5: jour_de_semaine_text$ = "Vendredi"
        case 6: jour_de_semaine_text$ = "Samedi"
    end_select

return
rem ****************************************************************
rem *                                                              *
rem *  fin #INCLUDE jour_de_semaine_procedure.inc                *
rem *                                                              *
rem ****************************************************************


rem #include "calendrier_procedure.inc"
rem **********************************************************************
rem *                                                                    *
rem *  #INCLUDE calendrier_procedure.inc                          *
rem *                                                                    *
rem *    Début de la partie "code" à copier à la fin du source          *
rem *                                                                    *
rem **********************************************************************

rem ************************************************************************
rem *                                                                      *
rem * routines on_click du calendrier                                      *
rem *                                                                      *
rem ************************************************************************

calendrier_prec:
    dateadd_date$ = calendrier_date$
    dateadd_delta% = -1
    gosub dateadd_mm
    calendrier_date$ = dateadd_date$
    goto calendrier_redessiner

calendrier_suiv:
    dateadd_date$ = calendrier_date$
    dateadd_delta% = 1
    gosub dateadd_mm
    calendrier_date$ = dateadd_date$
    goto calendrier_redessiner

calendrier_abort:
    hide calendrier_objet_form%
    calendrier_visible%=2
    inactive calendrier_objet_form%
    calendrier_resultat$ = ""
    active 0
    to_foreground 0
    return

calendrier_cejour:
    calendrier_date$ = date$
    goto calendrier_redessiner

calendrier_OK:
    hide calendrier_objet_form%
    calendrier_visible%=2
    inactive calendrier_objet_form%
    calendrier_resultat$ = calendrier_date$
    active 0
    to_foreground 0
    return

calendrier_seldate:
    calendrier_j% = mouse_x_left_down(calendrier_objet_calendrier%)
    calendrier_i% = mouse_y_left_down(calendrier_objet_calendrier%)
    calendrier_j% = int((calendrier_j%  + 33)/34)
    calendrier_i% = int((calendrier_i%  + 23)/24) - 2
    if calendrier_i%<1 then return
    dateadd_delta% = ((calendrier_i%-1)*7 + calendrier_j%) - ((calendrier_jlig%-1)*7 + calendrier_jcol%)
    dateadd_date$ = calendrier_date$
    gosub dateadd_jj
    calendrier_date$ = dateadd_date$
    goto calendrier_redessiner

rem ************************************************************************
rem *                                                                      *
rem * routines de service du calendrier                                    *
rem *                                                                      *
rem ************************************************************************

calendrier_dessiner:

    calendrier_objet_form% = 1000
    calendrier_objet_calendrier% = 1001
    form calendrier_objet_form%
    command_target_is calendrier_objet_form%
    border_hide calendrier_objet_form%
    hide calendrier_objet_form%
    border_hide calendrier_objet_form%
    top calendrier_objet_form%,200
    left calendrier_objet_form%,200
    width calendrier_objet_form%, 248
    height calendrier_objet_form%, 243
    picture calendrier_objet_calendrier%
    width calendrier_objet_calendrier%, 238
    height calendrier_objet_calendrier%, 216
    caption calendrier_objet_form% , "Calendrier"
    on_click calendrier_objet_calendrier%, calendrier_seldate

    dim calendrier_i%, calendrier_j%, calendrier_k%,
    dim calendrier_baseh%, calendrier_basev%, calendrier_basec%
    dim calendrier_debut_mois$
    dim calendrier_jour2%
    dim calendrier_jour1%, calendrier_jours_prec%, calendrier_delta%, calendrier_jlig%, calendrier_jcol%
    dim calendrier_color_cadre%(2), calendrier_color_texte%(2), calendrier_color_fond_text%(2)
    dim calendrier_color_fond_jours%(2), calendrier_color_du_jour%(2)
    dim calendrier_color_jours%(2), calendrier_color_fond_texte%(2), calendrier_color_hors%(2)
    dim calendrier_mois$(12), calendrier_jmois%(12)

    calendrier_color_cadre%(0) = 24
    calendrier_color_cadre%(1) = 95
    calendrier_color_cadre%(2) = 214
    calendrier_color_texte%(0) = 255
    calendrier_color_texte%(1) = 255
    calendrier_color_texte%(2) = 255
    calendrier_color_jours%(0) = 0
    calendrier_color_jours%(1) = 0
    calendrier_color_jours%(2) = 0
    calendrier_color_fond_jours%(0) = 82
    calendrier_color_fond_jours%(1) = 162
    calendrier_color_fond_jours%(2) = 255
    calendrier_color_fond_texte%(0) = 49
    calendrier_color_fond_texte%(1) = 109
    calendrier_color_fond_texte%(2) = 239
    calendrier_color_du_jour%(0) = 255
    calendrier_color_du_jour%(1) = 255
    calendrier_color_du_jour%(2) = 0
    calendrier_color_hors%(0) = 207
    calendrier_color_hors%(1) = 207
    calendrier_color_hors%(2) = 207

    calendrier_mois$(1) = "Janvier"
    calendrier_mois$(2) = "Février"
    calendrier_mois$(3) = "Mars"
    calendrier_mois$(4) = "Avril"
    calendrier_mois$(5) = "Mai"
    calendrier_mois$(6) = "Juin"
    calendrier_mois$(7) = "Juillet"
    calendrier_mois$(8) = "Août"
    calendrier_mois$(9) = "Septembre"
    calendrier_mois$(10) = "Octobre"
    calendrier_mois$(11) = "Novembre"
    calendrier_mois$(12) = "Décembre"
    calendrier_jmois%(1) = 31
    calendrier_jmois%(2) = 28
    calendrier_jmois%(3) = 31
    calendrier_jmois%(4) = 30
    calendrier_jmois%(5) = 31
    calendrier_jmois%(6) = 30
    calendrier_jmois%(7) = 31
    calendrier_jmois%(8) = 31
    calendrier_jmois%(9) = 30
    calendrier_jmois%(10) = 31
    calendrier_jmois%(11) = 30
    calendrier_jmois%(12) = 31

    button calendrier_objet_calendrier%+1
    left calendrier_objet_calendrier%+1, 2
    top calendrier_objet_calendrier%+1, 2
    width calendrier_objet_calendrier%+1, 30
    height calendrier_objet_calendrier%+1,20
    caption calendrier_objet_calendrier%+1,"<"
    on_click calendrier_objet_calendrier%+1,calendrier_prec

    button calendrier_objet_calendrier%+2
    left calendrier_objet_calendrier%+2, 204+2
    top calendrier_objet_calendrier%+2, 2
    width calendrier_objet_calendrier%+2, 30
    height calendrier_objet_calendrier%+2,20
    caption calendrier_objet_calendrier%+2, ">"
    on_click calendrier_objet_calendrier%+2,calendrier_suiv

    button calendrier_objet_calendrier%+3
    left calendrier_objet_calendrier%+3, 2
    top calendrier_objet_calendrier%+3,192+2
    width calendrier_objet_calendrier%+3, 66
    height calendrier_objet_calendrier%+3,20
    caption calendrier_objet_calendrier%+3,"Abandon"
    on_click calendrier_objet_calendrier%+3,calendrier_abort

    button calendrier_objet_calendrier%+4
    left calendrier_objet_calendrier%+4, 68+2
    top calendrier_objet_calendrier%+4,192+2
    width calendrier_objet_calendrier%+4, 100
    height calendrier_objet_calendrier%+4,20
    caption calendrier_objet_calendrier%+4,"Aujourd'hui"
    on_click calendrier_objet_calendrier%+4,calendrier_cejour

    button calendrier_objet_calendrier%+5
    left calendrier_objet_calendrier%+5, 170+2
    top calendrier_objet_calendrier%+5,192+2
    width calendrier_objet_calendrier%+5, 66
    height calendrier_objet_calendrier%+5,20
    caption calendrier_objet_calendrier%+5,"OK"
    on_click calendrier_objet_calendrier%+5,calendrier_OK

calendrier_redessiner:

    cls
    calendrier_resultat$ = ""

    calendrier_baseh% = 0
    calendrier_basev% = 0
    calendrier_basec% = 10

    2d_target_is calendrier_objet_calendrier%
    print_target_is calendrier_objet_calendrier%

' barre de commande
    2d_pen_color calendrier_color_cadre%(0), calendrier_color_cadre%(1), calendrier_color_cadre%(2)
    2d_fill_color calendrier_color_cadre%(0), calendrier_color_cadre%(1), calendrier_color_cadre%(2)
    2d_rectangle calendrier_baseh%, calendrier_basev%, calendrier_baseh% + 238, calendrier_basev% + 24
' bouton "mois précédent"
    2d_fill_color calendrier_color_fond_jours%(0), calendrier_color_fond_jours%(1), calendrier_color_fond_jours%(2)
    2d_rectangle calendrier_baseh%+1, calendrier_basev%+1, calendrier_baseh% + 32, calendrier_basev% + 22
' champs "nom du mois"
    2d_rectangle calendrier_baseh%+34+1, calendrier_basev%+1, calendrier_baseh% + 202, calendrier_basev% + 22
' bouton "mois suivant"
    2d_rectangle calendrier_baseh%+204+1, calendrier_basev%+1, calendrier_baseh% + 238, calendrier_basev% + 22

' cases des jours
    calendrier_basev% = 24
    For calendrier_j% = 1 To 7
        calendrier_baseh% = 0
        For calendrier_i% = 1 To 7
            2d_fill_color calendrier_color_fond_jours%(0), calendrier_color_fond_jours%(1), calendrier_color_fond_jours%(2)
            2d_rectangle calendrier_baseh%, calendrier_basev%, calendrier_baseh% + 34, calendrier_basev% + 24
            If calendrier_j% = 1
                2d_fill_color calendrier_color_fond_jours%(0), calendrier_color_fond_jours%(1), calendrier_color_fond_jours%(2)
            End_If
            2d_rectangle calendrier_baseh%+1, calendrier_basev%+1, calendrier_baseh% + 32, calendrier_basev% + 22
            calendrier_baseh% = calendrier_baseh% + 34
        Next calendrier_i%
        calendrier_basev% = calendrier_basev% + 24
    Next calendrier_j%
 ' cadre autour des boutons en bas de la form
    2d_rectangle 0,192,238,216

' calculer le positionnement des chiffres dans le tableau
    dateadd_delta% = 1 - val(left$(calendrier_date$,2))
    dateadd_date$ = calendrier_date$
    gosub dateadd_jj
    calendrier_debut_mois$= dateadd_date$
    jour_de_semaine_date$ = calendrier_debut_mois$
    gosub jour_de_semaine
    calendrier_decalage% = jour_de_semaine_numero%
    If calendrier_decalage% = 1
        calendrier_decalage% = 8
    End_If

    dateadd_date$ = calendrier_date$
    dateadd_delta% = -1
    gosub dateadd_mm
    calendrier_jour1% = 0
    calendrier_jour1% = calendrier_jmois%(val(mid$(dateadd_date$,4,2)))
    calendrier_jours_prec% = calendrier_jmois%(val(mid$(dateadd_date$,4,2)))
    calendrier_i% = calendrier_decalage% - 1
    calendrier_jlig% = Int((val(left$(calendrier_date$,2)) + calendrier_i% + 6) / 7)
    calendrier_jcol% = val(left$(calendrier_date$,2)) + calendrier_i% - (calendrier_jlig% - 1) * 7

' faire les libellés des boutons de commande
    font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2)
    calendrier_basev% = 4
    print_locate 10,calendrier_basev%
    print "<"
    print_locate 214,calendrier_basev%
    print ">"
    2d_rectangle calendrier_baseh%+34+1, calendrier_basev%+1, calendrier_baseh% + 202, calendrier_basev% + 22
    print_locate 80,calendrier_basev%
    font_color calendrier_objet_calendrier%,calendrier_color_texte%(0), calendrier_color_texte%(1), calendrier_color_texte%(2)
    print calendrier_mois$(val(mid$(calendrier_date$,4,2))) + " " + right$(calendrier_date$,4)
    font_color calendrier_objet_calendrier%, calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2)
    calendrier_basev% = 28

' afficher les libellés des jours de semaine
    print_locate 10,calendrier_basev%
    print "Lu"
    print_locate 44,calendrier_basev%
    print "Ma"
    print_locate 78,calendrier_basev%
    print "Me"
    print_locate 112,calendrier_basev%
    print "Je"
    print_locate 146,calendrier_basev%
    print "Ve"
    print_locate 180,calendrier_basev%
    print "Sa"
    print_locate 214,calendrier_basev%
    print "Di"

' calculer le décalage du premier du mois
    calendrier_delta% = 0
    calendrier_jour2% = 1 - calendrier_decalage%
    If calendrier_decalage% > 1
        font_color calendrier_objet_calendrier%,calendrier_color_hors%(0), calendrier_color_hors%(1), calendrier_color_hors%(2)
    Else
        font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2)
        calendrier_jour2% = 1
    End_If

' affichier les numéros des jours
    For calendrier_i% = 1 To 6
        For calendrier_j% = 1 To 7
            If calendrier_jour2% < 0
                font_color calendrier_objet_calendrier%, calendrier_color_hors%(0), calendrier_color_hors%(1), calendrier_color_hors%(2)
                print_locate 4 + (calendrier_j% - 1) * 34,calendrier_basev% + calendrier_i% * 24
                print calendrier_jours_prec% + calendrier_jour2% + 1
                calendrier_jour2% = calendrier_jour2% + 1
                If calendrier_jour2% = 0
                    font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2)
                    calendrier_jour2% = calendrier_jour2% + 1
                End_If
            Else
                If calendrier_jour2% > calendrier_jmois%(val(mid$(calendrier_date$,4,2)))
                    font_color calendrier_objet_calendrier%,calendrier_color_hors%(0), calendrier_color_hors%(1), calendrier_color_hors%(2)
                    calendrier_delta% = calendrier_jmois%(val(mid$(calendrier_date$,4,2)))
                End_If
                print_locate 4 + (calendrier_j% - 1) * 34, calendrier_basev% + calendrier_i% * 24
                If calendrier_jlig% = calendrier_i% And calendrier_jcol% = calendrier_j%
                    font_color calendrier_objet_calendrier%,calendrier_color_du_jour%(0), calendrier_color_du_jour%(1), calendrier_color_du_jour%(2)
                End_If
                Print str$(calendrier_jour2% - calendrier_delta%)
                If calendrier_jlig% = calendrier_i% And calendrier_jcol% = calendrier_j%
                    font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2)
                End_If
                calendrier_jour2% = calendrier_jour2% + 1
            End_If
        Next calendrier_j%
    Next calendrier_i%

    return

rem ****************************************************************
rem *                                                              *
rem *  fin #INCLUDE calendrier_procedure.inc                      *
rem *                                                              *
rem ****************************************************************
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
ambroise




Nombre de messages : 264
Localisation : Haute-Savoie
Date d'inscription : 29/04/2012

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyLun 28 Mai 2012 - 10:42

Klaus a écrit:
Eh oui, je connais ça...

Ca me rassure...

Question : dans mon formulaire, j'ai trois edit date (date du contrat / date de naissance du contractant 1 / date de naissance du contractant 2 ). Est-il possible de contrôler ces entrées par le même sous-programme (verif_date: ) ou me faut-il répéter 3 sous-programmes identiques à la différence près du numéro de l'edit référencé dans ces sous-programmes ? Le numéro de l'edit mis en argument au lancement du sous-programme me faciliterait bien les choses...
Revenir en haut Aller en bas
http://genealogie.cwebh.org/index.html
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyLun 28 Mai 2012 - 11:40

@Ambroise, je n'ai pas ton code, mais à priori une routine est faite pour être utilisée chaque fois qu'on en a besoin. Si tu prends l'exemple de Klaus, avec la routine dans un FORM, il te suffit d'avoir 3 boutons pour tes 3 saisies, (date du contrat / date de naissance du contractant 1 / date de naissance du contractant 2 ).
Tu peux aussi remplacer les boutons par des alphas que tu utilises une première fois pour lancer la routine, tu récupères tes variables et tu te sert de l'alpha pour l'affiche du résultat.

@Klaus, le calendrier popup, c'est pas mal non plus. Mais attention car celui que tu as mis en ligne n'a pas de29/02/2012 confused
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyLun 28 Mai 2012 - 11:56

Exactt ! Je vais regarder cela.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyLun 28 Mai 2012 - 12:25

Voici la correction du calendrier pop-up:
Code:
rem **********************************************************************
rem *                                                                    *
rem *  calendrier_bas  -  programme de test pour un calendrier popup    *
rem *                                                                    *
rem *  ce programme inclut en un seul morceau tous les modules          *
rem *  qui peuvent être inclus par la directive #INCLUDE                *
rem *                                                                    *
rem **********************************************************************

rem #include "calendrier_labels.inc"
rem **********************************************************************
rem *                                                                    *
rem *    #INCLUDE "calendrier_labels.inc"                                *
rem *                                                                    *
rem **********************************************************************

label show_calendrier, show_resultat
label calendrier_dessiner, calendrier_redessiner
label calendrier_prec, calendrier_suiv, calendrier_seldate
label calendrier_abort, calendrier_cejour, calendrier_OK

rem **********************************************************************
rem *                                                                    *
rem *    fin #INCLUDE "calendrier_labels.inc"                            *
rem *                                                                    *
rem **********************************************************************

rem #include "dateadd_labels_labels.inc"
rem **********************************************************************
rem *                                                                    *
rem *    #INCLUDE "dateadd_labels.inc"                                  *
rem *                                                                    *
rem **********************************************************************

label dateadd_jj, dateadd_mm, dateadd_aaaa
label dateadd_eclate, dateadd_fusionne, dateadd_fin_de_mois
label dateadd_fevrier

rem **********************************************************************
rem *                                                                    *
rem *    fin #INCLUDE "dateadd_labels.inc"                              *
rem *                                                                    *
rem **********************************************************************

rem #include "jour_de_semaine_labels.inc"
rem **********************************************************************
rem *                                                                    *
rem *    #INCLUDE "jour_de_semaine_labels.inc"                          *
rem *                                                                    *
rem **********************************************************************

label jour_de_semaine

rem **********************************************************************
rem *                                                                    *
rem *    fin #INCLUDE "jour_de_semaine_labels.inc"                      *
rem *                                                                    *
rem **********************************************************************

rem #include "calendrier_declarations.inc"
rem **********************************************************************
rem *                                                                    *
rem *    #INCLUDE "calendrier_declarations.inc"                          *
rem *                                                                    *
rem **********************************************************************

dim calendrier_visible%, calendrier_resultat$
dim calendrier_cible%, calendrier_objet_calendrier%
dim calendrier_objet_form%
dim calendrier_decalage%, calendrier_modifie%
dim calendrier_date$

rem **********************************************************************
rem *                                                                    *
rem *    fin #INCLUDE "calendrier_declarations.inc"                      *
rem *                                                                    *
rem **********************************************************************


rem #include "jour_de_semaine_declarations.inc"
rem **********************************************************************
rem *                                                                    *
rem *    #INCLUDE "jour_de_la_demaine_declarations.inc"                  *
rem *                                                                    *
rem *    Calcul du jour de la semaine                                    *
rem *                                                                    *
rem *    Cette routine calcule le jour de la semaine à partir d'une      *
rem *    date en format jj/mm/aaaa.                                      *
rem *                                                                    *
rem *    Appel:                                                          *
rem *        gosub jour_de_semaine                                      *
rem *                                                                    *
rem *    Paramètre en entrée:                                            *
rem *        jour_de_semaine_date$                                      *
rem *                                                                    *
rem *    Paramètres en sortie:                                          *
rem *        jour_de_semaine_numero%                                    *
rem *        jour_de_semaine_text$                                      *
rem *                                                                    *
rem *    Installation:                                                  *
rem *        Copier les déclarations au début du programme, et le code  *
rem *        à la fin du programme dans lequel on veut l'utiliser        *
rem *                                                                    *
rem *    Utilisation:                                                    *
rem *      jour_de_semaine_date$ = "16/05/2010"                          *
rem *      gosub jour_de_semaine                                        *
rem *      message str$(jour_de_semaine_numero%) + " = " + jour_de_semaine_text$
rem *                                                                    *
rem **********************************************************************

dim jour_de_semaine_date$, jour_de_semaine_numero%, jour_de_semaine_text$
dim jour_de_semaine_j%, jour_de_semaine_m%, jour_de_semaine_a%
dim jour_de_semaine_m1%, jour_de_semaine_a1%, jour_de_semaine_ns%
dim jour_de_semaine_as%, jour_de_semaine_f%

rem **********************************************************************
rem *                                                                    *
rem *  fin #INCLUDE jour_de_semaine_declarations.inc                    *
rem *                                                                    *
rem **********************************************************************


rem #include "dateadd_declarations.inc"
rem ****************************************************************
rem *                                                              *
rem *    #INCLUDE "dateadd_declarations.inc"                      *
rem *                                                              *
rem *      dateadd - simulation de la fonction dateadd de VB      *
rem *                                                              *
rem *    Cette routine a 3 points d'entrée:                        *
rem *          dateadd_jj    additionner des jours à une date    *
rem *          dateadd_mm    additionner des mois à une date    *
rem *          dateadd_aaaa  additionner des années à une date  *
rem *                                                              *
rem *    En entrée, 2 variables sont à charger:                    *
rem *          dateadd_date$  la date à modifier (en "jj/mm/aaa") *
rem *          dateadd_delta% la fraction à ajouter ou à retirer  *
rem *              data_add_delta%<0:  retirer                    *
rem *              data_add_delta%>0:  ajouter                    *
rem *                                                              *
rem *    En sortie, 1 variable est à consulter:                    *
rem *          dateadd_date$  la date résultante                  *
rem *                                                              *
rem *    Installation:                                            *
rem *          copier simplement ce module dans le source, en    *
rem *          plaçant les déclarations au début et la            *
rem *          partie code à la fin du source                    *
rem *                                                              *
rem ****************************************************************

dim dateadd_date$, dateadd_delta%
dim dateadd_jj%, dateadd_mm%, dateadd_aaaa%, dateadd_jours%(12)

rem ****************************************************************
rem *                                                              *
rem *  fin #INCLUDE dateadd_declarations.inc                      *
rem *                                                              *
rem ****************************************************************

rem ****************************************************************
rem *                                                              *
rem *  Programme de test calendrier.bas principal                *
rem *                                                              *
rem ****************************************************************

calendrier_visible% = 0
button 10
caption 10,"Calendrier"
top 10,250
left 10,100
on_click 10,show_calendrier
button 11
caption 11,"Résultat ?"
top 11,300
left 11,100
on_click 11,show_resultat
end

show_calendrier:
    if calendrier_visible%=0
        calendrier_date$ = date$
        calendrier_visible% = 1
        gosub calendrier_dessiner
        show calendrier_objet_form%
      active calendrier_objet_form%
        inactive 0
    else
        show calendrier_objet_form%
        active calendrier_objet_form%
        if calendrier_visible%=2 then calendrier_visible% = 1
        inactive 0
    end_if
 return

show_resultat:
    if calendrier_resultat$=""
        message "Aucune date n'a été choisie !"
    else
        message "La date choisie est le " + calendrier_resultat$
    end_if
    return

rem #include "dateadd_procedure.inc"
rem ****************************************************************
rem *                                                              *
rem *  #INCLUDE dateadd_procedure.inc                            *
rem *                                                              *
rem *      dateadd - simulation de la fonction dateadd de VB      *
rem *                                                              *
rem *    Cette routine a 3 points d'entrée:                        *
rem *          dateadd_jj    additionner des jours à une date    *
rem *          dateadd_mm    additionner des mois à une date    *
rem *          dateadd_aaaa  additionner des années à une date  *
rem *                                                              *
rem *    En entrée, 2 variables sont à charger:                    *
rem *          dateadd_date$  la date à modifier (en "jj/mm/aaa") *
rem *          dateadd_delta% la fraction à ajouter ou à retirer  *
rem *              data_add_delta%<0:  retirer                    *
rem *              data_add_delta%>0:  ajouter                    *
rem *                                                              *
rem *    En sortie, 1 variable est à consulter:                    *
rem *          dateadd_date$  la date résultante                  *
rem *                                                              *
rem *    Installation:                                            *
rem *          copier simplement ce module dans le source, en    *
rem *          plaçant les déclarations au début et la            *
rem *          partie code à la fin du source                    *
rem *                                                              *
rem ****************************************************************

dateadd_eclate:
    dateadd_jj% = val(left$(dateadd_date$,2))
    dateadd_mm% = val(mid$(dateadd_date$,4,2))
    dateadd_aaaa% = val(right$(dateadd_date$,4))
    return

dateadd_fusionne:
    dateadd_date$ = str$(dateadd_mm%) + "/" + str$(dateadd_aaaa%)
    if dateadd_mm%<10 then dateadd_date$ = "0" + dateadd_date$
    dateadd_date$ = str$(dateadd_jj%) + "/" + dateadd_date$
    if dateadd_jj%<10 then dateadd_date$ = "0" + dateadd_date$
    return

dateadd_fin_de_mois:
    dateadd_jours%(1)=31
    dateadd_jours%(2)=28
    dateadd_jours%(3)=31
    dateadd_jours%(4)=30
    dateadd_jours%(5)=31
    dateadd_jours%(6)=30
    dateadd_jours%(7)=31
    dateadd_jours%(8)=31
    dateadd_jours%(9)=30
    dateadd_jours%(10)=31
    dateadd_jours%(11)=30
    dateadd_jours%(12)=31
    if dateadd_mm%=2
      dateadd_jours%(2) = 28
      if dateadd_aaaa%-int(dateadd_aaaa%/4)*4=0
        if dateadd_aaaa%-int(dateadd_aaaa%/400)*400>0
          dateadd_jours%(2) = 29
        end_if
      end_if
    end_if
    return

dateadd_fevrier:
    if dateadd_mm%=2
        if dateadd_aaaa%=int(dateadd_aaaa%/4)*4 then dateadd_jours%(2) = 29
    end_if
    return

 dateadd_aaaa:
    gosub dateadd_eclate
    dateadd_aaaa% = dateadd_aaaa% + dateadd_delta%
    gosub dateadd_fusionne
    return

 dateadd_mm:
    gosub dateadd_eclate
    gosub dateadd_fin_de_mois
    dateadd_mm% = dateadd_mm% + dateadd_delta%
    if dateadd_mm%<1
        while dateadd_mm%<1
            dateadd_aaaa% = dateadd_aaaa% - 1
            dateadd_mm% = dateadd_mm% + 12
        end_while
    else
        while dateadd_mm%>12
            dateadd_aaaa% = dateadd_aaaa% + 1
            dateadd_mm% = dateadd_mm% - 12
        end_while
    end_if
    if dateadd_jj%>dateadd_jours%(dateadd_mm%) then dateadd_jj% = dateadd_jours%(dateadd_mm%)
    gosub dateadd_fusionne
    return

 dateadd_jj:
    gosub dateadd_eclate
    gosub dateadd_fin_de_mois
    dateadd_jj% = dateadd_jj% + dateadd_delta%
    if dateadd_jj%<1
        while dateadd_jj%<1
            dateadd_mm% = dateadd_mm% - 1
            if dateadd_mm%<1
                dateadd_mm% = 12
                dateadd_aaaa% = dateadd_aaaa% - 1
            end_if
            gosub dateadd_fevrier
            dateadd_jj% = dateadd_jj% + dateadd_jours%(dateadd_mm%)
        end_while
    else
        while dateadd_jj%>dateadd_jours%(dateadd_mm%)
            gosub dateadd_fevrier
            dateadd_jj% = dateadd_jj% - dateadd_jours%(dateadd_mm%)
            dateadd_mm% = dateadd_mm% + 1
            if dateadd_mm%>12
                dateadd_mm% = 1
                dateadd_aaaa% = dateadd_aaaa% + 1
            end_if
        end_while
    end_if
    gosub dateadd_fusionne
    return

rem #include "jour_de_semaine_procedure.inc"
rem **********************************************************************
rem *                                                                    *
rem *  #INCLUDE jour_de_semaine_procedure.inc                          *
rem *                                                                    *
rem *    Début de la partie "code" à copier à la fin du source          *
rem *                                                                    *
rem **********************************************************************

jour_de_semaine:
    jour_de_semaine_j% = val(left$(jour_de_semaine_date$,2))
    jour_de_semaine_m% = val(mid$(jour_de_semaine_date$,4,2))
    jour_de_semaine_a% = val(right$(jour_de_semaine_date$,4))

    if jour_de_semaine_m%<3
        jour_de_semaine_m1% = jour_de_semaine_m% + 10
        jour_de_semaine_a1% = jour_de_semaine_a% - 1
    else
        jour_de_semaine_m1% = jour_de_semaine_m% - 2
        jour_de_semaine_a1% = jour_de_semaine_a%
    end_if

    jour_de_semaine_ns% = int(jour_de_semaine_a1%/100)

    jour_de_semaine_as% = jour_de_semaine_a1% - jour_de_semaine_ns%*100

    jour_de_semaine_f% = jour_de_semaine_j% + jour_de_semaine_as% + int(jour_de_semaine_as%/4) - 2* jour_de_semaine_ns% + int(jour_de_semaine_ns%/4) + int((26*jour_de_semaine_m1%-2)/10)

    jour_de_semaine_numero% = jour_de_semaine_f% - int(jour_de_semaine_f%/7)*7

    select jour_de_semaine_numero%
        case 0: jour_de_semaine_text$ = "Dimanche"
        case 1: jour_de_semaine_text$ = "Lundi"
        case 2: jour_de_semaine_text$ = "Mardi"
        case 3: jour_de_semaine_text$ = "Mercredi"
        case 4: jour_de_semaine_text$ = "Jeudi"
        case 5: jour_de_semaine_text$ = "Vendredi"
        case 6: jour_de_semaine_text$ = "Samedi"
    end_select

return
rem ****************************************************************
rem *                                                              *
rem *  fin #INCLUDE jour_de_semaine_procedure.inc                *
rem *                                                              *
rem ****************************************************************


rem #include "calendrier_procedure.inc"
rem **********************************************************************
rem *                                                                    *
rem *  #INCLUDE calendrier_procedure.inc                          *
rem *                                                                    *
rem *    Début de la partie "code" à copier à la fin du source          *
rem *                                                                    *
rem **********************************************************************

rem ************************************************************************
rem *                                                                      *
rem * routines on_click du calendrier                                      *
rem *                                                                      *
rem ************************************************************************

calendrier_prec:
    dateadd_date$ = calendrier_date$
    dateadd_delta% = -1
    gosub dateadd_mm
    calendrier_date$ = dateadd_date$
    goto calendrier_redessiner

calendrier_suiv:
    dateadd_date$ = calendrier_date$
    dateadd_delta% = 1
    gosub dateadd_mm
    calendrier_date$ = dateadd_date$
    goto calendrier_redessiner

calendrier_abort:
    hide calendrier_objet_form%
    calendrier_visible%=2
    inactive calendrier_objet_form%
    calendrier_resultat$ = ""
    active 0
    to_foreground 0
    return

calendrier_cejour:
    calendrier_date$ = date$
    goto calendrier_redessiner

calendrier_OK:
    hide calendrier_objet_form%
    calendrier_visible%=2
    inactive calendrier_objet_form%
    calendrier_resultat$ = calendrier_date$
    active 0
    to_foreground 0
    return

calendrier_seldate:
    calendrier_j% = mouse_x_left_down(calendrier_objet_calendrier%)
    calendrier_i% = mouse_y_left_down(calendrier_objet_calendrier%)
    calendrier_j% = int((calendrier_j%  + 33)/34)
    calendrier_i% = int((calendrier_i%  + 23)/24) - 2
    if calendrier_i%<1 then return
    dateadd_delta% = ((calendrier_i%-1)*7 + calendrier_j%) - ((calendrier_jlig%-1)*7 + calendrier_jcol%)
    dateadd_date$ = calendrier_date$
    gosub dateadd_jj
    calendrier_date$ = dateadd_date$
    goto calendrier_redessiner

rem ************************************************************************
rem *                                                                      *
rem * routines de service du calendrier                                    *
rem *                                                                      *
rem ************************************************************************

calendrier_dessiner:

    calendrier_objet_form% = 1000
    calendrier_objet_calendrier% = 1001
    form calendrier_objet_form%
    command_target_is calendrier_objet_form%
    border_hide calendrier_objet_form%
    hide calendrier_objet_form%
    border_hide calendrier_objet_form%
    top calendrier_objet_form%,200
    left calendrier_objet_form%,200
    width calendrier_objet_form%, 248
    height calendrier_objet_form%, 243
    picture calendrier_objet_calendrier%
    width calendrier_objet_calendrier%, 238
    height calendrier_objet_calendrier%, 216
    caption calendrier_objet_form% , "Calendrier"
    on_click calendrier_objet_calendrier%, calendrier_seldate

    dim calendrier_i%, calendrier_j%, calendrier_k%,
    dim calendrier_baseh%, calendrier_basev%, calendrier_basec%
    dim calendrier_debut_mois$
    dim calendrier_jour2%
    dim calendrier_jour1%, calendrier_jours_prec%, calendrier_delta%, calendrier_jlig%, calendrier_jcol%
    dim calendrier_color_cadre%(2), calendrier_color_texte%(2), calendrier_color_fond_text%(2)
    dim calendrier_color_fond_jours%(2), calendrier_color_du_jour%(2)
    dim calendrier_color_jours%(2), calendrier_color_fond_texte%(2), calendrier_color_hors%(2)
    dim calendrier_mois$(12), calendrier_jmois%(12)

    calendrier_color_cadre%(0) = 24
    calendrier_color_cadre%(1) = 95
    calendrier_color_cadre%(2) = 214
    calendrier_color_texte%(0) = 255
    calendrier_color_texte%(1) = 255
    calendrier_color_texte%(2) = 255
    calendrier_color_jours%(0) = 0
    calendrier_color_jours%(1) = 0
    calendrier_color_jours%(2) = 0
    calendrier_color_fond_jours%(0) = 82
    calendrier_color_fond_jours%(1) = 162
    calendrier_color_fond_jours%(2) = 255
    calendrier_color_fond_texte%(0) = 49
    calendrier_color_fond_texte%(1) = 109
    calendrier_color_fond_texte%(2) = 239
    calendrier_color_du_jour%(0) = 255
    calendrier_color_du_jour%(1) = 255
    calendrier_color_du_jour%(2) = 0
    calendrier_color_hors%(0) = 207
    calendrier_color_hors%(1) = 207
    calendrier_color_hors%(2) = 207

    calendrier_mois$(1) = "Janvier"
    calendrier_mois$(2) = "Février"
    calendrier_mois$(3) = "Mars"
    calendrier_mois$(4) = "Avril"
    calendrier_mois$(5) = "Mai"
    calendrier_mois$(6) = "Juin"
    calendrier_mois$(7) = "Juillet"
    calendrier_mois$(8) = "Août"
    calendrier_mois$(9) = "Septembre"
    calendrier_mois$(10) = "Octobre"
    calendrier_mois$(11) = "Novembre"
    calendrier_mois$(12) = "Décembre"
    calendrier_jmois%(1) = 31
    calendrier_jmois%(2) = 28
    calendrier_jmois%(3) = 31
    calendrier_jmois%(4) = 30
    calendrier_jmois%(5) = 31
    calendrier_jmois%(6) = 30
    calendrier_jmois%(7) = 31
    calendrier_jmois%(8) = 31
    calendrier_jmois%(9) = 30
    calendrier_jmois%(10) = 31
    calendrier_jmois%(11) = 30
    calendrier_jmois%(12) = 31

    if val(mid$(calendrier_date$,4,2))=2
      calendrier_jmois%(2) = 28
      if val(mid$(calendrier_date$,7,4))-int(val(mid$(calendrier_date$,7,4))/4)*4=0
        if val(mid$(calendrier_date$,7,4))-int(val(mid$(calendrier_date$,7,4))/400)*400>0
          calendrier_jmois%(2) = 29
        end_if
      end_if
    end_if

    button calendrier_objet_calendrier%+1
    left calendrier_objet_calendrier%+1, 2
    top calendrier_objet_calendrier%+1, 2
    width calendrier_objet_calendrier%+1, 30
    height calendrier_objet_calendrier%+1,20
    caption calendrier_objet_calendrier%+1,"<"
    on_click calendrier_objet_calendrier%+1,calendrier_prec

    button calendrier_objet_calendrier%+2
    left calendrier_objet_calendrier%+2, 204+2
    top calendrier_objet_calendrier%+2, 2
    width calendrier_objet_calendrier%+2, 30
    height calendrier_objet_calendrier%+2,20
    caption calendrier_objet_calendrier%+2, ">"
    on_click calendrier_objet_calendrier%+2,calendrier_suiv

    button calendrier_objet_calendrier%+3
    left calendrier_objet_calendrier%+3, 2
    top calendrier_objet_calendrier%+3,192+2
    width calendrier_objet_calendrier%+3, 66
    height calendrier_objet_calendrier%+3,20
    caption calendrier_objet_calendrier%+3,"Abandon"
    on_click calendrier_objet_calendrier%+3,calendrier_abort

    button calendrier_objet_calendrier%+4
    left calendrier_objet_calendrier%+4, 68+2
    top calendrier_objet_calendrier%+4,192+2
    width calendrier_objet_calendrier%+4, 100
    height calendrier_objet_calendrier%+4,20
    caption calendrier_objet_calendrier%+4,"Aujourd'hui"
    on_click calendrier_objet_calendrier%+4,calendrier_cejour

    button calendrier_objet_calendrier%+5
    left calendrier_objet_calendrier%+5, 170+2
    top calendrier_objet_calendrier%+5,192+2
    width calendrier_objet_calendrier%+5, 66
    height calendrier_objet_calendrier%+5,20
    caption calendrier_objet_calendrier%+5,"OK"
    on_click calendrier_objet_calendrier%+5,calendrier_OK

calendrier_redessiner:

    cls
    calendrier_resultat$ = ""

    calendrier_baseh% = 0
    calendrier_basev% = 0
    calendrier_basec% = 10

    2d_target_is calendrier_objet_calendrier%
    print_target_is calendrier_objet_calendrier%

' barre de commande
    2d_pen_color calendrier_color_cadre%(0), calendrier_color_cadre%(1), calendrier_color_cadre%(2)
    2d_fill_color calendrier_color_cadre%(0), calendrier_color_cadre%(1), calendrier_color_cadre%(2)
    2d_rectangle calendrier_baseh%, calendrier_basev%, calendrier_baseh% + 238, calendrier_basev% + 24
' bouton "mois précédent"
    2d_fill_color calendrier_color_fond_jours%(0), calendrier_color_fond_jours%(1), calendrier_color_fond_jours%(2)
    2d_rectangle calendrier_baseh%+1, calendrier_basev%+1, calendrier_baseh% + 32, calendrier_basev% + 22
' champs "nom du mois"
    2d_rectangle calendrier_baseh%+34+1, calendrier_basev%+1, calendrier_baseh% + 202, calendrier_basev% + 22
' bouton "mois suivant"
    2d_rectangle calendrier_baseh%+204+1, calendrier_basev%+1, calendrier_baseh% + 238, calendrier_basev% + 22

' cases des jours
    calendrier_basev% = 24
    For calendrier_j% = 1 To 7
        calendrier_baseh% = 0
        For calendrier_i% = 1 To 7
            2d_fill_color calendrier_color_fond_jours%(0), calendrier_color_fond_jours%(1), calendrier_color_fond_jours%(2)
            2d_rectangle calendrier_baseh%, calendrier_basev%, calendrier_baseh% + 34, calendrier_basev% + 24
            If calendrier_j% = 1
                2d_fill_color calendrier_color_fond_jours%(0), calendrier_color_fond_jours%(1), calendrier_color_fond_jours%(2)
            End_If
            2d_rectangle calendrier_baseh%+1, calendrier_basev%+1, calendrier_baseh% + 32, calendrier_basev% + 22
            calendrier_baseh% = calendrier_baseh% + 34
        Next calendrier_i%
        calendrier_basev% = calendrier_basev% + 24
    Next calendrier_j%
 ' cadre autour des boutons en bas de la form
    2d_rectangle 0,192,238,216

' calculer le positionnement des chiffres dans le tableau
    dateadd_delta% = 1 - val(left$(calendrier_date$,2))
    dateadd_date$ = calendrier_date$
    gosub dateadd_jj
    calendrier_debut_mois$= dateadd_date$
    jour_de_semaine_date$ = calendrier_debut_mois$
    gosub jour_de_semaine
    calendrier_decalage% = jour_de_semaine_numero%
    If calendrier_decalage% = 1
        calendrier_decalage% = 8
    End_If

    dateadd_date$ = calendrier_date$
    dateadd_delta% = -1
    gosub dateadd_mm
    calendrier_jour1% = 0
    calendrier_jour1% = calendrier_jmois%(val(mid$(dateadd_date$,4,2)))
    calendrier_jours_prec% = calendrier_jmois%(val(mid$(dateadd_date$,4,2)))
    calendrier_i% = calendrier_decalage% - 1
    calendrier_jlig% = Int((val(left$(calendrier_date$,2)) + calendrier_i% + 6) / 7)
    calendrier_jcol% = val(left$(calendrier_date$,2)) + calendrier_i% - (calendrier_jlig% - 1) * 7

' faire les libellés des boutons de commande
    font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2)
    calendrier_basev% = 4
    print_locate 10,calendrier_basev%
    print "<"
    print_locate 214,calendrier_basev%
    print ">"
    2d_rectangle calendrier_baseh%+34+1, calendrier_basev%+1, calendrier_baseh% + 202, calendrier_basev% + 22
    print_locate 80,calendrier_basev%
    font_color calendrier_objet_calendrier%,calendrier_color_texte%(0), calendrier_color_texte%(1), calendrier_color_texte%(2)
    print calendrier_mois$(val(mid$(calendrier_date$,4,2))) + " " + right$(calendrier_date$,4)
    font_color calendrier_objet_calendrier%, calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2)
    calendrier_basev% = 28
   
    if val(mid$(calendrier_date$,4,2))=2
      calendrier_jmois%(2) = 28
      if val(mid$(calendrier_date$,7,4))-int(val(mid$(calendrier_date$,7,4))/4)*4=0
        if val(mid$(calendrier_date$,7,4))-int(val(mid$(calendrier_date$,7,4))/400)*400>0
          calendrier_jmois%(2) = 29
        end_if
      end_if
    end_if

' afficher les libellés des jours de semaine
    print_locate 10,calendrier_basev%
    print "Lu"
    print_locate 44,calendrier_basev%
    print "Ma"
    print_locate 78,calendrier_basev%
    print "Me"
    print_locate 112,calendrier_basev%
    print "Je"
    print_locate 146,calendrier_basev%
    print "Ve"
    print_locate 180,calendrier_basev%
    print "Sa"
    print_locate 214,calendrier_basev%
    print "Di"

' calculer le décalage du premier du mois
    calendrier_delta% = 0
    calendrier_jour2% = 1 - calendrier_decalage%
    If calendrier_decalage% > 1
        font_color calendrier_objet_calendrier%,calendrier_color_hors%(0), calendrier_color_hors%(1), calendrier_color_hors%(2)
    Else
        font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2)
        calendrier_jour2% = 1
    End_If

' affichier les numéros des jours
    For calendrier_i% = 1 To 6
        For calendrier_j% = 1 To 7
            If calendrier_jour2% < 0
                font_color calendrier_objet_calendrier%, calendrier_color_hors%(0), calendrier_color_hors%(1), calendrier_color_hors%(2)
                print_locate 4 + (calendrier_j% - 1) * 34,calendrier_basev% + calendrier_i% * 24
                print calendrier_jours_prec% + calendrier_jour2% + 1
                calendrier_jour2% = calendrier_jour2% + 1
                If calendrier_jour2% = 0
                    font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2)
                    calendrier_jour2% = calendrier_jour2% + 1
                End_If
            Else
                If calendrier_jour2% > calendrier_jmois%(val(mid$(calendrier_date$,4,2)))
                    font_color calendrier_objet_calendrier%,calendrier_color_hors%(0), calendrier_color_hors%(1), calendrier_color_hors%(2)
                    calendrier_delta% = calendrier_jmois%(val(mid$(calendrier_date$,4,2)))
                End_If
                print_locate 4 + (calendrier_j% - 1) * 34, calendrier_basev% + calendrier_i% * 24
                If calendrier_jlig% = calendrier_i% And calendrier_jcol% = calendrier_j%
                    font_color calendrier_objet_calendrier%,calendrier_color_du_jour%(0), calendrier_color_du_jour%(1), calendrier_color_du_jour%(2)
                End_If
                Print str$(calendrier_jour2% - calendrier_delta%)
                If calendrier_jlig% = calendrier_i% And calendrier_jcol% = calendrier_j%
                    font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2)
                End_If
                calendrier_jour2% = calendrier_jour2% + 1
            End_If
        Next calendrier_j%
    Next calendrier_i%

    return

rem ****************************************************************
rem *                                                              *
rem *  fin #INCLUDE calendrier_procedure.inc                      *
rem *                                                              *
rem ****************************************************************
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
ambroise




Nombre de messages : 264
Localisation : Haute-Savoie
Date d'inscription : 29/04/2012

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyLun 28 Mai 2012 - 13:56

Voici ma solution pour pallier à l'absence d'argument dans l'envoi du sous-programme :

Code:

edit1% = 1
edit edit1%
on_change edit1%, choisir_edit1

edit2% = 2
edit edit2%
on_change edit2%, choisir_edit2

edit3% = 3
edit edit3%
on_change edit3%, choisir_edit3

...etc...

end

choisir_edit1:
edit% = edit1%
gosub verif
return

choisir_edit2:
edit% = edit2%
gosub verif
return

choisir_edit3:
edit% = edit3%
gosub verif
return

verif:
...
...
if val(right$(text$(edit%),1))>3
    text edit%,""
... etc ...
return
Revenir en haut Aller en bas
http://genealogie.cwebh.org/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyLun 28 Mai 2012 - 14:06

Tu peux faire la même chose comme ceci:
Code:

edit1% = 1
edit edit1%
on_change edit1%, verif

edit2% = 2
edit edit2%
on_change edit2%, verif

edit3% = 3
edit edit3%
on_change edit3%, verif

...etc...

end

verif:
edit% = number_change
...
...
if val(right$(text$(edit%),1))>3
    text edit%,""
... etc ...
return
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
ambroise




Nombre de messages : 264
Localisation : Haute-Savoie
Date d'inscription : 29/04/2012

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyLun 28 Mai 2012 - 16:43

C'est ce qui s'appelle réinventer la roue !... Voilà ce que c'est de ne pas connaître toutes les fonctions de Panoramic ! Heureusement que ce forum compte bien des gens compétents. Merci !
Revenir en haut Aller en bas
http://genealogie.cwebh.org/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyMar 29 Mai 2012 - 9:38

Petite amélioration du calendrier pop-up: j'ai rajouté des boutons "année précédente" et "année suivante":
Code:
rem **********************************************************************
rem *                                                                    *
rem *  calendrier_bas  -  programme de test pour un calendrier popup    *
rem *                                                                    *
rem *  ce programme inclut en un seul morceau tous les modules          *
rem *  qui peuvent être inclus par la directive #INCLUDE                *
rem *                                                                    *
rem **********************************************************************

rem #include "calendrier_labels.inc"
rem **********************************************************************
rem *                                                                    *
rem *    #INCLUDE "calendrier_labels.inc"                                *
rem *                                                                    *
rem **********************************************************************

label show_calendrier, show_resultat
label calendrier_dessiner, calendrier_redessiner
label calendrier_prec, calendrier_suiv, calendrier_seldate
label calendrier_abort, calendrier_cejour, calendrier_OK
label calendrier_prec_ann, calendrier_suiv_ann

rem **********************************************************************
rem *                                                                    *
rem *    fin #INCLUDE "calendrier_labels.inc"                            *
rem *                                                                    *
rem **********************************************************************

rem #include "dateadd_labels_labels.inc"
rem **********************************************************************
rem *                                                                    *
rem *    #INCLUDE "dateadd_labels.inc"                                  *
rem *                                                                    *
rem **********************************************************************

label dateadd_jj, dateadd_mm, dateadd_aaaa
label dateadd_eclate, dateadd_fusionne, dateadd_fin_de_mois
label dateadd_fevrier

rem **********************************************************************
rem *                                                                    *
rem *    fin #INCLUDE "dateadd_labels.inc"                              *
rem *                                                                    *
rem **********************************************************************

rem #include "jour_de_semaine_labels.inc"
rem **********************************************************************
rem *                                                                    *
rem *    #INCLUDE "jour_de_semaine_labels.inc"                          *
rem *                                                                    *
rem **********************************************************************

label jour_de_semaine

rem **********************************************************************
rem *                                                                    *
rem *    fin #INCLUDE "jour_de_semaine_labels.inc"                      *
rem *                                                                    *
rem **********************************************************************

rem #include "calendrier_declarations.inc"
rem **********************************************************************
rem *                                                                    *
rem *    #INCLUDE "calendrier_declarations.inc"                          *
rem *                                                                    *
rem **********************************************************************

dim calendrier_visible%, calendrier_resultat$
dim calendrier_cible%, calendrier_objet_calendrier%
dim calendrier_objet_form%
dim calendrier_decalage%, calendrier_modifie%
dim calendrier_date$

rem **********************************************************************
rem *                                                                    *
rem *    fin #INCLUDE "calendrier_declarations.inc"                      *
rem *                                                                    *
rem **********************************************************************


rem #include "jour_de_semaine_declarations.inc"
rem **********************************************************************
rem *                                                                    *
rem *    #INCLUDE "jour_de_la_demaine_declarations.inc"                  *
rem *                                                                    *
rem *    Calcul du jour de la semaine                                    *
rem *                                                                    *
rem *    Cette routine calcule le jour de la semaine à partir d'une      *
rem *    date en format jj/mm/aaaa.                                      *
rem *                                                                    *
rem *    Appel:                                                          *
rem *        gosub jour_de_semaine                                      *
rem *                                                                    *
rem *    Paramètre en entrée:                                            *
rem *        jour_de_semaine_date$                                      *
rem *                                                                    *
rem *    Paramètres en sortie:                                          *
rem *        jour_de_semaine_numero%                                    *
rem *        jour_de_semaine_text$                                      *
rem *                                                                    *
rem *    Installation:                                                  *
rem *        Copier les déclarations au début du programme, et le code  *
rem *        à la fin du programme dans lequel on veut l'utiliser        *
rem *                                                                    *
rem *    Utilisation:                                                    *
rem *      jour_de_semaine_date$ = "16/05/2010"                          *
rem *      gosub jour_de_semaine                                        *
rem *      message str$(jour_de_semaine_numero%) + " = " + jour_de_semaine_text$
rem *                                                                    *
rem **********************************************************************

dim jour_de_semaine_date$, jour_de_semaine_numero%, jour_de_semaine_text$
dim jour_de_semaine_j%, jour_de_semaine_m%, jour_de_semaine_a%
dim jour_de_semaine_m1%, jour_de_semaine_a1%, jour_de_semaine_ns%
dim jour_de_semaine_as%, jour_de_semaine_f%

rem **********************************************************************
rem *                                                                    *
rem *  fin #INCLUDE jour_de_semaine_declarations.inc                    *
rem *                                                                    *
rem **********************************************************************


rem #include "dateadd_declarations.inc"
rem ****************************************************************
rem *                                                              *
rem *    #INCLUDE "dateadd_declarations.inc"                      *
rem *                                                              *
rem *      dateadd - simulation de la fonction dateadd de VB      *
rem *                                                              *
rem *    Cette routine a 3 points d'entrée:                        *
rem *          dateadd_jj    additionner des jours à une date    *
rem *          dateadd_mm    additionner des mois à une date    *
rem *          dateadd_aaaa  additionner des années à une date  *
rem *                                                              *
rem *    En entrée, 2 variables sont à charger:                    *
rem *          dateadd_date$  la date à modifier (en "jj/mm/aaa") *
rem *          dateadd_delta% la fraction à ajouter ou à retirer  *
rem *              data_add_delta%<0:  retirer                    *
rem *              data_add_delta%>0:  ajouter                    *
rem *                                                              *
rem *    En sortie, 1 variable est à consulter:                    *
rem *          dateadd_date$  la date résultante                  *
rem *                                                              *
rem *    Installation:                                            *
rem *          copier simplement ce module dans le source, en    *
rem *          plaçant les déclarations au début et la            *
rem *          partie code à la fin du source                    *
rem *                                                              *
rem ****************************************************************

dim dateadd_date$, dateadd_delta%
dim dateadd_jj%, dateadd_mm%, dateadd_aaaa%, dateadd_jours%(12)

rem ****************************************************************
rem *                                                              *
rem *  fin #INCLUDE dateadd_declarations.inc                      *
rem *                                                              *
rem ****************************************************************

rem ****************************************************************
rem *                                                              *
rem *  Programme de test calendrier.bas principal                *
rem *                                                              *
rem ****************************************************************

calendrier_visible% = 0
button 10
caption 10,"Calendrier"
top 10,250
left 10,100
on_click 10,show_calendrier
button 11
caption 11,"Résultat ?"
top 11,300
left 11,100
on_click 11,show_resultat
end

show_calendrier:
    if calendrier_visible%=0
        calendrier_date$ = date$
        calendrier_visible% = 1
        gosub calendrier_dessiner
        show calendrier_objet_form%
      active calendrier_objet_form%
        inactive 0
    else
        show calendrier_objet_form%
        active calendrier_objet_form%
        if calendrier_visible%=2 then calendrier_visible% = 1
        inactive 0
    end_if
 return

show_resultat:
    if calendrier_resultat$=""
        message "Aucune date n'a été choisie !"
    else
        message "La date choisie est le " + calendrier_resultat$
    end_if
    return

rem #include "dateadd_procedure.inc"
rem ****************************************************************
rem *                                                              *
rem *  #INCLUDE dateadd_procedure.inc                            *
rem *                                                              *
rem *      dateadd - simulation de la fonction dateadd de VB      *
rem *                                                              *
rem *    Cette routine a 3 points d'entrée:                        *
rem *          dateadd_jj    additionner des jours à une date    *
rem *          dateadd_mm    additionner des mois à une date    *
rem *          dateadd_aaaa  additionner des années à une date  *
rem *                                                              *
rem *    En entrée, 2 variables sont à charger:                    *
rem *          dateadd_date$  la date à modifier (en "jj/mm/aaa") *
rem *          dateadd_delta% la fraction à ajouter ou à retirer  *
rem *              data_add_delta%<0:  retirer                    *
rem *              data_add_delta%>0:  ajouter                    *
rem *                                                              *
rem *    En sortie, 1 variable est à consulter:                    *
rem *          dateadd_date$  la date résultante                  *
rem *                                                              *
rem *    Installation:                                            *
rem *          copier simplement ce module dans le source, en    *
rem *          plaçant les déclarations au début et la            *
rem *          partie code à la fin du source                    *
rem *                                                              *
rem ****************************************************************

dateadd_eclate:
    dateadd_jj% = val(left$(dateadd_date$,2))
    dateadd_mm% = val(mid$(dateadd_date$,4,2))
    dateadd_aaaa% = val(right$(dateadd_date$,4))
    return

dateadd_fusionne:
    dateadd_date$ = str$(dateadd_mm%) + "/" + str$(dateadd_aaaa%)
    if dateadd_mm%<10 then dateadd_date$ = "0" + dateadd_date$
    dateadd_date$ = str$(dateadd_jj%) + "/" + dateadd_date$
    if dateadd_jj%<10 then dateadd_date$ = "0" + dateadd_date$
    return

dateadd_fin_de_mois:
    dateadd_jours%(1)=31
    dateadd_jours%(2)=28
    dateadd_jours%(3)=31
    dateadd_jours%(4)=30
    dateadd_jours%(5)=31
    dateadd_jours%(6)=30
    dateadd_jours%(7)=31
    dateadd_jours%(8)=31
    dateadd_jours%(9)=30
    dateadd_jours%(10)=31
    dateadd_jours%(11)=30
    dateadd_jours%(12)=31
    if dateadd_mm%=2
      dateadd_jours%(2) = 28
      if dateadd_aaaa%-int(dateadd_aaaa%/4)*4=0
        if dateadd_aaaa%-int(dateadd_aaaa%/400)*400>0
          dateadd_jours%(2) = 29
        end_if
      end_if
    end_if
    return

dateadd_fevrier:
    if dateadd_mm%=2
        if dateadd_aaaa%=int(dateadd_aaaa%/4)*4 then dateadd_jours%(2) = 29
    end_if
    return

 dateadd_aaaa:
    gosub dateadd_eclate
    dateadd_aaaa% = dateadd_aaaa% + dateadd_delta%
    gosub dateadd_fusionne
    return

 dateadd_mm:
    gosub dateadd_eclate
    gosub dateadd_fin_de_mois
    dateadd_mm% = dateadd_mm% + dateadd_delta%
    if dateadd_mm%<1
        while dateadd_mm%<1
            dateadd_aaaa% = dateadd_aaaa% - 1
            dateadd_mm% = dateadd_mm% + 12
        end_while
    else
        while dateadd_mm%>12
            dateadd_aaaa% = dateadd_aaaa% + 1
            dateadd_mm% = dateadd_mm% - 12
        end_while
    end_if
    if dateadd_jj%>dateadd_jours%(dateadd_mm%) then dateadd_jj% = dateadd_jours%(dateadd_mm%)
    gosub dateadd_fusionne
    return

 dateadd_jj:
    gosub dateadd_eclate
    gosub dateadd_fin_de_mois
    dateadd_jj% = dateadd_jj% + dateadd_delta%
    if dateadd_jj%<1
        while dateadd_jj%<1
            dateadd_mm% = dateadd_mm% - 1
            if dateadd_mm%<1
                dateadd_mm% = 12
                dateadd_aaaa% = dateadd_aaaa% - 1
            end_if
            gosub dateadd_fevrier
            dateadd_jj% = dateadd_jj% + dateadd_jours%(dateadd_mm%)
        end_while
    else
        while dateadd_jj%>dateadd_jours%(dateadd_mm%)
            gosub dateadd_fevrier
            dateadd_jj% = dateadd_jj% - dateadd_jours%(dateadd_mm%)
            dateadd_mm% = dateadd_mm% + 1
            if dateadd_mm%>12
                dateadd_mm% = 1
                dateadd_aaaa% = dateadd_aaaa% + 1
            end_if
        end_while
    end_if
    gosub dateadd_fusionne
    return

rem #include "jour_de_semaine_procedure.inc"
rem **********************************************************************
rem *                                                                    *
rem *  #INCLUDE jour_de_semaine_procedure.inc                          *
rem *                                                                    *
rem *    Début de la partie "code" à copier à la fin du source          *
rem *                                                                    *
rem **********************************************************************

jour_de_semaine:
    jour_de_semaine_j% = val(left$(jour_de_semaine_date$,2))
    jour_de_semaine_m% = val(mid$(jour_de_semaine_date$,4,2))
    jour_de_semaine_a% = val(right$(jour_de_semaine_date$,4))

    if jour_de_semaine_m%<3
        jour_de_semaine_m1% = jour_de_semaine_m% + 10
        jour_de_semaine_a1% = jour_de_semaine_a% - 1
    else
        jour_de_semaine_m1% = jour_de_semaine_m% - 2
        jour_de_semaine_a1% = jour_de_semaine_a%
    end_if

    jour_de_semaine_ns% = int(jour_de_semaine_a1%/100)

    jour_de_semaine_as% = jour_de_semaine_a1% - jour_de_semaine_ns%*100

    jour_de_semaine_f% = jour_de_semaine_j% + jour_de_semaine_as% + int(jour_de_semaine_as%/4) - 2* jour_de_semaine_ns% + int(jour_de_semaine_ns%/4) + int((26*jour_de_semaine_m1%-2)/10)

    jour_de_semaine_numero% = jour_de_semaine_f% - int(jour_de_semaine_f%/7)*7

    select jour_de_semaine_numero%
        case 0: jour_de_semaine_text$ = "Dimanche"
        case 1: jour_de_semaine_text$ = "Lundi"
        case 2: jour_de_semaine_text$ = "Mardi"
        case 3: jour_de_semaine_text$ = "Mercredi"
        case 4: jour_de_semaine_text$ = "Jeudi"
        case 5: jour_de_semaine_text$ = "Vendredi"
        case 6: jour_de_semaine_text$ = "Samedi"
    end_select

return
rem ****************************************************************
rem *                                                              *
rem *  fin #INCLUDE jour_de_semaine_procedure.inc                *
rem *                                                              *
rem ****************************************************************


rem #include "calendrier_procedure.inc"
rem **********************************************************************
rem *                                                                    *
rem *  #INCLUDE calendrier_procedure.inc                          *
rem *                                                                    *
rem *    Début de la partie "code" à copier à la fin du source          *
rem *                                                                    *
rem **********************************************************************

rem ************************************************************************
rem *                                                                      *
rem * routines on_click du calendrier                                      *
rem *                                                                      *
rem ************************************************************************

calendrier_prec:
    dateadd_date$ = calendrier_date$
    dateadd_delta% = -1
    gosub dateadd_mm
    calendrier_date$ = dateadd_date$
    goto calendrier_redessiner

calendrier_prec_ann:
    dateadd_date$ = calendrier_date$
    dateadd_delta% = -1
    gosub dateadd_aaaa
    calendrier_date$ = dateadd_date$
    goto calendrier_redessiner

calendrier_suiv:
    dateadd_date$ = calendrier_date$
    dateadd_delta% = 1
    gosub dateadd_mm
    calendrier_date$ = dateadd_date$
    goto calendrier_redessiner

calendrier_suiv_ann:
    dateadd_date$ = calendrier_date$
    dateadd_delta% = 1
    gosub dateadd_aaaa
    calendrier_date$ = dateadd_date$
    goto calendrier_redessiner

calendrier_abort:
    hide calendrier_objet_form%
    calendrier_visible%=2
    inactive calendrier_objet_form%
    calendrier_resultat$ = ""
    active 0
    to_foreground 0
    return

calendrier_cejour:
    calendrier_date$ = date$
    goto calendrier_redessiner

calendrier_OK:
    hide calendrier_objet_form%
    calendrier_visible%=2
    inactive calendrier_objet_form%
    calendrier_resultat$ = calendrier_date$
    active 0
    to_foreground 0
    return

calendrier_seldate:
    calendrier_j% = mouse_x_left_down(calendrier_objet_calendrier%)
    calendrier_i% = mouse_y_left_down(calendrier_objet_calendrier%)
    calendrier_j% = int((calendrier_j%  + 33)/34)
    calendrier_i% = int((calendrier_i%  + 23)/24) - 2
    if calendrier_i%<1 then return
    dateadd_delta% = ((calendrier_i%-1)*7 + calendrier_j%) - ((calendrier_jlig%-1)*7 + calendrier_jcol%)
    dateadd_date$ = calendrier_date$
    gosub dateadd_jj
    calendrier_date$ = dateadd_date$
    goto calendrier_redessiner

rem ************************************************************************
rem *                                                                      *
rem * routines de service du calendrier                                    *
rem *                                                                      *
rem ************************************************************************

calendrier_dessiner:

    calendrier_objet_form% = 1000
    calendrier_objet_calendrier% = 1001
    form calendrier_objet_form%
    command_target_is calendrier_objet_form%
    border_hide calendrier_objet_form%
    hide calendrier_objet_form%
    border_hide calendrier_objet_form%
    top calendrier_objet_form%,200
    left calendrier_objet_form%,200
    width calendrier_objet_form%, 248
    height calendrier_objet_form%, 243
    picture calendrier_objet_calendrier%
    width calendrier_objet_calendrier%, 238
    height calendrier_objet_calendrier%, 216
    caption calendrier_objet_form% , "Calendrier"
    on_click calendrier_objet_calendrier%, calendrier_seldate

    dim calendrier_i%, calendrier_j%, calendrier_k%,
    dim calendrier_baseh%, calendrier_basev%, calendrier_basec%
    dim calendrier_debut_mois$
    dim calendrier_jour2%
    dim calendrier_jour1%, calendrier_jours_prec%, calendrier_delta%, calendrier_jlig%, calendrier_jcol%
    dim calendrier_color_cadre%(2), calendrier_color_texte%(2), calendrier_color_fond_text%(2)
    dim calendrier_color_fond_jours%(2), calendrier_color_du_jour%(2)
    dim calendrier_color_jours%(2), calendrier_color_fond_texte%(2), calendrier_color_hors%(2)
    dim calendrier_mois$(12), calendrier_jmois%(12)

    calendrier_color_cadre%(0) = 24
    calendrier_color_cadre%(1) = 95
    calendrier_color_cadre%(2) = 214
    calendrier_color_texte%(0) = 255
    calendrier_color_texte%(1) = 255
    calendrier_color_texte%(2) = 255
    calendrier_color_jours%(0) = 0
    calendrier_color_jours%(1) = 0
    calendrier_color_jours%(2) = 0
    calendrier_color_fond_jours%(0) = 82
    calendrier_color_fond_jours%(1) = 162
    calendrier_color_fond_jours%(2) = 255
    calendrier_color_fond_texte%(0) = 49
    calendrier_color_fond_texte%(1) = 109
    calendrier_color_fond_texte%(2) = 239
    calendrier_color_du_jour%(0) = 255
    calendrier_color_du_jour%(1) = 255
    calendrier_color_du_jour%(2) = 0
    calendrier_color_hors%(0) = 207
    calendrier_color_hors%(1) = 207
    calendrier_color_hors%(2) = 207

    calendrier_mois$(1) = "Janvier"
    calendrier_mois$(2) = "Février"
    calendrier_mois$(3) = "Mars"
    calendrier_mois$(4) = "Avril"
    calendrier_mois$(5) = "Mai"
    calendrier_mois$(6) = "Juin"
    calendrier_mois$(7) = "Juillet"
    calendrier_mois$(8) = "Août"
    calendrier_mois$(9) = "Septembre"
    calendrier_mois$(10) = "Octobre"
    calendrier_mois$(11) = "Novembre"
    calendrier_mois$(12) = "Décembre"
    calendrier_jmois%(1) = 31
    calendrier_jmois%(2) = 28
    calendrier_jmois%(3) = 31
    calendrier_jmois%(4) = 30
    calendrier_jmois%(5) = 31
    calendrier_jmois%(6) = 30
    calendrier_jmois%(7) = 31
    calendrier_jmois%(8) = 31
    calendrier_jmois%(9) = 30
    calendrier_jmois%(10) = 31
    calendrier_jmois%(11) = 30
    calendrier_jmois%(12) = 31

    if val(mid$(calendrier_date$,4,2))=2
      calendrier_jmois%(2) = 28
      if val(mid$(calendrier_date$,7,4))-int(val(mid$(calendrier_date$,7,4))/4)*4=0
        if val(mid$(calendrier_date$,7,4))-int(val(mid$(calendrier_date$,7,4))/400)*400>0
          calendrier_jmois%(2) = 29
        end_if
      end_if
    end_if

    button calendrier_objet_calendrier%+1
    left calendrier_objet_calendrier%+1, 2
    top calendrier_objet_calendrier%+1, 2
    width calendrier_objet_calendrier%+1, 30
    height calendrier_objet_calendrier%+1,20
    caption calendrier_objet_calendrier%+1,"<<"
    on_click calendrier_objet_calendrier%+1,calendrier_prec_ann

    button calendrier_objet_calendrier%+6
    left calendrier_objet_calendrier%+6, 36
    top calendrier_objet_calendrier%+6, 2
    width calendrier_objet_calendrier%+6, 30
    height calendrier_objet_calendrier%+6,20
    caption calendrier_objet_calendrier%+6,"<"
    on_click calendrier_objet_calendrier%+6,calendrier_prec

    button calendrier_objet_calendrier%+2
    left calendrier_objet_calendrier%+2, 204+2-34
    top calendrier_objet_calendrier%+2, 2
    width calendrier_objet_calendrier%+2, 30
    height calendrier_objet_calendrier%+2,20
    caption calendrier_objet_calendrier%+2, ">"
    on_click calendrier_objet_calendrier%+2,calendrier_suiv

    button calendrier_objet_calendrier%+7
    left calendrier_objet_calendrier%+7, 204+2
    top calendrier_objet_calendrier%+7, 2
    width calendrier_objet_calendrier%+7, 30
    height calendrier_objet_calendrier%+7,20
    caption calendrier_objet_calendrier%+7, ">>"
    on_click calendrier_objet_calendrier%+7,calendrier_suiv_ann

    button calendrier_objet_calendrier%+3
    left calendrier_objet_calendrier%+3, 2
    top calendrier_objet_calendrier%+3,192+2
    width calendrier_objet_calendrier%+3, 66
    height calendrier_objet_calendrier%+3,20
    caption calendrier_objet_calendrier%+3,"Abandon"
    on_click calendrier_objet_calendrier%+3,calendrier_abort

    button calendrier_objet_calendrier%+4
    left calendrier_objet_calendrier%+4, 68+2
    top calendrier_objet_calendrier%+4,192+2
    width calendrier_objet_calendrier%+4, 100
    height calendrier_objet_calendrier%+4,20
    caption calendrier_objet_calendrier%+4,"Aujourd'hui"
    on_click calendrier_objet_calendrier%+4,calendrier_cejour

    button calendrier_objet_calendrier%+5
    left calendrier_objet_calendrier%+5, 170+2
    top calendrier_objet_calendrier%+5,192+2
    width calendrier_objet_calendrier%+5, 66
    height calendrier_objet_calendrier%+5,20
    caption calendrier_objet_calendrier%+5,"OK"
    on_click calendrier_objet_calendrier%+5,calendrier_OK

calendrier_redessiner:

    cls
    calendrier_resultat$ = ""

    calendrier_baseh% = 0
    calendrier_basev% = 0
    calendrier_basec% = 10

    2d_target_is calendrier_objet_calendrier%
    print_target_is calendrier_objet_calendrier%

' barre de commande
    2d_pen_color calendrier_color_cadre%(0), calendrier_color_cadre%(1), calendrier_color_cadre%(2)
    2d_fill_color calendrier_color_cadre%(0), calendrier_color_cadre%(1), calendrier_color_cadre%(2)
    2d_rectangle calendrier_baseh%, calendrier_basev%, calendrier_baseh% + 238, calendrier_basev% + 24
' bouton "année précédente"
    2d_fill_color calendrier_color_fond_jours%(0), calendrier_color_fond_jours%(1), calendrier_color_fond_jours%(2)
    2d_rectangle calendrier_baseh%+1, calendrier_basev%+1, calendrier_baseh% + 32, calendrier_basev% + 22
' bouton "mois précédent"
    2d_rectangle calendrier_baseh%+1+32, calendrier_basev%+1, calendrier_baseh% +34+32, calendrier_basev% + 22
' champs "nom du mois"
    2d_rectangle calendrier_baseh%+34+34+1, calendrier_basev%+1, calendrier_baseh% + 202-34, calendrier_basev% + 22
' bouton "mois suivant"
    2d_rectangle calendrier_baseh%+204-32+1, calendrier_basev%+1, calendrier_baseh% + 238-34, calendrier_basev% + 22
' bouton "année suivante"
    2d_rectangle calendrier_baseh%+204+1, calendrier_basev%+1, calendrier_baseh% + 238, calendrier_basev% + 22

' cases des jours
    calendrier_basev% = 24
    For calendrier_j% = 1 To 7
        calendrier_baseh% = 0
        For calendrier_i% = 1 To 7
            2d_fill_color calendrier_color_fond_jours%(0), calendrier_color_fond_jours%(1), calendrier_color_fond_jours%(2)
            2d_rectangle calendrier_baseh%, calendrier_basev%, calendrier_baseh% + 34, calendrier_basev% + 24
            If calendrier_j% = 1
                2d_fill_color calendrier_color_fond_jours%(0), calendrier_color_fond_jours%(1), calendrier_color_fond_jours%(2)
            End_If
            2d_rectangle calendrier_baseh%+1, calendrier_basev%+1, calendrier_baseh% + 32, calendrier_basev% + 22
            calendrier_baseh% = calendrier_baseh% + 34
        Next calendrier_i%
        calendrier_basev% = calendrier_basev% + 24
    Next calendrier_j%
 ' cadre autour des boutons en bas de la form
    2d_rectangle 0,192,238,216

' calculer le positionnement des chiffres dans le tableau
    dateadd_delta% = 1 - val(left$(calendrier_date$,2))
    dateadd_date$ = calendrier_date$
    gosub dateadd_jj
    calendrier_debut_mois$= dateadd_date$
    jour_de_semaine_date$ = calendrier_debut_mois$
    gosub jour_de_semaine
    calendrier_decalage% = jour_de_semaine_numero%
    If calendrier_decalage% = 1
        calendrier_decalage% = 8
    End_If

    dateadd_date$ = calendrier_date$
    dateadd_delta% = -1
    gosub dateadd_mm
    calendrier_jour1% = 0
    calendrier_jour1% = calendrier_jmois%(val(mid$(dateadd_date$,4,2)))
    calendrier_jours_prec% = calendrier_jmois%(val(mid$(dateadd_date$,4,2)))
    calendrier_i% = calendrier_decalage% - 1
    calendrier_jlig% = Int((val(left$(calendrier_date$,2)) + calendrier_i% + 6) / 7)
    calendrier_jcol% = val(left$(calendrier_date$,2)) + calendrier_i% - (calendrier_jlig% - 1) * 7

' faire les libellés des boutons de commande
    font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2)
    calendrier_basev% = 4
    print_locate 10,calendrier_basev%
    print "<"
    print_locate 214,calendrier_basev%
    print ">"
    2d_rectangle calendrier_baseh%+34+1, calendrier_basev%+1, calendrier_baseh% + 202, calendrier_basev% + 22
    print_locate 80,calendrier_basev%
    font_color calendrier_objet_calendrier%,calendrier_color_texte%(0), calendrier_color_texte%(1), calendrier_color_texte%(2)
    print calendrier_mois$(val(mid$(calendrier_date$,4,2))) + " " + right$(calendrier_date$,4)
    font_color calendrier_objet_calendrier%, calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2)
    calendrier_basev% = 28
   
    if val(mid$(calendrier_date$,4,2))=2
      calendrier_jmois%(2) = 28
      if val(mid$(calendrier_date$,7,4))-int(val(mid$(calendrier_date$,7,4))/4)*4=0
        if val(mid$(calendrier_date$,7,4))-int(val(mid$(calendrier_date$,7,4))/400)*400>0
          calendrier_jmois%(2) = 29
        end_if
      end_if
    end_if

' afficher les libellés des jours de semaine
    print_locate 10,calendrier_basev%
    print "Lu"
    print_locate 44,calendrier_basev%
    print "Ma"
    print_locate 78,calendrier_basev%
    print "Me"
    print_locate 112,calendrier_basev%
    print "Je"
    print_locate 146,calendrier_basev%
    print "Ve"
    print_locate 180,calendrier_basev%
    print "Sa"
    print_locate 214,calendrier_basev%
    print "Di"

' calculer le décalage du premier du mois
    calendrier_delta% = 0
    calendrier_jour2% = 1 - calendrier_decalage%
    If calendrier_decalage% > 1
        font_color calendrier_objet_calendrier%,calendrier_color_hors%(0), calendrier_color_hors%(1), calendrier_color_hors%(2)
    Else
        font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2)
        calendrier_jour2% = 1
    End_If

' affichier les numéros des jours
    For calendrier_i% = 1 To 6
        For calendrier_j% = 1 To 7
            If calendrier_jour2% < 0
                font_color calendrier_objet_calendrier%, calendrier_color_hors%(0), calendrier_color_hors%(1), calendrier_color_hors%(2)
                print_locate 4 + (calendrier_j% - 1) * 34,calendrier_basev% + calendrier_i% * 24
                print calendrier_jours_prec% + calendrier_jour2% + 1
                calendrier_jour2% = calendrier_jour2% + 1
                If calendrier_jour2% = 0
                    font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2)
                    calendrier_jour2% = calendrier_jour2% + 1
                End_If
            Else
                If calendrier_jour2% > calendrier_jmois%(val(mid$(calendrier_date$,4,2)))
                    font_color calendrier_objet_calendrier%,calendrier_color_hors%(0), calendrier_color_hors%(1), calendrier_color_hors%(2)
                    calendrier_delta% = calendrier_jmois%(val(mid$(calendrier_date$,4,2)))
                End_If
                print_locate 4 + (calendrier_j% - 1) * 34, calendrier_basev% + calendrier_i% * 24
                If calendrier_jlig% = calendrier_i% And calendrier_jcol% = calendrier_j%
                    font_color calendrier_objet_calendrier%,calendrier_color_du_jour%(0), calendrier_color_du_jour%(1), calendrier_color_du_jour%(2)
                End_If
                Print str$(calendrier_jour2% - calendrier_delta%)
                If calendrier_jlig% = calendrier_i% And calendrier_jcol% = calendrier_j%
                    font_color calendrier_objet_calendrier%,calendrier_color_jours%(0), calendrier_color_jours%(1), calendrier_color_jours%(2)
                End_If
                calendrier_jour2% = calendrier_jour2% + 1
            End_If
        Next calendrier_j%
    Next calendrier_i%

    return

rem ****************************************************************
rem *                                                              *
rem *  fin #INCLUDE calendrier_procedure.inc                      *
rem *                                                              *
rem ****************************************************************
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyMar 29 Mai 2012 - 13:37

Très bien Klaus, ce calendrier pop-up devient plus pratique.

J'ai revu ma copie en fonction des interventions des uns et des autres et de mes préférences, et le tout sous forme de routine insérable dans un code.
Je vous la livre pour la passer une nouvelle fois au ban d'essai.
Code:
' Routine saisie_date par Jean-Claude (Mai 2012)
' (avec la participation de nombreux "Panoramiciens")

'  1) vérifier si ces variables sont dèjà déclarées dans le code destination
'    sinon il faut les insérer
dim no%,n%,bouton,x,y
label start,bouton

' 2) insérer les 4 lignes ci-dessous dans le code destination avan end
dim top_container_date,left_container_date,aaaa$,dat$,mm$,jj$,container_date%
' aaaa$=right$(date$,4):mm$=mid$(date$,4,2):jj$=left$(date$,2):' règlages affichage
aaaa$="":mm$="":jj$="":' règlages affichage
top_container_date=100:left_container_date=200:' règlages position
label init_sub_date,saisie_date:gosub init_sub_date
'
' -------------------------------------------------------------------------------
' code destination avant end
no%=no%+1:main_menu no%
no%=no%+1:sub_menu no%:parent no%,no%-1:caption no%," START ":on_click no%,start

END
' ============================== CODE DESTINATION ==============================
' code destination après end
start:
gosub saisie_date:hide container_date%:' lance la routine et libère la place
dat$=jj$+"/"+mm$+"/"+aaaa$:' definir le format ou/et récupérer les variables

' affichage
caption 0,dat$

aaaa$="":mm$="":jj$="":' remise à zéro
return

' 4) ===================== Routine saisie_date à inserer =================================================
init_sub_date:
if container_date%<>0 then return
dim edit_date%,combo_mois%,combo_jour%,aaaa%,bissextile,maxj,alpha_suite%
dim alpha_suite2%,alpha_valide%,alpha_retour%
label ctrl_annee_bissextiles,ctrl_an_bi,saisie_mois,ctrl_jour,fin_date,saisie_jour,reinit_date
' GUI de la routine
no%=no%+1:container_date%=no%:container no%:width no%,240:height no%,38:hide no%
        top no%,top_container_date:left no%,left_container_date:' position du container_date
       
no%=no%+1:edit_date%=no%:edit no%:parent no%,container_date%
        width no%,40:top no%,11:left no%,5
        if aaaa$<>"" then text no%,aaaa$
        if aaaa$="" then text no%,"Année":off_click no%
        on_change no%,ctrl_annee_bissextiles

no%=no%+1:alpha_suite%=no%:alpha no%:parent no%,container_date%
        font_name no%,"wingdings 3":font_size no%,14:caption no%,chr$(95)
        top no%,11:left no%,48:on_click no%,ctrl_an_bi:hint no%," Valider l'Année et Continuer "
       
no%=no%+1:combo_mois%=no%:combo no%:parent no%,container_date%
        width no%,50:text no%,"Mois":top no%,11:left no%,68:inactive no%
        for n%=1 to 12
          if n%<10 then item_add no%,"0"+str$(n%)
          if n%>9 then item_add no%,str$(n%)
        next n%
        if mm$<>"" then text no%,mm$
        if mm$="" then text no%,"Mois"
        on_click no%,ctrl_jour

no%=no%+1:alpha_suite2%=no%:alpha no%:parent no%,container_date%:hint no%," Valider le Mois et Continuer "
        font_name no%,"wingdings 3":font_size no%,14:caption no%,chr$(95)
        top no%,11:left no%,120:on_click no%,ctrl_jour:inactive no%

no%=no%+1:combo_jour%=no%:combo no%:parent no%,container_date%
        width no%,50:text no%,"Jour":top no%,11:left no%,140:inactive no%
        if jj$<>"" then text no%,jj$
        if jj$="" then text no%,"Jour"
        on_click no%,saisie_jour

no%=no%+1:alpha_valide%=no%:alpha no%:parent no%,container_date%:hint no%," Valider la Date et Quitter "
        font_name no%,"Symbol":font_size no%,16:caption no%,chr$(197)
        top no%,7:left no%,193:on_click no%,fin_date:inactive no%

no%=no%+1:alpha_retour%=no%:alpha no%:parent no%,container_date%:hint no%," Recommencer "
        font_name no%,"Symbol":font_size no%,16:caption no%,chr$(196)
        top no%,7:left no%,212:on_click no%,reinit_date:inactive no%
return
' ------------------------------------ routine ---------------------------------------------------------------
saisie_date:
show container_date%:active alpha_suite%:active edit_date%:set_focus edit_date%
if text$(edit_date%)="Année" then inactive alpha_suite%
end:return

fin_date:
if text$(combo_jour%)="28" then jj$=text$(combo_jour%)
bouton=alpha_valide%:gosub bouton:inactive alpha_retour%:inactive alpha_valide%
inactive combo_jour%
return

reinit_date:
bouton=alpha_retour%:gosub bouton:inactive alpha_retour%:inactive alpha_suite2%
inactive combo_mois%:clear combo_jour%:inactive combo_jour%:text combo_jour%,"Jour"
active alpha_suite%:active edit_date%:set_focus edit_date%:text edit_date%,aaaa$
end:return

saisie_jour:
jj$=item_index$(combo_jour%):inactive combo_jour%
if jj$="" then jj$=text,combo_jour%
active alpha_valide%
end:return

saisie_mois:
active alpha_retour%:inactive alpha_suite%:inactive edit_date%:active combo_mois%
if mm$<>"" then active alpha_suite2%
if jj$="" then clear combo_jour%:text combo_jour%,"Jour"
active alpha_valide%
if text$(combo_jour%)="Jour" then inactive alpha_valide%
return

ctrl_jour:
bouton=alpha_suite2%:gosub bouton
mm$=item_index$(combo_mois%):inactive combo_mois%:inactive alpha_suite2%
if mm$="" then mm$=text$(combo_mois%)
if mm$="04" or mm$="06" or mm$="09" or mm$="11"
  maxj=30
  else
  maxj=31
end_if
if bissextile=1 and mm$="02" then maxj=29
if bissextile=0 and mm$="02" then maxj=28:text combo_jour%,"28"
for n%= 1 to maxj
    if n%<10 then item_add combo_jour%,"0"+str$(n%)
    if n%>9 then item_add combo_jour%,str$(n%)
next n%
active combo_jour%
end:return

ctrl_annee_bissextiles:
if text$(edit_date%)="Année" then text edit_date%,""
aaaa$=text$(edit_date%)
if aaaa$="" then return
ctrl_an_bi:
bouton=alpha_suite%:gosub bouton
if aaaa$="" then aaaa$=text$(edit_date%)
aaaa%=val(aaaa$)
bissextile=0: IF (FRAC(aaaa%/4)=0 AND FRAC(aaaa%/100)>0) OR FRAC(aaaa%/400)=0 THEN bissextile=1:' JL35
if len(aaaa$)>3 then gosub saisie_mois
end:return

bouton:
if active(bouton)=0 or show(bouton)=0 or clicked(bouton)=0 then return
x=top(bouton):y=left(bouton)
top bouton,x+2:left bouton,y+2
wait 200
top bouton,x:left bouton,y
return

Une précision: faites les essais en changeant alternativement les lignes 11 et 12.

J'espère que c'est la dernière version. Very Happy

A+
Revenir en haut Aller en bas
ambroise




Nombre de messages : 264
Localisation : Haute-Savoie
Date d'inscription : 29/04/2012

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyMar 29 Mai 2012 - 14:46

Bonjour,

Je m'aperçois que lorsque le programme envoie vers un sous-programme tel que notre verif pour notre date, au retour il place le curseur au début de la date entrée par l'utilisateur. C'est assez gênant. Voyez dans le code ci-dessous destiné à convertir en majuscules un nom entré dans un edit. Si on n'y prend garde, on obtient un nom inversé :

Code:

dim edit%
label nommer

edit 1
text 1,""
on_change 1, nommer
end

nommer:
edit% = number_change
text edit%, upper$(text$(edit%))
return

Existe-t-il un moyen de positionner automatiquement le curseur en fin de mot dans l'edit à chaque retour du sous-programme ?

Merci encore.


Dernière édition par ambroise le Mar 29 Mai 2012 - 14:50, édité 1 fois
Revenir en haut Aller en bas
http://genealogie.cwebh.org/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyMar 29 Mai 2012 - 14:48

Ca marche très bien.

Une petite remarque: quand on revient dans la saisie pour la seconde fois, la date précédente est présentée par défaut. Mais pourtant, il faut resaisir TOUS les champs, même si l'on ne veut changer que l'année ou le jour. As-tu prévu un moyen de changer un champ ponctuellement ? Sinon, il vaut mieux présenter toujours une date vide, comme au démarrage.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyMar 29 Mai 2012 - 14:49

@ Ambroise:
Non.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyMar 29 Mai 2012 - 15:26

Bonjour Ambroise,
Citation :
Existe-t-il un moyen de positionner automatiquement le curseur en fin de mot dans l'edit à chaque retour du sous-programme ?
La réponse est oui: affraid
Code:
edit 1
text 1,"salut à toi!"
set_focus 1
caret_position 1,5
Very Happy Razz
Juste une parenthèse,c'est dommage qu'il n'y ai pas un post pour les astuces.
Je viens de faire ceci dans un programme:
Code:

' en exemple:
label demarre
memo 1
on_change 1,demarre
item_add 1,"":end
demarre:
off_change 1
  message "il y a eu un évennement automatique sans timer provisoir"
return
Revenir en haut Aller en bas
ambroise




Nombre de messages : 264
Localisation : Haute-Savoie
Date d'inscription : 29/04/2012

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyMar 29 Mai 2012 - 15:38

Merci Cosmos70,

Ce Panoramic est rempli de richesses cachées... Heureux ceux qui savent chercher... Moi, je cherchais dans l'aide au mot cursor !

Code:

dim edit% , curseur%
label nommer

edit 1
text 1,""
on_change 1, nommer
end
nommer:
edit% = number_change
curseur% = len(text$(edit%))
text edit%, upper$(text$(edit%))
caret_position edit%,curseur%
return


Dernière édition par ambroise le Mar 29 Mai 2012 - 17:28, édité 2 fois
Revenir en haut Aller en bas
http://genealogie.cwebh.org/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyMar 29 Mai 2012 - 16:46

Merci, Cosmos70 ! Tu m'as appris quelque chose. J'étais convaincu que caret_position ne s'appliquait qu'aux mémos. Une fois de plus: il faut relire la doc...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
ambroise




Nombre de messages : 264
Localisation : Haute-Savoie
Date d'inscription : 29/04/2012

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyMar 29 Mai 2012 - 17:28

oui, merci Cosmos70 !
Revenir en haut Aller en bas
http://genealogie.cwebh.org/index.html
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 EmptyMer 30 Mai 2012 - 1:20

Bonsoir à toute la planète Panoramic, Laughing
Finalement ils m'ont laissé sortir de l'hôpital en fin d'après-midi. J'ai plus de 48 heures de lecture forum à rattraper.
Pour Jean-Claude, ton dernier programme pour rentrer des dates, j'ai bien aimé, sauf que j'ai détecté un bug. Si pour l'année, tu tapes une lettre ou un autre caractère qu'un chiffre, le programme part en erreur et plante. A noter que le point décimal est accepté une fois dans la saisie!
Pour Ambroise, si tu avais bien regardé et étudié le programme que j'avais mis sur la première page de ce post, tu te serais apperçu que j'utilise à plusieurs reprises l'instruction caret_position. Mais c'est bien que tu ais posé la question du curseur dans un edit, car cela a permis à Cosmos de préciser que Caret_position permet de mettre le curseur où l'on veut dans un edit, et d'autres personnes ont ainsi pu enrichir certainement leurs connaissances.
Pour en revenir aux problèmes des dates, comme il s'agit certainement de saisir celles-ci avec le minimum d'erreur, je me suis dis qu'il n'y aurait que des chiffres à saisir. Donc, 3 edit. Les fautes de frappe sont signalés par un message de rappel à l'ordre ainsi que les mois de 30 jours et le mois de février. Le programme gère les années bissextiles de 29 jours. Dès que vous êtes dans le champ de l'année après l'avoir saisie, vous validez avec enter, et là votre date apparaît à gauche dans un list. Si vous vous êtes malgré tout quand même trompé dans la saisie, vous cliquez dessus dans le list, et elle réapparait dans les 3 edit sous sa forme initiale, prête à être corrigée! Dès que vous appuyez sur enter, elle reprend sa place dans le list, rectifiée. Cerise sur le gâteau! les dates se classent chronologiquement dans le list au fur et à mesure de leurs saisies grâce à un algorythme maison (calcul de p et q). Ça je pense qu'Ambroise va aimer, car c'est très utile, surtout pour des recherches en généalogie. En plus, le programme permet si on ne connaît pas la date exacte de ne rentrer que le mois et l'année ou que l'année seule!

cheers
Code:
dim i,j,p,q,j$,m$,modif:label verif1,verif2,verif3,valide,voir_date:height 0,700
edit 1:left 1,200:top 1,50:width 1,20:on_change 1,verif1
edit 2:left 2,240:top 2,50:width 2,20:on_change 2,verif2
edit 3:left 3,280:top 3,50:width 3,40:on_change 3,verif3:on_key_up 3,valide
alpha 4:left 4,200:top 4,25:caption 4,"FORMAT DATE JJ/MM/AAAA"
alpha 5:left 5,225:top 5,55:caption 5,"/"
alpha 6:left 6,265:top 6,55:caption 6,"/"
alpha 7:left 7,200:top 7,75:caption 7,"Ne saisir que des chiffres SVP"
alpha 8:left 8,5:font_name 8,"Fixedsys":caption 8,"JJ/MM/AAAA"
list 10:height 10,640:top 10,20:font_name 10,"Fixedsys":on_click 10,voir_date
set_focus 1
end

verif1:
if len(text$(1))=0 then return
if numeric(right$(text$(1),1))=0 or right$(text$(1),1)="." then beep_error:message "Quantième jour en chiffres SVP":text 1,"":return
if val(left$(text$(1),1))>3 then beep_error:message "Quantième jour ne peut être supérieur à 31 SVP":text 1,"":return
if len(text$(1))=2 and val(text$(1))=0 or val(text$(1))>31 then beep_error:message "Quantième jour 00 ou supérieur à 31 impossible":text 1,"":return
if len(text$(1))=2 then gosub verif2:set_focus 2:gosub verif2
return
verif2:
if len(text$(2))=0 then return
if numeric(right$(text$(2),1))=0 or right$(text$(2),1)="." then beep_error:message "Quantième mois en chiffres SVP":text 2,"":return
if val(left$(text$(2),1))>1 then beep_error:message "Quantième mois ne peut être supérieur à 12 SVP":text 2,"":return
if len(text$(2))=2 and val(text$(2))=0 or val(text$(2))>12 then beep_error:message "Quantième mois 00 ou supérieur à 12 impossible":text 2,"":return
if text$(1)<>""
  if (text$(2)="02" and val(text$(1))>29) then beep_error:message "Quantième mois de Février ne peut être supérieur à 29":text 1,"29"
  if text$(2)="04" or text$(2)="06" or text$(2)="09" or text$(2)="11" and val(text$(1))>30 then beep_error:message "Les mois d'Avril, Juin, Septembre et Novembre n'ont que 30 jours":text 1,"30"
end_if
if len(text$(2))=2 then set_focus 3
return
verif3:
if len(text$(3))=0 then return
if len(text$(3))>4 then beep_error:message "Quatre chiffres maximum pour l'année SVP":text 3,left$(text$(3),4):caret_position 3,4
if numeric(right$(text$(3),1))=0 or right$(text$(3),1)="." then beep_error:message "Quantième année en chiffres SVP":text 3,"":return
if text$(1)<>""
  if len(text$(3))=4 and text$(2)="02" and val(text$(1))>28
      if val(text$(3))-int(val(text$(3))/100)*100=0
        if val(text$(3))-int(val(text$(3))/400)*400>0 then beep_error:message "Il n'y a que 28 jours en Février "+text$(3):set_focus 1
      end_if
      if val(text$(3))-int(val(text$(3))/4)*4>0 then beep_error:message "Il n'y a que 28 jours en Février "+text$(3):set_focus 1
  end_if
end_if
return
valide:
if key_up_code=13 and len(text$(3))=4
  j$=text$(1):if j$="" then j$="  "
  m$=text$(2):if m$="" then m$="  "
  if modif=0
      item_add 10,j$+"/"+m$+"/"+text$(3):text 1,"":text 2,"":text 3,"":set_focus 1
  else
      item_delete 10,modif:item_insert 10,modif,j$+"/"+m$+"/"+text$(3):text 1,"":text 2,"":text 3,"":modif=0:set_focus 1
  end_if
end_if
if count(10)>1
  for i=1 to count(10)-1
      for j=i to count(10)
        if left$(item_read$(10,j),2)="  " then p=0
        if left$(item_read$(10,j),2)<>"  " then p=val(left$(item_read$(10,j),2))
        if mid$(item_read$(10,j),4,2)="  " then p=p+0
        if mid$(item_read$(10,j),4,2)<>"  " then p=p+(val(mid$(item_read$(10,j),4,2))*30.4375)
        p=p+(val(right$(item_read$(10,j),4))*365.25)
        if left$(item_read$(10,i),2)="  " then q=0
        if left$(item_read$(10,i),2)<>"  " then q=val(left$(item_read$(10,i),2))
        if mid$(item_read$(10,i),4,2)="  " then q=q+0
        if mid$(item_read$(10,i),4,2)<>"  " then q=q+(val(mid$(item_read$(10,i),4,2))*30.4375)
        q=q+(val(right$(item_read$(10,i),4))*365.25)
        if p<q then item_insert 10,i,item_read$(10,j):item_delete 10,j+1
      next j
  next i
end_if
return
voir_date:
if right$(item_index$(10),4)="" then return
text 1,left$(item_index$(10),2):text 2,mid$(item_index$(10),4,2):text 3,right$(item_index$(10),4):modif=item_index(10):set_focus 1
return
Bon, je suis fatigué
A bientôt Sleep
Revenir en haut Aller en bas
Contenu sponsorisé





Utilitaire de saisie d'une date - Page 3 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 3 Empty

Revenir en haut Aller en bas
 
Utilitaire de saisie d'une date
Revenir en haut 
Page 3 sur 4Aller à la page : Précédent  1, 2, 3, 4  Suivant
 Sujets similaires
-
» Combo date : sélecteur de date
» Date <-> Date julienne
» saisie de texte
» Indexer une saisie en vue d'un classement.
» Découpe dans une image

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: