PureBasic

Forums PureBasic
Nous sommes le Mar 22/Oct/2019 13:11

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 
Auteur Message
 Sujet du message: [RESOLU] Encore un problème de date
MessagePosté: Mar 26/Juin/2018 12:23 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 26/Nov/2011 13:04
Messages: 468
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:
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

_________________
Win7 (x86) 32 bits Pb 5.70


Dernière édition par omega le Mar 26/Juin/2018 22:46, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Encore un problème de date
MessagePosté: Mar 26/Juin/2018 13:08 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1661
Localisation: Belgique
Voici ton code corrigé, le problème était que tu formatait avec la date du jour

Code:
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.71 beta 2


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Encore un problème de date
MessagePosté: Mar 26/Juin/2018 13:38 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 26/Nov/2011 13:04
Messages: 468
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:
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 (x86) 32 bits Pb 5.70


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Encore un problème de date
MessagePosté: Mar 26/Juin/2018 14:20 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1617
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:
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:
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:

_________________
Windows 10 Famille x64 + Linux (Slackware, Debian sur Oracle VirtualBox 6.0)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Encore un problème de date
MessagePosté: Mar 26/Juin/2018 15:26 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 26/Nov/2011 13:04
Messages: 468
@Marc56
Citation:
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:
date$="10/03/1954"
DateNum = ParseDate("%dd/%mm/%yyyy",date$)
Debug datenum

_________________
Win7 (x86) 32 bits Pb 5.70


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Encore un problème de date
MessagePosté: Mar 26/Juin/2018 15:51 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1617
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.

Citation:
"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:

_________________
Windows 10 Famille x64 + Linux (Slackware, Debian sur Oracle VirtualBox 6.0)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Encore un problème de date
MessagePosté: Mar 26/Juin/2018 16:32 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 26/Nov/2011 13:04
Messages: 468
@Marc56
Citation:
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 (x86) 32 bits Pb 5.70


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 4 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye