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 4 Emptypar Pedro Aujourd'hui à 8:08

» Un autre pense-bête...
Utilitaire de saisie d'une date - Page 4 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 4 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Utilitaire de saisie d'une date - Page 4 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 4 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

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

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

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

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

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

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

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

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

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

» fichier.exe
Utilitaire de saisie d'une date - Page 4 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 : -25%
PC Portable Gamer 16,1” HP Victus 16 – 16 ...
Voir le deal
749.99 €

 

 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
AuteurMessage
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 4 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 4 EmptyMer 30 Mai 2012 - 1:29

Ah!, j'oubliais de vous dire que ce type de saisie de date est plus rapide que de cliquer sur des combos, car vous n'entrez que des chiffres et vous validez. C'est un gain de temps surtout si vous avez plusieurs centaines d'éléments ou dates à rentrer!
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 - Page 4 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 4 EmptyMer 30 Mai 2012 - 2:16

Bignono, je suis ravi que tu aies sorti de l’hôpital.

J’ai testé ton programme ; j’ai cherché la petite bête et je l’ai trouvée !
J’ai entré la date 01/01/0000 et ça a été acceptée. Or, dans notre calendrier grégorien l’année zéro n’existe pas !

A+

lol! lol!


Dernière édition par papydall le Mer 30 Mai 2012 - 2:57, édité 1 fois
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
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 - Page 4 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 4 EmptyMer 30 Mai 2012 - 2:56

D’après Wikipédia

Il n'existe pas d'an 0 dans l'ère chrétienne (Anno Domini). En effet l’usage du nombre 0 en Europe est postérieur à la création de l’Anno Domini. On passe donc directement de l’an 1 av. J.-C. à l’an 1 ap. J.-C.. Ainsi 1er janvier 1 marque le début de la première année, de la première décennie, du premier siècle, du premier millénaire de l'ère chrétienne, qui finissent respectivement le 31 décembre 1, le 31 décembre 10, le 31 décembre 100, le 31 décembre 1000. Ainsi le XXe siècle et le IIe millénaire se sont achevés le 31 décembre 2000 ; le IIIe millénaire et le XXIe siècle ont commencé le 1er janvier 2001.

A+
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
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 4 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 4 EmptyMer 30 Mai 2012 - 7:26

Bonjour, Papydall, Laughing
C'est un oubli de ma part, je le savais que l'an 0 n'a jamais existé. Dans mon premier programme sur la page 1 de ce post, il y a un test pour ce fait justement. Bon je réédite mon programme avec un test supplémentaire pour cette fameuse année 0 en ligne 36!
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 len(text$(3))=4 and val(text$(3))<1 then beep_error:message "L'année 0000 n'existe pas":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
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 - Page 4 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 4 EmptyMer 30 Mai 2012 - 7:36

Bravo Bignono, je crois que tu viens de passer devant nous tous.

Ton programme résiste à l'utilisateur vicieux sans problème. De plus, la saisie est rapide, dans l'ordre (jj/mm/aaa). Tu as , comme Klaus, gagné le prix "Jean Claude" (qui vaut pas grand chose) Very Happy Very Happy

Reste plus qu'a le transformer en routine pour pouvoir l'insérer dans un programme...

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 4 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 4 EmptyMer 30 Mai 2012 - 8:57

Bignono, je me joins à Jean Claude pour te féliciter et te remercier pour ce code génial. Je vais l'étudier de près.
Je me réjouis que tu sois rentré de l'hosto et te souhaite une bonne santé.
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 4 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 4 EmptyJeu 31 Mai 2012 - 11:08

Le code de Bignono m'ayant séduit, j'en ai fait une routine pour mon usage personnel.
Elle est facile à intégrer dans un programme.

Je vais tout de même pas la garder pour moi tout seul Very Happy
Code:

' Routine de saisie d'une date par Jean Claude et Bignono (mai 2012)

label saisie1,saisie2,sauve:' pour l'exemple
dim j1$,m1$,a1$:' pour l'exemple

dim no%:' Numéro des objets (sera augmentée de 7)
label initialise_routine_date:gosub initialise_routine_date:' mise en place de la routine


' 0+7=8
button 8:caption 8,"saisie 1":on_click 8,saisie1
button 9:top 9,30:caption 9,"saisie 2":on_click 9,saisie2
memo 10:top 10,200
button 11:top 11,60:caption 11,"Valide":on_click 11,sauve
END
' =============================== PROGRAMME ====================================
saisie1:
left container_date%,100:top container_date%,0:' règlage position du container
gosub saisie_date:' Premier appel de la routine pour saisir une date
return

saisie2:
' pour changer la position de la routine
left container_date%,250:top container_date%,0:' change la position du container
gosub saisie_date:' Deuxième appel de la routine pour saisir une date
return

sauve:
' hide container_date%:' masque (ou pas) la routine ici
item_add 10,jj$+"/"+mm$+"/"+aaaa$:' sauve la saisie dans le mémo 10
return

'==========================================================> ROUTINE SAISIE_DATE
' Règlages de sortie de la routine saisie_date
sortie_saisie_date:
' hide container_date%:' masque la routine ici (ou pas)
caption 0,jj$+"/"+mm$+"/"+aaaa$:' affiche (ou pas) le résultat
return

' ==================================================> Routine et gui saisie_date
saisie_date:
show container_date%:set_focus edit_jour%:' lance la routine pour saisir une date
return
' --- DIM,LABEL,GUI ----
initialise_routine_date:
dim jj$,mm$,aaaa$,edit_jour%,edit_mois%,edit_annee%,alpha_date1%,alpha_date2%
dim alpha_date3%,container_date%
label ctrl_date_1,ctrl_date_2,ctrl_date_3,valide,sortie_saisie_date,saisie_date
no%=no%+1:container_date%=no%
container no%:width no%,140:height no%,50
no%=no%+1:edit_jour%=no%:edit no%:parent no%,container_date%
left no%,10:top no%,25:width no%,20:height no%,17:on_change no%,ctrl_date_1
no%=no%+1:edit_mois%=no%:edit edit_mois%:parent no%,container_date%
left edit_mois%,50:top edit_mois%,25:width edit_mois%,20:height edit_mois%,17:on_change edit_mois%,ctrl_date_2
no%=no%+1:edit_annee%=no%:edit edit_annee%:parent no%,container_date%
left edit_annee%,93:top edit_annee%,25:width edit_annee%,33:height edit_annee%,17:on_change edit_annee%,ctrl_date_3:on_key_up edit_annee%,valide
no%=no%+1:alpha_date1%=no%:alpha alpha_date1%:parent no%,container_date%
left alpha_date1%,10:top alpha_date1%,10:font_size alpha_date1%,9:font_bold alpha_date1%:caption alpha_date1%," JJ      MM      AAAA"
no%=no%+1:alpha_date2%=no%:alpha alpha_date2%:parent no%,container_date%
left alpha_date2%,38:top alpha_date2%,25:font_size alpha_date2%,11:font_bold alpha_date2%:caption alpha_date2%,"/"
no%=no%+1:alpha_date3%=no%:alpha alpha_date3%:parent no%,container_date%
left alpha_date3%,78:top alpha_date3%,25:font_size alpha_date3%,11:font_bold alpha_date3%:caption alpha_date3%,"/"
hide container_date%
return
' ----------- routine saisie_date
ctrl_date_1:
if len(text$(edit_jour%))=0 then return
if numeric(right$(text$(edit_jour%),1))=0 or right$(text$(edit_jour%),1)="." then beep_error:message "En chiffres SVP":text ,"":return
if val(left$(text$(edit_jour%),1))>3 then beep_error:message "Le jour ne peut être supérieur à 31 SVP":text edit_jour%,"":return
if len(text$(edit_jour%))=2 and val(text$(edit_jour%))=0 or val(text$(edit_jour%))>31 then beep_error:message "Erreur jour (00 ou supérieur à 31)":text edit_jour%,"":return
if len(text$(edit_jour%))=2 then gosub ctrl_date_2:set_focus edit_mois%:gosub ctrl_date_2
return
ctrl_date_2:
if len(text$(edit_mois%))=0 then return
if numeric(right$(text$(edit_mois%),1))=0 or right$(text$(edit_mois%),1)="." then beep_error:message "En chiffres SVP":text edit_mois%,"":return
if val(left$(text$(edit_mois%),1))>1 then beep_error:message "Quantième mois ne peut être supérieur à 12 SVP":text edit_mois%,"":return
if len(text$(edit_mois%))=2 and val(text$(edit_mois%))=0 or val(text$(edit_mois%))>12 then beep_error:message "Erreur mois (00 ou supérieur à 12)":text edit_mois%,"":return
if text$(edit_jour%)<>""
  if (text$(edit_mois%)="02" and val(text$(edit_jour%))>29) then beep_error:message "Erreur: le mois de Février ne peut être supérieur à 29":text edit_jour%,"29"
  if text$(edit_mois%)="04" or text$(edit_mois%)="06" or text$(edit_mois%)="09" or text$(edit_mois%)="11" and val(text$(edit_jour%))>30 then beep_error:message "Les mois d'Avril, Juin, Septembre et Novembre n'ont que 30 jours":text edit_jour%,"30"
end_if
if len(text$(edit_mois%))=2 then set_focus edit_annee%
return
ctrl_date_3:
if len(text$(edit_annee%))=0 then return
if len(text$(edit_annee%))>4 then beep_error:message "Quatre chiffres maximum pour l'année SVP":text edit_annee%,left$(text$(edit_annee%),4):caret_position edit_annee%,4
if numeric(right$(text$(edit_annee%),1))=0 or right$(text$(edit_annee%),1)="." then beep_error:message "En chiffres SVP":text edit_annee%,"":return
if len(text$(edit_annee%))=4 and val(text$(edit_annee%))<1 then beep_error:message "L'année 0000 n'existe pas":text edit_annee%,"":return
if text$(edit_jour%)<>""
  if len(text$(edit_annee%))=4 and text$(edit_mois%)="02" and val(text$(edit_jour%))>28
      if val(text$(edit_annee%))-int(val(text$(edit_annee%))/100)*100=0
        if val(text$(edit_annee%))-int(val(text$(edit_annee%))/400)*400>0 then beep_error:message "Il n'y a que 28 jours en Février "+text$(edit_annee%):set_focus edit_jour%
      end_if
      if val(text$(edit_annee%))-int(val(text$(edit_annee%))/4)*4>0 then beep_error:message "Il n'y a que 28 jours en Février "+text$(edit_annee%):set_focus edit_jour%
  end_if
end_if
return
valide:
if key_up_code=13 and len(text$(edit_annee%))=4
  jj$=text$(edit_jour%):if jj$="" then jj$="  "
  mm$=text$(edit_mois%):if mm$="" then mm$="  "
  aaaa$=text$(edit_annee%):if aaaa$="" then aaaa$="    "
  text edit_jour%,"":text edit_mois%,"":text edit_annee%,"":set_focus edit_jour%
  gosub sortie_saisie_date
end_if
return
' ==============================================================================

A+


Dernière édition par Jean Claude le Jeu 31 Mai 2012 - 12:41, é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 - Page 4 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 4 EmptyJeu 31 Mai 2012 - 11:17

Jolie présentation. Bignono et toi devriez vous associer ... Merci.
Revenir en haut Aller en bas
http://genealogie.cwebh.org/index.html
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 - Page 4 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 4 EmptyJeu 31 Mai 2012 - 12:19

Salut Jean Claude.

Ta routine est super bien, mais tu n’as pas suivi Bignono pour corriger l’erreur de l’année zéro !
Alors, un dernier effort et ça frôlera la perfection !


lol!
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 - Page 4 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 4 EmptyJeu 31 Mai 2012 - 12:42

Plus vigilant que Papydall, çà n'existe pas.... Very Happy

C'est corrigé, maintenant c'est la perfection. queen

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 - Page 4 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 4 EmptyJeu 31 Mai 2012 - 12:52

Au lancement du programme, le bouton ‘Valide’ est actif (il ne devrait pas être).
Je me suis permis d’apporter la modification suivante :
Ligne 14, j’ai ajouté ‘INACTIVE 11’
Ligne 39, juste avant ‘RETURN’, j’ai ajouté ‘ACTIVE 11’
Entre la ligne 89 et la ligne 90, j’ai ajouté le test :
Code:

if text$(edit_annee%) = "0000" then beep_error:message "L'année 0000 n'existe pas" : text edit_annee%,"": return

Comme ça, on ne valide pas une date vide ni une année 0000 ! N’est-ce pas ?

lol!

PS:
J’ai vu ta correction après avoir posté mon message.

A+
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 - Page 4 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 4 EmptyJeu 31 Mai 2012 - 13:18

Pendant que tu postais, j'ai vu ce problème.

Je l'ai corrigé comme suit:
Code:
' Routine de saisie d'une date par Jean Claude et Bignono (mai 2012)

label saisie1,saisie2,sauve:' pour l'exemple
dim j1$,m1$,a1$:' pour l'exemple

dim no%:' Numéro des objets (sera augmentée de 7)
label initialise_routine_date:gosub initialise_routine_date:' mise en place de la routine


' 0+7=8
button 8:caption 8,"saisie 1":on_click 8,saisie1
button 9:top 9,30:caption 9,"saisie 2":on_click 9,saisie2
memo 10:top 10,200
button 11:top 11,60:caption 11,"Valide":on_click 11,sauve:inactive 11
END
' =============================== PROGRAMME ====================================
saisie1:
left container_date%,100:top container_date%,0:' règlage position du container
gosub saisie_date:' Premier appel de la routine pour saisir une date
active 11
return

saisie2:
' pour changer la position de la routine
left container_date%,250:top container_date%,0:' change la position du container
gosub saisie_date:' Deuxième appel de la routine pour saisir une date
active 11
return

sauve:
if jj$="" or mm$="" or aaaa$="" then message "Soit votre saisie est incomplète, soit vous n'avez pas appuyé sur Entrée à la fin":return
' hide container_date%:' masque (ou pas) la routine ici
item_add 10,jj$+"/"+mm$+"/"+aaaa$:' sauve la saisie dans le mémo 10
inactive 11
return

'==========================================================> ROUTINE SAISIE_DATE
' Règlages de sortie de la routine saisie_date
sortie_saisie_date:
' hide container_date%:' masque la routine ici (ou pas)
caption 0,jj$+"/"+mm$+"/"+aaaa$:' affiche (ou pas) le résultat
return

' ==================================================> Routine et gui saisie_date
saisie_date:
show container_date%:set_focus edit_jour%:' lance la routine pour saisir une date
return
' --- DIM,LABEL,GUI ----
initialise_routine_date:
dim jj$,mm$,aaaa$,edit_jour%,edit_mois%,edit_annee%,alpha_date1%,alpha_date2%
dim alpha_date3%,container_date%
label ctrl_date_1,ctrl_date_2,ctrl_date_3,valide,sortie_saisie_date,saisie_date
no%=no%+1:container_date%=no%
container no%:width no%,140:height no%,50
no%=no%+1:edit_jour%=no%:edit no%:parent no%,container_date%
left no%,10:top no%,25:width no%,20:height no%,17:on_change no%,ctrl_date_1
no%=no%+1:edit_mois%=no%:edit edit_mois%:parent no%,container_date%
left edit_mois%,50:top edit_mois%,25:width edit_mois%,20:height edit_mois%,17:on_change edit_mois%,ctrl_date_2
no%=no%+1:edit_annee%=no%:edit edit_annee%:parent no%,container_date%
left edit_annee%,93:top edit_annee%,25:width edit_annee%,33:height edit_annee%,17:on_change edit_annee%,ctrl_date_3:on_key_up edit_annee%,valide
no%=no%+1:alpha_date1%=no%:alpha alpha_date1%:parent no%,container_date%
left alpha_date1%,10:top alpha_date1%,10:font_size alpha_date1%,9:font_bold alpha_date1%:caption alpha_date1%," JJ      MM      AAAA"
no%=no%+1:alpha_date2%=no%:alpha alpha_date2%:parent no%,container_date%
left alpha_date2%,38:top alpha_date2%,25:font_size alpha_date2%,11:font_bold alpha_date2%:caption alpha_date2%,"/"
no%=no%+1:alpha_date3%=no%:alpha alpha_date3%:parent no%,container_date%
left alpha_date3%,78:top alpha_date3%,25:font_size alpha_date3%,11:font_bold alpha_date3%:caption alpha_date3%,"/"
hide container_date%
return
' ----------- routine saisie_date
ctrl_date_1:
if len(text$(edit_jour%))=0 then return
if numeric(right$(text$(edit_jour%),1))=0 or right$(text$(edit_jour%),1)="." then beep_error:message "En chiffres SVP":text ,"":return
if val(left$(text$(edit_jour%),1))>3 then beep_error:message "Le jour ne peut être supérieur à 31 SVP":text edit_jour%,"":return
if len(text$(edit_jour%))=2 and val(text$(edit_jour%))=0 or val(text$(edit_jour%))>31 then beep_error:message "Erreur jour (00 ou supérieur à 31)":text edit_jour%,"":return
if len(text$(edit_jour%))=2 then gosub ctrl_date_2:set_focus edit_mois%:gosub ctrl_date_2
return
ctrl_date_2:
if len(text$(edit_mois%))=0 then return
if numeric(right$(text$(edit_mois%),1))=0 or right$(text$(edit_mois%),1)="." then beep_error:message "En chiffres SVP":text edit_mois%,"":return
if val(left$(text$(edit_mois%),1))>1 then beep_error:message "Quantième mois ne peut être supérieur à 12 SVP":text edit_mois%,"":return
if len(text$(edit_mois%))=2 and val(text$(edit_mois%))=0 or val(text$(edit_mois%))>12 then beep_error:message "Erreur mois (00 ou supérieur à 12)":text edit_mois%,"":return
if text$(edit_jour%)<>""
  if (text$(edit_mois%)="02" and val(text$(edit_jour%))>29) then beep_error:message "Erreur: le mois de Février ne peut être supérieur à 29":text edit_jour%,"29"
  if text$(edit_mois%)="04" or text$(edit_mois%)="06" or text$(edit_mois%)="09" or text$(edit_mois%)="11" and val(text$(edit_jour%))>30 then beep_error:message "Les mois d'Avril, Juin, Septembre et Novembre n'ont que 30 jours":text edit_jour%,"30"
end_if
if len(text$(edit_mois%))=2 then set_focus edit_annee%
return
ctrl_date_3:
if len(text$(edit_annee%))=0 then return
if len(text$(edit_annee%))>4 then beep_error:message "Quatre chiffres maximum pour l'année SVP":text edit_annee%,left$(text$(edit_annee%),4):caret_position edit_annee%,4
if numeric(right$(text$(edit_annee%),1))=0 or right$(text$(edit_annee%),1)="." then beep_error:message "En chiffres SVP":text edit_annee%,"":return
if len(text$(edit_annee%))=4 and val(text$(edit_annee%))<1 then beep_error:message "L'année 0000 n'existe pas":text edit_annee%,"":return
if text$(edit_jour%)<>""
  if len(text$(edit_annee%))=4 and text$(edit_mois%)="02" and val(text$(edit_jour%))>28
      if val(text$(edit_annee%))-int(val(text$(edit_annee%))/100)*100=0
        if val(text$(edit_annee%))-int(val(text$(edit_annee%))/400)*400>0 then beep_error:message "Il n'y a que 28 jours en Février "+text$(edit_annee%):set_focus edit_jour%
      end_if
      if val(text$(edit_annee%))-int(val(text$(edit_annee%))/4)*4>0 then beep_error:message "Il n'y a que 28 jours en Février "+text$(edit_annee%):set_focus edit_jour%
  end_if
end_if
return
valide:
if key_up_code=13 and len(text$(edit_annee%))=4
  jj$=text$(edit_jour%):if jj$="" then jj$="  "
  mm$=text$(edit_mois%):if mm$="" then mm$="  "
  aaaa$=text$(edit_annee%):if aaaa$="" then aaaa$="    "
  text edit_jour%,"":text edit_mois%,"":text edit_annee%,"":set_focus edit_jour%
  gosub sortie_saisie_date
end_if
return

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 - Page 4 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 4 EmptyJeu 31 Mai 2012 - 18:11

Hello Jean Claude.

Le bouton ‘Valide’ devient actif dès qu’on saisit une partie de la date, mais n’accepte pas de valider tant que la saisie n’est pas complète. C’est correct.
Mais alors on fait une petite gymnastique : on ferme la boite du message d’erreur, on clique dans le champ de la saisie (car on a perdu le focus), on continue la saisie (et si on ne la complète pas : on rentre dans la même boucle), et enfin on valide !

La modification que j’ai faite, moi, ne rend le bouton ‘Valide’ actif qu’une fois la date est saisie correctement.
Aussi, j’ai ajouté un bouton ‘Quitter’ qui permet, justement de quitter le programme sans passer par la croix rouge.

Ce n’est qu’une question de point de vue différente.
Code:

' Routine de saisie d'une date par Jean Claude et Bignono (mai 2012)

label saisie1,saisie2,sauve,quit:' pour l'exemple
dim j1$,m1$,a1$:' pour l'exemple

dim no%:' Numéro des objets (sera augmentée de 7)
label initialise_routine_date:gosub initialise_routine_date:' mise en place de la routine


' 0+7=8
button 8:caption 8,"saisie 1":on_click 8,saisie1
button 9:top 9,30:caption 9,"saisie 2":on_click 9,saisie2
memo 10:top 10,200
button 11:top 11,60:caption 11,"Valide" : inactive 11  :  on_click 11,sauve
button 12:top 12,90:caption 12,"Quitter":on_click 12,quit
END
' =============================== PROGRAMME ====================================
saisie1:
left container_date%,100:top container_date%,0:' règlage position du container
gosub saisie_date:' Premier appel de la routine pour saisir une date
return

saisie2:
' pour changer la position de la routine
left container_date%,250:top container_date%,0:' change la position du container
gosub saisie_date:' Deuxième appel de la routine pour saisir une date
return

sauve:
' hide container_date%:' masque (ou pas) la routine ici
item_add 10,jj$+"/"+mm$+"/"+aaaa$:' sauve la saisie dans le mémo 10

return

'==========================================================> ROUTINE SAISIE_DATE
' Règlages de sortie de la routine saisie_date
sortie_saisie_date:
' hide container_date%:' masque la routine ici (ou pas)
caption 0,jj$+"/"+mm$+"/"+aaaa$:' affiche (ou pas) le résultat
active 11
return

' ==================================================> Routine et gui saisie_date
saisie_date:
show container_date%:set_focus edit_jour%:' lance la routine pour saisir une date
return
' --- DIM,LABEL,GUI ----
initialise_routine_date:
dim jj$,mm$,aaaa$,edit_jour%,edit_mois%,edit_annee%,alpha_date1%,alpha_date2%
dim alpha_date3%,container_date%
label ctrl_date_1,ctrl_date_2,ctrl_date_3,valide,sortie_saisie_date,saisie_date
no%=no%+1:container_date%=no%
container no%:width no%,140:height no%,50
no%=no%+1:edit_jour%=no%:edit no%:parent no%,container_date%
left no%,10:top no%,25:width no%,20:height no%,17:on_change no%,ctrl_date_1
no%=no%+1:edit_mois%=no%:edit edit_mois%:parent no%,container_date%
left edit_mois%,50:top edit_mois%,25:width edit_mois%,20:height edit_mois%,17:on_change edit_mois%,ctrl_date_2
no%=no%+1:edit_annee%=no%:edit edit_annee%:parent no%,container_date%
left edit_annee%,93:top edit_annee%,25:width edit_annee%,33:height edit_annee%,17:on_change edit_annee%,ctrl_date_3:on_key_up edit_annee%,valide
no%=no%+1:alpha_date1%=no%:alpha alpha_date1%:parent no%,container_date%
left alpha_date1%,10:top alpha_date1%,10:font_size alpha_date1%,9:font_bold alpha_date1%:caption alpha_date1%," JJ      MM      AAAA"
no%=no%+1:alpha_date2%=no%:alpha alpha_date2%:parent no%,container_date%
left alpha_date2%,38:top alpha_date2%,25:font_size alpha_date2%,11:font_bold alpha_date2%:caption alpha_date2%,"/"
no%=no%+1:alpha_date3%=no%:alpha alpha_date3%:parent no%,container_date%
left alpha_date3%,78:top alpha_date3%,25:font_size alpha_date3%,11:font_bold alpha_date3%:caption alpha_date3%,"/"
hide container_date%
return
' ----------- routine saisie_date
ctrl_date_1:
if len(text$(edit_jour%))=0 then return
if numeric(right$(text$(edit_jour%),1))=0 or right$(text$(edit_jour%),1)="." then beep_error:message "En chiffres SVP":text ,"":return
if val(left$(text$(edit_jour%),1))>3 then beep_error:message "Le jour ne peut être supérieur à 31 SVP":text edit_jour%,"":return
if len(text$(edit_jour%))=2 and val(text$(edit_jour%))=0 or val(text$(edit_jour%))>31 then beep_error:message "Erreur jour (00 ou supérieur à 31)":text edit_jour%,"":return
if len(text$(edit_jour%))=2 then gosub ctrl_date_2:set_focus edit_mois%:gosub ctrl_date_2
return
ctrl_date_2:
if len(text$(edit_mois%))=0 then return
if numeric(right$(text$(edit_mois%),1))=0 or right$(text$(edit_mois%),1)="." then beep_error:message "En chiffres SVP":text edit_mois%,"":return
if val(left$(text$(edit_mois%),1))>1 then beep_error:message "Quantième mois ne peut être supérieur à 12 SVP":text edit_mois%,"":return
if len(text$(edit_mois%))=2 and val(text$(edit_mois%))=0 or val(text$(edit_mois%))>12 then beep_error:message "Erreur mois (00 ou supérieur à 12)":text edit_mois%,"":return
if text$(edit_jour%)<>""
  if (text$(edit_mois%)="02" and val(text$(edit_jour%))>29) then beep_error:message "Erreur: le mois de Février ne peut être supérieur à 29":text edit_jour%,"29"
  if text$(edit_mois%)="04" or text$(edit_mois%)="06" or text$(edit_mois%)="09" or text$(edit_mois%)="11" and val(text$(edit_jour%))>30 then beep_error:message "Les mois d'Avril, Juin, Septembre et Novembre n'ont que 30 jours":text edit_jour%,"30"
end_if
if len(text$(edit_mois%))=2 then set_focus edit_annee%
return
ctrl_date_3:
if len(text$(edit_annee%))=0 then return
if len(text$(edit_annee%))>4 then beep_error:message "Quatre chiffres maximum pour l'année SVP":text edit_annee%,left$(text$(edit_annee%),4):caret_position edit_annee%,4
if numeric(right$(text$(edit_annee%),1))=0 or right$(text$(edit_annee%),1)="." then beep_error:message "En chiffres SVP":text edit_annee%,"":return
if text$(edit_annee%) = "0000" then beep_error:message "L'année 0000 n'existe pas" :text edit_annee%,"":return
if text$(edit_jour%)<>""
  if len(text$(edit_annee%))=4 and text$(edit_mois%)="02" and val(text$(edit_jour%))>28
      if val(text$(edit_annee%))-int(val(text$(edit_annee%))/100)*100=0
        if val(text$(edit_annee%))-int(val(text$(edit_annee%))/400)*400>0 then beep_error:message "Il n'y a que 28 jours en Février "+text$(edit_annee%):set_focus edit_jour%
      end_if
      if val(text$(edit_annee%))-int(val(text$(edit_annee%))/4)*4>0 then beep_error:message "Il n'y a que 28 jours en Février "+text$(edit_annee%):set_focus edit_jour%
  end_if
end_if

return
valide:
if key_up_code=13 and len(text$(edit_annee%))=4
  jj$=text$(edit_jour%):if jj$="" then jj$="  "
  mm$=text$(edit_mois%):if mm$="" then mm$="  "
  aaaa$=text$(edit_annee%):if aaaa$="" then aaaa$="    "
  text edit_jour%,"":text edit_mois%,"":text edit_annee%,"":set_focus edit_jour%
  gosub sortie_saisie_date
end_if

return
quit:
terminate
return

' ======================================================================

NB : dans le cas où tu approuves ces modifications, je me permets (pour ce programme) de donner 50% à Bignono, 49% à toi et le 1% restant je le garde pour moi ! Ainsi, j’espère gagner le prix Jean Claude. Laughing Laughing

Dernière question : pourquoi 2 boutons de saisie ‘saisie 1’ et ‘saisie 2’ ? quelque chose doit m’échapper.

lol! lol!
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 - Page 4 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 4 EmptyJeu 31 Mai 2012 - 20:35

Bravo Papydall, le déplacement de ACTIVE11 dans la partie "sortie_saisie_date" est la solution.
Du coup j'ai renommé le bouton "Valide" par "Sauve", çà me semble plus exact.

Par contre le bouton 'Quitter" n'a pas sa place car il termine le programme, et c'est pas le but.
Je m'explique: ce code est une routine (cela t'as peut-être échappé) donc elle est faite pour être intégrée dans un autre code.
On peut imaginer, à la place de "quitter", un bouton "fermer la routine date" et dans ce cas on fait un HIDE sur tout les objets actifs et le programme continue. L'idéal serait d'intégrer les bouton "sauve" et "fermer la routine date" dans le container date.

Si j'ai fait 2 boutons pour la saisie, c'est uniquement pour montrer que l'on peut changer la position de la routine autant de fois que l'on veut dans le programme destination.
Ce n'est pas un programme en soi, mais une routine.

toutefois, je t'accorde le 1% pour le déplacement de ACTIVE 11 au bon LABEL. lol! . Tu as donné 50% à Bignono, mais il mérite plus car la base du code c'est la sienne, moi je n'ai fait que de transformer en routine et l'intéger dans un container.

lol! lol! lol!
.
Je mets le code revu:

Code:
' Routine de saisie d'une date par Jean Claude et Bignono (mai 2012)
' et modifié sur une suggestion de Papydall

label saisie1,saisie2,sauve,quit:' pour l'exemple
dim j1$,m1$,a1$:' pour l'exemple

dim no%:' Numéro des objets (sera augmentée de 7)
label initialise_routine_date:gosub initialise_routine_date:' mise en place de la routine


' 0+7=8
button 8:caption 8,"saisie 1":on_click 8,saisie1
button 9:top 9,30:caption 9,"saisie 2":on_click 9,saisie2
memo 10:top 10,200
button 11:top 11,60:caption 11,"Sauve" : inactive 11  :  on_click 11,sauve
button 12:top 12,90:caption 12,"Quitter":on_click 12,quit
END
' =============================== PROGRAMME ====================================
saisie1:
left container_date%,100:top container_date%,0:' règlage position du container
gosub saisie_date:' Premier appel de la routine pour saisir une date
return

saisie2:
' pour changer la position de la routine
left container_date%,250:top container_date%,0:' change la position du container
gosub saisie_date:' Deuxième appel de la routine pour saisir une date
return

sauve:
' hide container_date%:' masque (ou pas) la routine ici
item_add 10,jj$+"/"+mm$+"/"+aaaa$:' sauve la saisie dans le mémo 10

return

'==========================================================> ROUTINE SAISIE_DATE
' Règlages de sortie de la routine saisie_date
sortie_saisie_date:
' hide container_date%:' masque la routine ici (ou pas)
caption 0,jj$+"/"+mm$+"/"+aaaa$:' affiche (ou pas) le résultat
active 11:' ici c'est le bouton sauve
return

' ==================================================> Routine et gui saisie_date
saisie_date:
show container_date%:set_focus edit_jour%:' lance la routine pour saisir une date
return
' --- DIM,LABEL,GUI ----
initialise_routine_date:
dim jj$,mm$,aaaa$,edit_jour%,edit_mois%,edit_annee%,alpha_date1%,alpha_date2%
dim alpha_date3%,container_date%
label ctrl_date_1,ctrl_date_2,ctrl_date_3,valide,sortie_saisie_date,saisie_date
no%=no%+1:container_date%=no%
container no%:width no%,140:height no%,50
no%=no%+1:edit_jour%=no%:edit no%:parent no%,container_date%
left no%,10:top no%,25:width no%,20:height no%,17:on_change no%,ctrl_date_1
no%=no%+1:edit_mois%=no%:edit edit_mois%:parent no%,container_date%
left edit_mois%,50:top edit_mois%,25:width edit_mois%,20:height edit_mois%,17:on_change edit_mois%,ctrl_date_2
no%=no%+1:edit_annee%=no%:edit edit_annee%:parent no%,container_date%
left edit_annee%,93:top edit_annee%,25:width edit_annee%,33:height edit_annee%,17:on_change edit_annee%,ctrl_date_3:on_key_up edit_annee%,valide
no%=no%+1:alpha_date1%=no%:alpha alpha_date1%:parent no%,container_date%
left alpha_date1%,10:top alpha_date1%,10:font_size alpha_date1%,9:font_bold alpha_date1%:caption alpha_date1%," JJ      MM      AAAA"
no%=no%+1:alpha_date2%=no%:alpha alpha_date2%:parent no%,container_date%
left alpha_date2%,38:top alpha_date2%,25:font_size alpha_date2%,11:font_bold alpha_date2%:caption alpha_date2%,"/"
no%=no%+1:alpha_date3%=no%:alpha alpha_date3%:parent no%,container_date%
left alpha_date3%,78:top alpha_date3%,25:font_size alpha_date3%,11:font_bold alpha_date3%:caption alpha_date3%,"/"
hide container_date%
return
' ----------- routine saisie_date
ctrl_date_1:
if len(text$(edit_jour%))=0 then return
if numeric(right$(text$(edit_jour%),1))=0 or right$(text$(edit_jour%),1)="." then beep_error:message "En chiffres SVP":text ,"":return
if val(left$(text$(edit_jour%),1))>3 then beep_error:message "Le jour ne peut être supérieur à 31 SVP":text edit_jour%,"":return
if len(text$(edit_jour%))=2 and val(text$(edit_jour%))=0 or val(text$(edit_jour%))>31 then beep_error:message "Erreur jour (00 ou supérieur à 31)":text edit_jour%,"":return
if len(text$(edit_jour%))=2 then gosub ctrl_date_2:set_focus edit_mois%:gosub ctrl_date_2
return
ctrl_date_2:
if len(text$(edit_mois%))=0 then return
if numeric(right$(text$(edit_mois%),1))=0 or right$(text$(edit_mois%),1)="." then beep_error:message "En chiffres SVP":text edit_mois%,"":return
if val(left$(text$(edit_mois%),1))>1 then beep_error:message "Quantième mois ne peut être supérieur à 12 SVP":text edit_mois%,"":return
if len(text$(edit_mois%))=2 and val(text$(edit_mois%))=0 or val(text$(edit_mois%))>12 then beep_error:message "Erreur mois (00 ou supérieur à 12)":text edit_mois%,"":return
if text$(edit_jour%)<>""
  if (text$(edit_mois%)="02" and val(text$(edit_jour%))>29) then beep_error:message "Erreur: le mois de Février ne peut être supérieur à 29":text edit_jour%,"29"
  if text$(edit_mois%)="04" or text$(edit_mois%)="06" or text$(edit_mois%)="09" or text$(edit_mois%)="11" and val(text$(edit_jour%))>30 then beep_error:message "Les mois d'Avril, Juin, Septembre et Novembre n'ont que 30 jours":text edit_jour%,"30"
end_if
if len(text$(edit_mois%))=2 then set_focus edit_annee%
return
ctrl_date_3:
if len(text$(edit_annee%))=0 then return
if len(text$(edit_annee%))>4 then beep_error:message "Quatre chiffres maximum pour l'année SVP":text edit_annee%,left$(text$(edit_annee%),4):caret_position edit_annee%,4
if numeric(right$(text$(edit_annee%),1))=0 or right$(text$(edit_annee%),1)="." then beep_error:message "En chiffres SVP":text edit_annee%,"":return
if text$(edit_annee%) = "0000" then beep_error:message "L'année 0000 n'existe pas" :text edit_annee%,"":return
if text$(edit_jour%)<>""
  if len(text$(edit_annee%))=4 and text$(edit_mois%)="02" and val(text$(edit_jour%))>28
      if val(text$(edit_annee%))-int(val(text$(edit_annee%))/100)*100=0
        if val(text$(edit_annee%))-int(val(text$(edit_annee%))/400)*400>0 then beep_error:message "Il n'y a que 28 jours en Février "+text$(edit_annee%):set_focus edit_jour%
      end_if
      if val(text$(edit_annee%))-int(val(text$(edit_annee%))/4)*4>0 then beep_error:message "Il n'y a que 28 jours en Février "+text$(edit_annee%):set_focus edit_jour%
  end_if
end_if

return
valide:
if key_up_code=13 and len(text$(edit_annee%))=4
  jj$=text$(edit_jour%):if jj$="" then jj$="  "
  mm$=text$(edit_mois%):if mm$="" then mm$="  "
  aaaa$=text$(edit_annee%):if aaaa$="" then aaaa$="    "
  text edit_jour%,"":text edit_mois%,"":text edit_annee%,"":set_focus edit_jour%
  gosub sortie_saisie_date
end_if

return

quit:
' hide pour tout les objets à la place de terminate
terminate
return

A+

05/06/2012:Voici une version plus facile à adapter avec toutes les explications:

Code:
' Routine saisie_date par Jean Claude (version juin 2012)

' Objectif de cette routine:
' - Saisir une date à partir d'une routine utilisable dans un maximun de cas
'
' - Proposer 3 choix de date par défaut:
'            1) sans date - 2) avec la date du jour - 3) avec la dernière date saisie
'            Pouvoir valider la date par défaut en un seul clic
'            Pouvoir revenir en arrière pendant la saisie
'            Pouvoir changer un seul élément (s'il y a une date par défault)
'
' - Utiliser plusieurs fois la routine dans le même programme
'      et pouvoir changer sa position et la date par défaut
'
' - Gérer la sortie de la routine au label RETOUR_DATE
' - A la sortie récupérer 4 variables:
'                                  1) dat$ = date complète au format JJ/MM/AAAA
'                            2, 3, 4) jj$ = jour / mm$ = mois / aaaa$ = année
'
' - Une seule ligne à insérer dans le Programme_destination avant le premier END
'  Pas de gestion des dim et label

' - Seulement 2 paramètres facultatifs à renseigner avant de lancer par "gosub date"
'  (s'ils ne le sont pas la position sera 0,0 et il n'y aura pas de dates par défaut)

' Remarque: utilise 9 objets panoramic, 18 variables ( dont 4 pour le retour) et 15 labels

' ========================================================================================
dim no%,n%,bouton,x,y:label bouton:' en principe existe déjà dans le programme destination
no%=no%+1:button no%:caption no%,"Suite":hide no%:' ici no%=1
label Programme_destination,Programme_destination_suite

' la seule ligne à insérer (AVANT LE PRELIER END) pour disposer de la rouine
dim container_date%:label init_saisie_date:gosub init_saisie_date:' Mise en place
' ici no%=10 donc la routine à ajouté 9 objets Panoramic

gosub Programme_destination

END
' ============================== PROGRAMME ======================================
Programme_destination:
' les 3 lignes à placer dans le programme pour démarrer la routine
top_date%=100:left_date%=100:'  règlage Position container_date% avant de démarrer
aaaa$=right$(date$,4):mm$=mid$(date$,4,2):jj$=left$(date$,2):' départ avec date du jour (ou pas)
gosub date:' démarre la routine pour une première saisie
return

Programme_destination_suite:
' exemple de réutilisation de la routine dans le même programme

top_date%=300:left_date%=100:'  Change la Position container_date% avant de continuer

' aaaa$="":mm$="":jj$="":' continu avec date vierge
' OU
' aaaa$=right$(date$,4):mm$=mid$(date$,4,2):jj$=left$(date$,2):' continu avec date du jour
' OU
' ne rien préciser (dans ce cas c'est la dernière date saisie qui est par défault)

gosub date:' 2ème saisie
return

' ===================== ROUTINE: Saisie_ date (Partie à gérer) =================
RETOUR_DATE:
' réinitialise le bouton saisie date
caption no%,"Saisie Date":on_click bouton_date%,date
hint bouton_date%," démarrer la saisie de la Date ":hide bouton_date%
hide container_date%:' désactive provisoirement la routine

' RETOUR_DATE: ici choisir l'affichage et récupération des 4 variables (jj$, mm$, aaaa$, dat$)
caption 0,dat$:' affichage ou remplissage d'un fichier

show 1:on_click 1,Programme_destination_suite:' gestion du RETOUR au programme
return
' ===================== ROUTINE: Saisie_ date (Partie Fixe) ====================
date:
top bouton_date%,top_date%+10:left bouton_date%,left_date%+240
show bouton_date%:on_click bouton_date%,sd10
return
sd10:
inactive bouton_date%
gosub saisie_date
on_click bouton_date%,RETOUR_DATE
return
' ----------
saisie_date:
top container_date%,top_date%:left container_date%,left_date%:' Applique Position
show container_date%:gosub reinit_saisie_date
if aaaa$<>"" and mm$<>"" and jj$<>"" then active alpha_valide%
if aaaa$<>"" then text edit_annee%,aaaa$
if aaaa$<>"" then active alpha_suite%
if mm$<>"" then text combo_mois%,mm$
if jj$<>"" then text combo_jour%,jj$
if mm$="" then text combo_mois%,"Mois"
if jj$="" then text combo_jour%,"Jour"
if aaaa$="" then text edit_annee%,"Année"
set_focus edit_annee%:on_change edit_annee%,sd1
on_click alpha_suite%,sd3
on_click alpha_retour%,saisie_date
on_click alpha_valide%,sd9
return
sd1:
if numeric(text$(edit_annee%))=0 then text edit_annee%,"":return
if text$(edit_annee%)="Année" then return
if len(text$(edit_annee%))<4 then return
sd2:
aaaa$=text$(edit_annee%)
goto sd4
sd3:
bouton=alpha_suite%:gosub bouton
sd4:
inactive edit_annee%:inactive alpha_suite%:active alpha_retour%
aaaa%=val(aaaa$):bis%=0:IF (FRAC(aaaa%/4)=0 AND FRAC(aaaa%/100)>0) OR FRAC(aaaa%/400)=0 THEN bis%=1:' JL35
if mm$<>"" then active alpha_suite2%:on_click alpha_suite2%,sd6
active combo_mois%:on_click combo_mois%,sd5
inactive bouton_date%
return
sd5:
if text$(combo_mois%)="Mois" then return
mm$=item_index$(combo_mois%)
goto sd7
sd6:
bouton=alpha_suite%:gosub bouton
sd7:
text combo_mois%,mm$:clear combo_jour%:maxj%=0
if jj$<>"" then text combo_jour%,jj$
if jj$="" then text combo_jour%,"Jour"
inactive combo_mois%:inactive alpha_suite2%
if mm$="04" or mm$="06" or mm$="09" or mm$="11"
  maxj%=30
  else
  maxj%=31
end_if
if mm$="02"
  if bis%=1
  maxj%=29
  else
  maxj%=28
  end_if
end_if
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%:on_click combo_jour%,sd8
return
sd8:
jj$=item_index$(combo_jour%)
active alpha_valide%
return
sd9:
dat$=jj$+"/"+mm$+"/"+aaaa$
' gosub reinit_saisie_date
hint bouton_date%," Valider la Date et Quitter "
active bouton_date%:caption bouton_date%,"Quitter"
goto saisie_date
return
' -----------------
reinit_saisie_date:
inactive alpha_suite%:inactive alpha_suite2%
inactive combo_mois%:' text combo_mois%,"Mois"
inactive combo_jour%:' text combo_jour%,"Jour"
if jj$<>""
 if val(jj$)>28 and mm$="02" then text combo_jour%,"Jour":jj$=""
end_if
inactive alpha_valide%:inactive alpha_retour%
active edit_annee%
return
' ---------------
init_saisie_date:
dim top_date%,left_date%,edit_annee%,alpha_suite%,combo_mois%,alpha_suite2%,bouton_date%
dim combo_jour%,alpha_valide%,alpha_retour%,aaaa$,mm$,dat$,jj$,bis%,aaaa%,maxj%
label reinit_saisie_date,saisie_date,sd1,sd2,sd3,sd4,sd5,sd6,sd7,sd8,sd9,sd10,date,RETOUR_DATE
no%=no%+1:container_date%=no%:container no%:width no%,320:height no%,38:hide no%
no%=no%+1:edit_annee%=no%:edit no%:parent no%,container_date%
        width no%,40:top no%,11:left no%,5:text no%,"Année"
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:hint no%," Valider l'Année et Continuer ":inactive no%
no%=no%+1:combo_mois%=no%:combo no%:parent no%,container_date%:text no%,"Mois"
        width no%,50: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%
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:inactive no%
no%=no%+1:combo_jour%=no%:combo no%:parent no%,container_date%:text no%,"Jour"
        width no%,50:top no%,11:left no%,140:inactive no%
no%=no%+1:alpha_valide%=no%:alpha no%:parent no%,container_date%:hint no%," Valider la Date "
        font_name no%,"Symbol":font_size no%,16:caption no%,chr$(197)
        top no%,7:left no%,193: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:inactive no%
no%=no%+1:bouton_date%=no%:button no%:caption no%,"Saisie Date":on_click bouton_date%,date
        height no%,21:hint bouton_date%," démarrer la saisie de la Date ":hide bouton_date%
        return
' ===============================================================================
' ajouter cette routine d'animation des boutons (si pas déja dans le code destination)
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
.


Dernière édition par Jean Claude le Mar 5 Juin 2012 - 16:13, édité 1 fois
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 - Page 4 Empty
MessageSujet: Re: Utilitaire de saisie d'une date   Utilitaire de saisie d'une date - Page 4 EmptyJeu 31 Mai 2012 - 22:40

Bravo, Jean Claude, pour les explications.

Je dois bosser encore plus pour espérer recevoir le prix !

Laughing Cool
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Contenu sponsorisé





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

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