[RESOLU] Encore un problème de date

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
omega
Messages : 617
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

[RESOLU] Encore un problème de date

Message par omega »

Bonjour,
Il me semble avoir déjà signalé ce genre de problème mais j'ai oublié la solution (ça date depuis plus de 3 ans je crois). Décidément, depuis que je suis passé à la version Pb5.62, je rencontre des petits problèmes au niveau de la manipulation de certains gadgets. Aujourd'hui, il s'agit de DateGadget. Quand on affiche une date donnée (celle du jour en cours par exemple), il se sera plus possible de la modifier manuellement. Pourquoi?

Code : Tout sélectionner

Enumeration
#WinTable
#client_txtDateN
#client_DateN
EndEnumeration

ExitTable=0
wMask$=FormatDate("%dd/%mm/%yyyy", Date())

OpenWindow(#Wintable,100,100,500,500, "Test date", #PB_Window_SystemMenu|  #PB_Window_ScreenCentered)
TextGadget(#Client_TxtDateN,50,30, 120, 20, "Date de naissance:" )
DateGadget(#Client_DateN,180,30, 100, 20,wmask$)

Repeat
EventId=WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
   ExitTable=1
EndIf
Until  ExitTable=1
CloseWindow(#Wintable)
End
Essayez de modifier la date manuellement..

Merci
Dernière modification par omega le mar. 26/juin/2018 22:46, modifié 1 fois.
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Encore un problème de date

Message par microdevweb »

Voici ton code corrigé, le problème était que tu formatait avec la date du jour

Code : Tout sélectionner

Enumeration
#WinTable
#client_txtDateN
#client_DateN
EndEnumeration

ExitTable=0


OpenWindow(#Wintable,100,100,500,500, "Test date", #PB_Window_SystemMenu|  #PB_Window_ScreenCentered)
TextGadget(#Client_TxtDateN,50,30, 120, 20, "Date de naissance:" )
DateGadget(#Client_DateN,180,30, 100, 20,"%dd/%mm/%yyyy",Date())

Repeat
EventId=WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
   ExitTable=1
EndIf
Until  ExitTable=1
CloseWindow(#Wintable)
End
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
omega
Messages : 617
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Encore un problème de date

Message par omega »

Merci MicrodevWeb,

Effectivement, ça marche mais pas dans tous les cas, juste une remarque :
Il ne faut pas utiliser un autre (SetGadgetText) car sinon ça bloque. Par contre, si on utilise la valeur numérique de la date, SetGadgetState(), Dans ce cas, la mise à jour manuelle est activée.
Merci beaucoup pour ton aide
Code définitif

Code : Tout sélectionner

Enumeration
#WinTable
#client_txtDateN
#client_DateN
EndEnumeration

ExitTable=0
wMask$=FormatDate("%dd/%mm/%yyyy", Date())
OpenWindow(#Wintable,100,100,500,500, "Test date", #PB_Window_SystemMenu|  #PB_Window_ScreenCentered)
TextGadget(#Client_TxtDateN,50,30, 120, 20, "Date de naissance:" )
DateGadget(#Client_DateN,180,30, 100, 20,"")

;Grâce à cette instruction, DateGadget devient manipulable 
[b]SetGadgetState(#Client_DateN,Date())[/b]

Repeat
EventId=WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
   ExitTable=1
EndIf
Until  ExitTable=1
CloseWindow(#Wintable)
End
Win7 (x64) 64 bits Pb 5.72
Marc56
Messages : 2145
Inscription : sam. 08/févr./2014 15:19

Re: Encore un problème de date

Message par Marc56 »

L'exemple de microdevweb fonctionne car il utilise la bonne syntaxe.

Ton exemple initial ne fonctionnait pas, car tu as tenté de passer une valeur de date au lieu du format d’affichages comme paramètre du dategadget
Resultat = DateGadget(#Gadget, X, Y, Largeur, Hauteur [, Masque$ [, Date [, Options]]])
DateGadget reçevait donc "26/06/2018" au lieu de "%dd/%mm/%yy" qu'il ne peut donc interpréter, alors il met la date du jour et se fixe.
En mettant SetGadgetState(#Client_DateN,Date()), tu as donc "corrigé" le format et le gadget fonctionne.
Ton wMask$ est inutile si tu veux afficher la date du jour.

Code : Tout sélectionner

Enumeration
#WinTable
#client_txtDateN
#client_DateN
EndEnumeration

ExitTable=0
wMask$=FormatDate("%dd/%mm/%yyyy", Date())

OpenWindow(#Wintable,100,100,500,500, "Test date", #PB_Window_SystemMenu|  #PB_Window_ScreenCentered)
TextGadget(#Client_TxtDateN,50,30, 120, 20, "Date de naissance:" )
DateGadget(#Client_DateN,180,30, 100, 20) ; --> ,wmask$ ne pouvait fonctionner car faux

Repeat
EventId=WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
   ExitTable=1
EndIf
Until  ExitTable=1
CloseWindow(#Wintable)
End
Si tu veux isoler un masque, tu peux aussi faire ça.
Ne pas mettre FormatDate() car ça va donner une valeur texte et non pas un masque

Code : Tout sélectionner

Enumeration
#WinTable
#client_txtDateN
#client_DateN
EndEnumeration

ExitTable=0
;wMask$=FormatDate("%dd/%mm/%yyyy", Date())
wMask$="%dd/%mm/%yyyy"

OpenWindow(#Wintable,100,100,500,500, "Test date", #PB_Window_SystemMenu|  #PB_Window_ScreenCentered)
TextGadget(#Client_TxtDateN,50,30, 120, 20, "Date de naissance:" )
DateGadget(#Client_DateN,180,30, 100, 20,wmask$)

Repeat
EventId=WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
   ExitTable=1
EndIf
Until  ExitTable=1
CloseWindow(#Wintable)
End
On fait souvent des erreurs avec les dates. Même après 10 ans de PB je continue, avant de poster à repasser par F1 chaque fois que je pense avoir découvert un bug, et je perds à chaque fois :mrgreen:

:wink:
Avatar de l’utilisateur
omega
Messages : 617
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Encore un problème de date

Message par omega »

@Marc56
L'exemple de microdevweb fonctionne car il utilise la bonne syntaxe.
Oui mais pas dans le cas ou je change la valeur de la date à l'intérieur du programme. On peut modifier la date manuellement mais une fois cette date modifiée par programme, le contenu du gadget ne change pas.
Bref,
J'ai encore un autre problème, ça marche quand l'année est récente mais quand il s'agit par exemple d'une date comme:
"22/05/1958" ça ne marche plus, là j'ai utilisé ParseDate pour être sûr que la valeur numérique est bonne, malheureusement
je constate que cette date est incorrecte ! C'est pour cette raison que certaines dates ne marchent pas -il s'agit ds anciennes dates). Maintenant, je me pose la question:
Pourquoi ParseDate() ne prend pas en charge les anciennes années? (1958 par exemple)
Merci

Code : Tout sélectionner

date$="10/03/1954"
DateNum = ParseDate("%dd/%mm/%yyyy",date$)
Debug datenum
Win7 (x64) 64 bits Pb 5.72
Marc56
Messages : 2145
Inscription : sam. 08/févr./2014 15:19

Re: Encore un problème de date

Message par Marc56 »

Oui, si tu changes la date par programme, il faut la renvoyer dans le gadget avec SetGadgetState()
Inversement, si tu changes la date dans le gadget, il faut la re-stocker dans la variable avec GetGadgetState()
Avec ParseDate() ou FormatDate() si on va dans un sens ou l'autre et qu'on veut faire des calculs de date.
"22/05/1958" ça ne marche plus
Normal: hors limites.
PureBasic - Date
La bibliothèque Date permet de gérer le temps et les dates depuis l'année 1970 jusqu'à l'année 2038, en utilisant le modèle Unix (nombre de secondes écoulées depuis le 1er janvier 1970).

Oui, il y a des demandes pour changer cela (voir forum us)
Non, ce n'est pas encore fait (il faudra trouver une astuce pour rendre les anciens codes compatibles)

:wink:
Avatar de l’utilisateur
omega
Messages : 617
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Encore un problème de date

Message par omega »

@Marc56
Normal: hors limites.
PureBasic - Date
Oui, c'est effectivement hors limites (je n'avais pas remarqué ces limites). Pour continuer dans la même logique, j'ai préféré changer le type de gadget en remplaçant DateGadget par StringGadget (uniquement pour la partie DateNaissance où un bon nombre de date sont inférieures à 1970).

Merci beaucoup Marc56 et tous les autres
Bonne continuation
Win7 (x64) 64 bits Pb 5.72
Répondre