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 Emptypar Pedro Sam 23 Nov 2024 - 15:50

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

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

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

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

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

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

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

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

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

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

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

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

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

» fichier.exe
Utilitaire de saisie d'une date 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 du moment : -38%
Ecran PC gaming 23,8″ – ACER KG241Y P3bip ...
Voir le deal
99.99 €

 

 Utilitaire de saisie d'une date

Aller en bas 
+3
Jicehel
Klaus
Jean Claude
7 participants
Aller à la page : 1, 2, 3, 4  Suivant
AuteurMessage
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 Empty
MessageSujet: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyMar 22 Mai 2012 - 20:08

Bonsoir, suite à une demande d'aide sur le post d'Ambroise je vous propose un utilitaire pour saisir une date au format JJ/MM/AAAA.

dans ce programme j'oblige l'utilisateur à suivre les 3 étapes de saisie pour limiter à zéro le risque d'erreur de saisie.
C'est pourquoi on commence par le mois pour que le COMBO des jours n'autorise que 29 pour février et 30 pour les mois de 30 jours. Pas de risque de saisie comme 1/2/12.
Et cerise sur gâteau, si vous avez saisie un 29 février d'une année qui n'est pas bissextile, il y correction et un message d'avertissement.

edit: prenez plutôt la version corrigée, plus bas.

Code:
dim jj$,mm$,aaaa$,maxj,n,a$,b$,ok$,dat$
label mois,date,jour,annee,fin_date,fin_date2,annee_bissextile,reinit_date
combo 1:width 1,40:top 1,30:left 1,10
combo 2:width 2,width(1):top 2,top(1):left 2,width(1)+20
edit 3:width 3,50:top 3,top(1):left 3,width(1)+width(2)+30
alpha 4:top 4,top(1)-15:left 4,left(1):caption 4,"  Mois "
alpha 5:top 5,top(1)-15:left 5,left(2):caption 5,"  Jour "
alpha 6:top 6,top(1)-15:left 6,left(3):caption 6,"Année "
button 7:width 7,16:height 7,16:top 7,top(3)+3:left 7,left(3)+width(3)-18:caption 7,"X"
button 8:width 8,60:height 8,20:top 8,top(3)+1:left 8,left(7)+width(7)+10:caption 8,"Clear Date"
gosub date
END:' *****************************************************

date:
mm$="":jj$="":aaaa$="":text 1,"":text 2,"":text 3,"":clear 1:clear 2
inactive 2:inactive 3:inactive 7:inactive 8:active 1:set_focus 1:gosub mois
return

mois:
for n=1 to 12
if n<10 then  a$="0"+str$(n)
if n>9 then  a$=str$(n)
item_add 1,a$
next n
on_click 1,jour
return

jour:
active 8:on_click 8,reinit_date
mm$=item_index$(1)
inactive 1:active 2:set_focus 2
if val(mm$)=1 or val(mm$)=3 or val(mm$)=5 or val(mm$)=7 or val(mm$)=8 or val(mm$)=10 or val(mm$)=12
  maxj=31
else
  maxj=30
end_if
if val(mm$)=2 then maxj=29
for n=1 to maxj
if n<10 then  a$="0"+str$(n)
if n>9 then  a$=str$(n)
item_add 2,a$
next n
on_click 2,annee
return

annee:
jj$=item_index$(2)
inactive 2:active 3:set_focus 3
on_change 3,fin_date
return

fin_date:
active 7:on_click 7,fin_date2
return

fin_date2:
a$=text$(3)
if numeric(a$)=0 then message "Valeur numérique uniquement":text 3,"":set_focus 3:return
if len(a$)<>4 then message "Format AAAA: 4 caractères attendus":text 3,"":set_focus 3:return
aaaa$=a$:inactive 3:inactive 7
if jj$="29" and mm$="02" then gosub annee_bissextile
dat$=jj$+"/"+mm$+"/"+aaaa$

' affichage résultat
caption 0,dat$
return

annee_bissextile:
a$=right$(aaaa$,2):ok$=""
for n=0 to 96 step 4
if n<10 then b$="0"+str$(n)
if n>9 then b$=str$(n)
if a$=b$ then ok$="O":exit_for
ok$="N"
next n
if ok$="N"
  jj$="28":text 2,"28":message " "+aaaa$+" n'est pas une année bissextile"+chr$(13)+"Le jour est remis automatiquement à 28"
else
  jj$="29"
end_if
return

reinit_date:
goto date
return

Ce code a tout de même l’inconvénient d'être gourmand en variables, label et objets.

Il faudra, aussi, que je le refasse en commençant par la saisie de l'année de façon à ce que le COMBO"Mois" ne contienne que 28 jours si l'année n'est pas bissextile.


N'hésitez pas à proposer vos façons de faire, se sera utile à tous... Prenez le comme un concours Very Happy


A+


Dernière édition par Jean Claude le Mer 23 Mai 2012 - 8:31, édité 1 fois
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 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyMar 22 Mai 2012 - 21:27

Sympa et efficace !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Utilitaire de saisie d'une date Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyMar 22 Mai 2012 - 22:03

Bah, pour la consommation d'objet et de variable, ce n'est pas grave.
Il faudra juste les libérer en fin de traitement et ne garder que le résultat valide en chaine ou avec 3 variables jour; mois et année
Revenir en haut Aller en bas
bignono

bignono


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

Utilitaire de saisie d'une date Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyMer 23 Mai 2012 - 0:38

Bon, Wink je livre ma solution dans un edit, basée sur le petit programme que j'ai déjà mis dans le post à Ambroise sur le contrôle du contenu d'un edit. J'ai amélioré le programme et maintenant il reconnaît les mois de 30 ou 31 jours et corrige la saisie. Il détecte si on a mis au mois de février plus de 29 jours et après l'année corrige en mettant le 28 si ce n'est pas une année bissextile. Comme le format est JJ/MM/AAAA, il détecte si on a oublié le "/". Tout cela est agrémenté de messages pour vous dire que vous vous trompez dans votre saisie si vous faites une erreur de frappe!
Code:
label verif,m1,m2,m3,m4,m5,m6,m7
edit 1:left 1,200:top 1,50:on_change 1,verif
alpha 2:left 2,200:top 2,25:caption 2,"FORMAT DATE JJ/MM/AAAA"
set_focus 1
end

verif:
 if len(text$(1))=1
  if numeric(right$(text$(1),1))=0 or right$(text$(1),1)="." then gosub m1:text 1,"":return
  if val(text$(1))>3 then gosub m2:text 1,"":return
 end_if
 if len(text$(1))=2
  if numeric(right$(text$(1),1))=0 or right$(text$(1),1)="." then gosub m1:text 1,left$(text$(1),1):caret_position 1,1:return
  if val(text$(1))>31 or val(text$(1))<1 then gosub m2:text 1,"":return
 end_if
 if len(text$(1))=3
    if right$(text$(1),1)<>"/" then gosub m3:text 1,left$(text$(1),2):caret_position 1,2:return
 end_if
 if len(text$(1))=4
  if numeric(right$(text$(1),1))=0 or right$(text$(1),1)="." then gosub m1:text 1,left$(text$(1),3):caret_position 1,3:return
  if val(right$(text$(1),1))>1 then gosub m4:text 1,left$(text$(1),3):caret_position 1,3:return
 end_if
 if len(text$(1))=5
  if numeric(right$(text$(1),1))=0 or right$(text$(1),1)="." then gosub m1:text 1,left$(text$(1),4):caret_position 1,4:return
  if val(right$(text$(1),2))>12 or val(right$(text$(1),2))<1 then gosub m4:text 1,left$(text$(1),3):caret_position 1,3:return
  if mid$(text$(1),4,2)="04" or mid$(text$(1),4,2)="06" or mid$(text$(1),4,2)="09" or mid$(text$(1),4,2)="11"
      if val(left$(text$(1),2))>30 then gosub m6:text 1,"30"+right$(text$(1),3):caret_position 1,5:return
  end_if
  if mid$(text$(1),4,2)="02" and val(left$(text$(1),2))>29 then gosub m6:text 1,"29"+right$(text$(1),3):caret_position 1,5:return
 end_if
 if len(text$(1))=6
    if right$(text$(1),1)<>"/" then gosub m3:text 1,left$(text$(1),5):caret_position 1,5:return
 end_if
 if len(text$(1))>6 and len(text$(1))<11
  if numeric(right$(text$(1),1))=0 or right$(text$(1),1)="." then gosub m1:text 1,left$(text$(1),len(text$(1))-1):caret_position 1,len(text$(1)):return
 end_if
 if len(text$(1))=10
  if val(right$(text$(1),4))<1 then gosub m5:text 1,left$(text$(1),6):caret_position 1,6:return
  if (val(right$(text$(1),4))/4<>int(val(right$(text$(1),4))/4) and mid$(text$(1),4,2)="02" and val(left$(text$(1),2))>28) then gosub m7:text 1,"28"+right$(text$(1),8):caret_position 1,10:return
 end_if
 if len(text$(1))>10 then text 1,left$(text$(1),10):caret_position 1,10:return
return
m1:
message "Entrez uniquement un chiffre SVP":return
m2:
message "De 01 à 31 SVP":return
m3:
message "Entrez un «/» SVP":return
m4:
message "De 01 à 12 SVP":return
m5:
message "Année non valide, recommencez SVP":return
m6:
message "Il y a 28 ou 29 jours en Février et 30 jours en Avril, Juin, Septembre ou Novembre.":return
m7:
message "Il ne s'agit pas d'une année bissextile. Il n'y a que 28 jours en Février":return
En espérant que cela serve, je vous souhaite une bonne nuit à tous! Sleep
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Utilitaire de saisie d'une date Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyMer 23 Mai 2012 - 7:31

Ton contrôle fonctionne très bien Bignono.
PS: Pour ton code 'demo' tu aurait dû ajouter comme Jean-Claude, un bouton final (ok par exemple) pour mettre la date dans un message ou en titre de la fenêtre 0. Mais bon, ça marche nickel et on peut le faire nous même aussi Wink
Revenir en haut Aller en bas
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 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyMer 23 Mai 2012 - 7:46

Merci à vous tous,

@Bignono,
Ton code vaut le détour: 2 objets, aucune variables, et 1 seul label (si on ne compte pas les messages).
Bravo, je le retiens.

J'ai corrigé le mien car la position des objets ne suivait pas correctement la position du premier, c'est maintenant ok. J'ai aussi ajouté l'effacement du résultat dans le caption 0 en cas de "Clear_date".
Code:
' saisie d'une date par Jean Claude
dim jj$,mm$,aaaa$,maxj,n,a$,b$,ok$,dat$
label mois,date,jour,annee,fin_date,fin_date2,annee_bissextile,reinit_date
combo 1:width 1,40:top 1,160:left 1,160:' <== ici, reglage de la position de tout les objets
combo 2:width 2,width(1):top 2,top(1):left 2,left(1)+width(1)+20
edit 3:width 3,50:top 3,top(1):left 3,left(2)+width(2)+20
alpha 4:top 4,top(1)-15:left 4,left(1):caption 4,"  Mois "
alpha 5:top 5,top(1)-15:left 5,left(2):caption 5,"  Jour "
alpha 6:top 6,top(1)-15:left 6,left(3):caption 6,"Année "
button 7:width 7,16:height 7,16:top 7,top(3)+3:left 7,left(3)+width(3)-18:caption 7,"X"
button 8:width 8,60:height 8,20:top 8,top(3)+1:left 8,left(7)+width(7)+10:caption 8,"Clear Date"
gosub date
END:' *****************************************************

date:
mm$="":jj$="":aaaa$="":text 1,"":text 2,"":text 3,"":clear 1:clear 2
inactive 2:inactive 3:inactive 7:inactive 8:active 1:set_focus 1:gosub mois
' affichage
caption 0, " Saisie d'une date "
return

mois:
for n=1 to 12
if n<10 then  a$="0"+str$(n)
if n>9 then  a$=str$(n)
item_add 1,a$
next n
on_click 1,jour
return

jour:
active 8:on_click 8,reinit_date
mm$=item_index$(1)
inactive 1:active 2:set_focus 2
if val(mm$)=1 or val(mm$)=3 or val(mm$)=5 or val(mm$)=7 or val(mm$)=8 or val(mm$)=10 or val(mm$)=12
  maxj=31
else
  maxj=30
end_if
if val(mm$)=2 then maxj=29
for n=1 to maxj
if n<10 then  a$="0"+str$(n)
if n>9 then  a$=str$(n)
item_add 2,a$
next n
on_click 2,annee
return

annee:
jj$=item_index$(2)
inactive 2:active 3:set_focus 3
on_change 3,fin_date
return

fin_date:
active 7:on_click 7,fin_date2
return

fin_date2:
a$=text$(3)
if numeric(a$)=0 then message "Valeur numérique uniquement":text 3,"":set_focus 3:return
if len(a$)<>4 then message "Format AAAA: 4 caractères attendus":text 3,"":set_focus 3:return
aaaa$=a$:inactive 3:inactive 7
if jj$="29" and mm$="02" then gosub annee_bissextile
dat$=jj$+"/"+mm$+"/"+aaaa$

' affichage résultat
caption 0,dat$
return

annee_bissextile:
a$=right$(aaaa$,2):ok$=""
for n=0 to 96 step 4
if n<10 then b$="0"+str$(n)
if n>9 then b$=str$(n)
if a$=b$ then ok$="O":exit_for
ok$="N"
next n
if ok$="N"
  jj$="28":text 2,"28":message " "+aaaa$+" n'est pas une année bissextile"+chr$(13)+"Le jour est remis automatiquement à 28"
else
  jj$="29"
end_if
return

reinit_date:
goto date
return

EDIT: Voir aussi (plus bas) une version "Routine"

A+


Dernière édition par Jean Claude le Jeu 24 Mai 2012 - 14:44, édité 1 fois
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 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyMer 23 Mai 2012 - 9:01

Comment vous remercier tous deux pour ces codes super propres et efficaces ? J'admire votre savoir... et je suis touché de votre amabilité !
Revenir en haut Aller en bas
http://genealogie.cwebh.org/index.html
Invité
Invité




Utilitaire de saisie d'une date Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyMer 23 Mai 2012 - 9:11

Bonjour,
J'ai gardé ton programme Bignono. Et pas mal non plus Jean-Claude.
Revenir en haut Aller en bas
bignono

bignono


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

Utilitaire de saisie d'une date Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyMer 23 Mai 2012 - 9:18

Bonjour Ambroise, Smile
L'entraide pour moi, c'est tout naturel! Que ce soit sur le forum Panoramic ou sur le site de Généanet, on apprécie tous d'être aidé quand on en a besoin, et il est juste de rendre ce que l'on reçoit quand on a la possibilité de le faire!
D'ailleurs c'est comme cela que l'on avance plus vite et qu'on devient plus fort! Ne dit-on pas que l'union fait la force?
Bonne journée et A+ Wink
Revenir en haut Aller en bas
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 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyMer 23 Mai 2012 - 12:13

Tout à fait,

J'ajoute que si j'aide moins, c'est tout simplement que je ne suis pas aussi efficace que Klaus, Bignono, JL35, Cosmos70, et j'en passe...
Ma façon de faire est différente, mais bon on s'amuse bien...

A+
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Utilitaire de saisie d'une date Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyMer 23 Mai 2012 - 12:29

Salut tout le monde.

Je vous remercie tous, sans exception, pour vos interventions et pour l’aide toujours aussi efficace que vous apporter à qui en demande !

!!!!! UNE FOIS DE PLUS MERCI A TOUS !!!!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
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 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyJeu 24 Mai 2012 - 14:36

Comme j'avais besoin de ce code pour un programme, j'ai transformé mon code initiale en routine prête à être insérée dans un source. Je vous en fait donc profiter.

Je me suis honteusement inspiré de la façon de faire de Klaus (mais je sais qu'il va l’apprécier) pour la création des objets sans que vous ayez à vous en préoccuper.
J'ai aussi intégrer la routine dans un container pour facilité les réglages.

EDIT: nouvelle version suite au problème de parent résolu par Klaus.
Code:
' routine_saisie_date Jean Claude mai 2012 (avec l'aide de Klaus)
'
' Résultat: sous forme de 4 variables: dat$, jj$, mm$, aaaa$
'
' Règlage:  suivre les étapes ci-dessous: (*) => Obligatoire
'
'    (*)    no% => numéro du dernier objet créer dans le source destination
'          Remarque: cette routine utilise 9 objets
'
'          afi_date$="O" => affiche le résultat (afi_date$="" => n'affiche pas)
'
'          no_afi_date%  => Numéro de l'objet dans lequel on affiche le résultat
'
'          parent container_date%,x: affecte (ou change) parent du container date
'
'          top container_date%,30:left container_date%,10
'          position du container date dans l'objet parent
'
'    (*)    show container_date% pour afficher la routine de saisie (ou Hide ...)
'
'          aaaa$=right$(date$,4):mm$="":jj$=""
'          détermine les affichage par défault (année, mois et jour)
'
'    (*)    gosub date: ' lance l'exécution de la routine
'
'          dat$=jj$+"/"+mm$+"/"+aaaa$ règlage du format de la date
'          par défaut modifiable au label => format_date
'
' Astuce:  variable$=caption$(alpha_afi_date1%)
'          permet de répurer le résultat si plusieurs parent
'
' ==============================================================================
' ci-desssous: pour la démonstration (pas necéssaire à la routine)
dim n,a$,b$,c$,no%,container1%,container2%,alpha_afi_date1%,alpha_afi_date2%
dim button1%,button2%,button3%
label start,suite,fin,routine_saisie_date
no%=0
no%=no%+1:container1%=no%:container container1%:' création d'un container
width container1%,400:height container1%,100:top container1%,10:left container1%,10
no%=no%+1:alpha_afi_date1%=no%:alpha alpha_afi_date1%:' création d'un alpha fils du container 1
parent alpha_afi_date1%,container1%:top alpha_afi_date1%,10:left alpha_afi_date1%,10
no%=no%+1:container2%=no%:container container2%:' création d'un deuxième container
width container2%,400:height container2%,100:top container2%,150:left container2%,10
no%=no%+1:alpha_afi_date2%=no%:alpha alpha_afi_date2%:' création d'un alpha fils du container 2
parent alpha_afi_date2%,container2%:top alpha_afi_date2%,10:left alpha_afi_date2%,10
no% = no% + 1 :button1%=no%: button button1%:top button1%,20:left button1%,430:' création de 2 Boutons
caption button1%,"Premier" : on_click button1%,start
no% = no% + 1 :button2%=no%: button button2% :top button2%,160 :left button2%,430
caption button2%,"Second " : on_click button2%,suite:inactive button2%
no% = no% + 1 :button3%=no%: button button3% : top button3%,200 : left button3%,430
caption button3%,"  Fin  " : on_click button3%,fin:inactive button3%

' ==============================================================================
' ci dessous ligne à inserer avant END
' dim n,a$,b$,c$,no% (vérifier si ces variables exites dans le code d'intégration)
gosub routine_saisie_date:' la routine est prête à fonctionner

END
' ============================== PROGRAMME =====================================

' faire tourner la routine date dans le premier container
start:
parent container_date%,container1%:' affecte un parent au container date (facultatif)
top container_date%,30:left container_date%,10:' position du container date
show container_date%:' print le container date
aaaa$=right$(date$,4):mm$="":jj$="":' détermine les affichage par défault (année, mois et jour) (facultatif)
afi_date$="O":no_afi_date%=alpha_afi_date1%:gosub date:' execute la routine date avec affichage de la date dans l'alpha 1
active button2%
return

' faire tourner la routine date dans le deuxième container
suite:
if dat$="" then message " Vous devez saisir la première date":return
active button3%:inactive button1%
a$=caption$(alpha_afi_date1%):caption 0,a$:' ici on récupère le résultat dans une autre variable (si besoin)
parent container_date%,container2%:' CHANGE le parent du container date
no_afi_date%=alpha_afi_date2%:' redéfini l'objet pour l'affichage
gosub date:' execute la routine date en affichant la date
' Remarques: inutile de reprendre les règlages qui ne changent pas.
return

fin:
inactive button2%:inactive button3%
if dat$<>"" then hide container_date%:' pour libérer le container
return
' =========================== SUB (routine_saisie_date) ========================
' ci-dessous à placer dans le code destination (vers la fin)
format_date:
dat$=jj$+"/"+mm$+"/"+aaaa$:' ici règlage du format de la date et récup des variables
return
' *******
afi_date:
if afi_date$<>"O" then return
caption no_afi_date%,dat$
return
date:
text combo_mois%,"":text combo_jour%,"":text edit_annee%,aaaa$:clear combo_mois%
clear combo_jour%:inactive combo_jour%:inactive edit_annee%:inactive bouton_edit_annee%
inactive bouton_clear_date%:active combo_mois%:set_focus combo_mois%:gosub mois
if afi_date$="O" then caption no_afi_date%," "
return
mois:
for n=1 to 12
if n<10 then  a$="0"+str$(n)
if n>9 then  a$=str$(n)
item_add combo_mois%,a$
next n
on_click combo_mois%,jour
return
jour:
active bouton_clear_date%:on_click bouton_clear_date%,reinit_date
mm$=item_index$(combo_mois%)
inactive combo_mois%:active combo_jour%:set_focus combo_jour%
if val(mm$)=1 or val(mm$)=3 or val(mm$)=5 or val(mm$)=7 or val(mm$)=8 or val(mm$)=10 or val(mm$)=12
  maxj=31
else
  maxj=30
end_if
if val(mm$)=2 then maxj=29
for n=1 to maxj
if n<10 then  a$="0"+str$(n)
if n>9 then  a$=str$(n)
item_add combo_jour%,a$
next n
active bouton_edit_annee%:on_click bouton_edit_annee%,fin_date2
on_click combo_jour%,annee
return
annee:
jj$=item_index$(combo_jour%)
inactive combo_jour%:active edit_annee%:set_focus edit_annee%
on_change edit_annee%,fin_date
return
fin_date:
active bouton_edit_annee%:on_click bouton_edit_annee%,fin_date2
return
fin_date2:
a$=text$(edit_annee%)
if numeric(a$)=0 then message "Valeur numérique uniquement":text edit_annee%,"":set_focus edit_annee%:return
if len(a$)<>4 then message "Format AAAA: 4 caractères attendus":text edit_annee%,"":set_focus edit_annee%:return
aaaa$=a$:inactive edit_annee%:inactive bouton_edit_annee%
if jj$="29" and mm$="02" then gosub annee_bissextile
gosub format_date:gosub afi_date
return
annee_bissextile:
a$=right$(aaaa$,2):c$=""
for n=0 to 96 step 4
if n<10 then b$="0"+str$(n)
if n>9 then b$=str$(n)
if a$=b$ then c$="O":exit_for
c$="N"
next n
if c$="N"
  jj$="28":text combo_jour%,"28":message " "+aaaa$+" n'est pas une année bissextile"+chr$(13)+"Le jour est remis automatiquement à 28"
else
  jj$="29"
end_if
return
reinit_date:
goto date
return
' ***************
routine_saisie_date:
dim jj$,mm$,aaaa$,maxj,dat$,afi_date$
dim combo_mois%,combo_jour%,edit_annee%,alpha_mois%,alpha_jour%,alpha_annee%
dim bouton_edit_annee%,bouton_clear_date%,container_date%,no_afi_date%
label mois,date,jour,annee,fin_date,fin_date2,annee_bissextile,reinit_date,afi_date,format_date
no%=no%+1:container_date%=no%:container no%:' Création du Container de saisie date
  width container_date%,260:height container_date%,56
  top container_date%,100:left container_date%,10:hide container_date%
no%=no%+1:combo_mois%=no%:combo combo_mois%:parent combo_mois%,container_date%:' Combo de saisie du mois
  width combo_mois%,40:top combo_mois%,25:left combo_mois%,10
no%=no%+1:combo_jour%=no%:combo combo_jour%:parent combo_jour%,container_date%:' Combo de saisie du jour
  width combo_jour%,width(combo_mois%):top combo_jour%,top(combo_mois%)
  left combo_jour%,left(combo_mois%)+width(combo_mois%)+20
no%=no%+1:edit_annee%=no%:edit edit_annee%:parent edit_annee%,container_date%:' Edit de saisie de l'année
  width edit_annee%,50:top edit_annee%,top(combo_mois%)
  left edit_annee%,left(combo_jour%)+width(combo_jour%)+20
no%=no%+1:alpha_mois%=no%:alpha alpha_mois%:parent alpha_mois%,container_date%:' Alpha "Mois"
  top alpha_mois%,top(combo_mois%)-15:left alpha_mois%,left(combo_mois%)
  caption alpha_mois%,"  Mois "
no%=no%+1:alpha_jour%=no%:alpha alpha_jour%:parent alpha_jour%,container_date%:' Alpha "Jour"
  top alpha_jour%,top(combo_mois%)-15:left alpha_jour%,left(combo_jour%)
  caption alpha_jour%,"  Jour "
no%=no%+1:alpha_annee%=no%:alpha alpha_annee%:parent alpha_annee%,container_date%:' Alpha "Année"
  top alpha_annee%,top(combo_mois%)-15:left alpha_annee%,left(edit_annee%)
  caption alpha_annee%,"Année "
no%=no%+1:bouton_edit_annee%=no%:button bouton_edit_annee%:parent bouton_edit_annee%,container_date%:' bouton de confirmation de saisie de l'année
  width bouton_edit_annee%,16:height bouton_edit_annee%,16
  top bouton_edit_annee%,top(edit_annee%)+3
  left bouton_edit_annee%,left(edit_annee%)+width(edit_annee%)-18
  caption bouton_edit_annee%,"X"
no%=no%+1:bouton_clear_date%=no%:button bouton_clear_date%:parent bouton_clear_date%,container_date%:' bouton de réinitialisation
  width bouton_clear_date%,60:height bouton_clear_date%,20
  top bouton_clear_date%,top(edit_annee%)+1
  left bouton_clear_date%,left(bouton_edit_annee%)+width(bouton_edit_annee%)+10
  caption bouton_clear_date%,"Clear Date"
return
' ======================== Fin de la routine: Saisie_Date ======================

A+


Dernière édition par Jean Claude le Ven 25 Mai 2012 - 10:05, édité 1 fois
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 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyJeu 24 Mai 2012 - 15:41

Merci encore...
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 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyVen 25 Mai 2012 - 10:07

J'ai rééditer le dernier code qui n'était pas tout à fait correct.
Cette fois-ci çà semble être OK.

A+
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 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyVen 25 Mai 2012 - 14:26

Pas moyen de passer au second volet bien que la date soit saisie... Message d'erreur : Vous devez saisir une date.
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 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyVen 25 Mai 2012 - 16:22

Curieux, je viens de prendre le code à partir du Forum et çà marche. Serait-ce encore un coup de W7. Je peux pas tester sous W7, vu que je l'ai pas.

J'espère que çà n'empêche pas d'utiliser la routine
Tu peux toujours supprimer "inactive button2%" à la ligne 49

Je fais appel à la bienveillance de JL35 ou ?? pour un essai sous W7.

Avant de quitter, je viens de penser "as-tu cliqué sur la croix dans l'edit année pour valider l'année ?"

Répond-moi, çà m'intéresse car cela voudrait dire que ce bouton "X" n'est pas assez explicite.

A+
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 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyVen 25 Mai 2012 - 16:36

Ah oui, en cliquant sur le bouton x, ça fonctionne bien. J'avais compris, par la croix, qu'il n'y avait rien à faire pour l'année. Surtout qu'elle apparaît plus ou moins grisée, ce qui m'a conduit à penser qu'elle était inactive.
Revenir en haut Aller en bas
http://genealogie.cwebh.org/index.html
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Utilitaire de saisie d'une date Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyVen 25 Mai 2012 - 16:42

du coup j'ai essayé et ça m'a un peu surpris aussi d'être obligé de valider l'année par la croix alors qu'elle est déjà en place.
Tu aurais pu mettre également un spin sur l'année, quitte à proposer l'année 2012 courante en implicite, et valider d'office ce qu'il y a dedans ?
Ou mettre un bouton valider au lieu de 'Clear Date' (en français dans le texte Very Happy) et supprimer le bouton croix, ça aurait été plus simple, non ?

Mais c'est juste pour t'embêter Jean Claude.

PS si tu veux tu peux mettre 'Validate' au lieu de 'Valider', ça fait plus classieux Very Happy

Autre chose qui me gêne (mais ce n'est peut-être que moi): ton code n'est pas facile à lire sans les indentations, et avec les routines collées les unes aux autres.
Mais bon, tu me diras que ce n'est pas fait pour être lu par les autres.
Et moi je te répondrai: sauf ici.
Revenir en haut Aller en bas
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 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyVen 25 Mai 2012 - 17:06

Bon, je vois que mes explications sont insuffisante ou mal écrite....
Code:
aaaa$=right$(date$,4):mm$="":jj$="":' détermine les affichages par défault (année, mois et jour)
(facultatif)
@Ambroise, si l'année est grisé c'est parce que l'édit a le Focus, c'est pour permettre à l'utilisateur de changer la date. Mais toi, en tant que programmeur tu peux décider que l'édit soit vide en rectifiant la variable aaaa$ de la ligne 66 (voir extrait ci-dessus).

@JL35
Si je n'ai pas mis de spin c'est que si l'utilisateur veut une date de l'an 0001 et que je mets par défaut l'année en cours en position, je te laisse imaginer tout les jurons criés par l'utilisateur à l'encontre du programmeur quand il faudra qu'il passe de 2012 à 0001. Razz
Le bouton "clear date": bon ok on peut changer son caption par effacer ou recommencer, mais tout de même il permet à l'utilisateur de recommencer en cas d'erreur de saisie avant de valider. geek

@tous
Le bouton "X": il faudra que j'y réfléchisse car ce n'est pas assez intuitif.

Merci à vous pour vos réflexions pleines d'enseignements (Sauf celles de JL35 qui manifestement est de mauvaise foie Very Happy tongue Smile )

A+
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Utilitaire de saisie d'une date Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyVen 25 Mai 2012 - 17:18

Non, pas de mauvaise foie, mon foie va très bien (ma foi) !

1) ta remarque concernant le passage de 2012 à 0001: l'utilisateur n'est évidemment pas obligé de tout parcourir, il rentre l'année en dur, le spin est aussi un edit (double avantage).
Et si l'utilisateur veut rectifier avant de valider, il peut très bien le faire dans les fenêtres de saisie sans prévenir avant par un bouton !

2) autre chose, ta routine d'année bissextile comporte une lacune.
Je rappelle la règle, une année est bissextile:
- soit si elle est divisible par 4 mais non par 100
- soit si elle est divisible par 400
Ainsi l'année 2000 est bissextile, mais l'année 1900 n'est pas bissextile.
Je te fais cadeau de la routine:
Code:
bi=0: IF (FRAC(Annee/4)=0 AND FRAC(Annee/100)>0) OR FRAC(Annee/400)=0 THEN bi=1
Revenir en haut Aller en bas
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 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyVen 25 Mai 2012 - 17:37

Merci JL35 qui a la foi(e x s) pour le cadeau.

J'ai vérifié tes dires
Citation :
Depuis l'ajustement du calendrier grégorien, sont bissextiles les années1 :
soit divisibles par 4 mais non divisibles par 100 ;
soit divisibles par 400.
Donc, inversement, ne sont pas bissextiles les années :
soit non divisibles par 4 ;
soit divisibles par 100, mais pas par 400.
WIKIPEDIA

Je vais corriger cela.

Pour le spin, je ne pensais pas qu'il était aussi un édit, dans ce cas je crois que je vais l'adopter.

Il était une fois, dans la ville de Foix....... Very Happy
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Utilitaire de saisie d'une date Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyVen 25 Mai 2012 - 17:44

En plus il ne me fait pas confiance et il vérifie, c'est un comble ! Mad

Blague à part, ton format de saisie est inhabituel: MM, JJ AAAA, pourquoi pas le classique JJ MM AAAA ?
Revenir en haut Aller en bas
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 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyVen 25 Mai 2012 - 18:13

Cela aussi m'inquiète,
Mais au final la variable dat$ est au format JJ/MM/AAA. Le programmeur peut décider de changer ce format à la ligne 89.
Code:
dat$=jj$+"/"+mm$+"/"+aaaa$:' ici règlage du format de la date et récup des variables

Par contre la saisie commence par le mois et çà risque de dérouter l'utilisateur.
Si j'ai commencé par le mois c'est pour remplir le combo des jours avec 29,30 ou 31 suivant le mois sélectionné.

J'ai plusieurs options pour la saisie:
1) je fais tout à l'envers (c'est dire dans l'odre l'année, le mois, le jour)
2) si je commence par les jours alors il faudra que je teste la validité du mois et du jour sélectionné.
3) j'abandonne ma façon de faire et je reprends le programme de Bignono qui lui se fait dans un édit et contrôle les entées de l'utilisateur.

Ce que j'aime bien avec les combo(s) c'est que l'utilisateur utilise moins le clavier, dans ce cas c'est plutôt l'option 2.

Il n'en reste pas moins que la mise au ban d'essai de ce code est une bonne chose.
Je vais le revoir une fois de plus, pour l'améliorer.
Mais çà va pas être pour demain car j'ai d'autres occupations pour le Weekend.

A+
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Utilitaire de saisie d'une date Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyVen 25 Mai 2012 - 18:17

Tout de même Jean Claude il y a des priorités, et tu pourrais remettre ton we à plus tard Very Happy

Cela dit, à mon avis ce n'est pas le format final qui compte (on peut toujours le bricoler comme on veut par programme), mais l'interface utilisateur la plus simple et intuitive possible. Et ça ce n'est certes pas toujours évident pour le programmeur !
Revenir en haut Aller en bas
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 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date EmptyVen 25 Mai 2012 - 18:32

Tu as raison, mais ma philosophie est que le programmeur doit:
Prévoir les erreurs de saisie de l'utilisateur, lui faciliter la tache en lui proposant des programmes conviviales et intuitifs.....

ah ! s'il n'y avait pas d'utilisateurs, on pourrait faire ce qu'on veut. lol!

A+
Revenir en haut Aller en bas
Contenu sponsorisé





Utilitaire de saisie d'une date Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date Empty

Revenir en haut Aller en bas
 
Utilitaire de saisie d'une date
Revenir en haut 
Page 1 sur 4Aller à la page : 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: