[Résolu]Comment mettre une date calculée dans un gadget date

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

[Résolu]Comment mettre une date calculée dans un gadget date

Message par Micoute »

Bonjour à tous,

Je fais un programme pour la gestion de mes médicaments et dans ce programme il y a des GadgetDate(), donc quand je mets la date on va dire de début, un deuxième GadgetDate() doit calculer la date de fin.

J'ai essayé entre autres un truc comme ça, mais ça ne fonctionne pas.

Code : Tout sélectionner

Global NbJourMois = 30
...
SetGadgetText(#Fin_Doli, AddDate(GetGadgetState(#Debut_Doli), #PB_Date_Day, NbJourMois)
Je vous remercie de votre aide aimable qui me sera sincèrement utile
Dernière modification par Micoute le dim. 20/déc./2015 14:03, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Comment mettre une date calculée dans un gadget date

Message par Ar-S »

Comment indiques tu au programme la durée du traitement ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Comment mettre une date calculée dans un gadget date

Message par Micoute »

Bonjour Ar-s,

J'ai une constante NbJoursMois = 30 et un gadget date pour chaque médicament, donc je cliques et je choisis une date dans le calendrier, et je voudrais que le deuxième gadget date affiche la date du premier gadget majorée de 30 jours et un troisième qui calcule la date théorique en fonction du nombre dans chaque boite, c'est assez complexe, mais ni mon médecin, ni mon pharmacien ne gère les médicaments et il m'arrive de tomber à court.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Comment mettre une date calculée dans un gadget date

Message par Marc56 »

Bonjour Micoute,

Tu as juste fais une petite erreur classique en essayant de réaffecter une chaine à un gadget calendrier
(mais c'est ce genre de truc qu'on met un temps fou à trouver :? )

Pas: SetGadgetText(#Fin_Doli, ...
Mais: SetGadgetState(#Fin_Doli, ...

N'oublie pas que tout ce qui est date, travaille en interne comme un nombre de secondes depuis le 01/01/1970.
Le gadget calendrier aura donc ses entrées et sorties dans ce format et pas en texte.
Pour passer en mode "humain" il faut alors utiliser FormatDate() et ParseDate()

Voila un petit code complet (modèle avec BindEventGadget pour faire moderne et clair) :P

Code : Tout sélectionner

EnableExplicit

Enumeration FormWindow
    #Window_0
EndEnumeration

Enumeration FormGadget
    #Debut_Doli
    #Fin_Doli
    #Date_Fin
EndEnumeration

Global NbJourMois.a = 30

OpenWindow(#Window_0, 0, 0, 600, 400, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CalendarGadget(#Debut_Doli, 034, 058, 246, 178, 0)
CalendarGadget(#Fin_Doli, 302, 058, 246, 174, 0)
TextGadget(#Date_Fin, 302, 300, 100, 100, "-")

Procedure Add_Days()
    Protected Date_Doli_End = AddDate(GetGadgetState(#Debut_Doli), #PB_Date_Day, NbJourMois) 
    SetGadgetState(#Fin_Doli, Date_Doli_End) 
    SetGadgetText(#Date_Fin, FormatDate("%dd/%mm/%yyyy", Date_Doli_End))
EndProcedure

BindGadgetEvent(#Debut_Doli, @Add_Days(), #PB_EventType_LeftClick)

Global Event

Repeat
    Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
Cela fait-il ce que tu souhaites ?

PS. Perso, j'évite d'imbriquer les fonctions car on a vite fait de se perdre et on ne gagne pas en vitesse.
De plus l'aide contextuelle des fonctions (en barre d'état) ne s'applique pas à la fonction imbriquée.

:wink:
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Comment mettre une date calculée dans un gadget date

Message par Ar-S »

Voilà ma version, un peu commenté. je voulais te la poster avant mais j'ai eu un dépannage à distance à faire :mrgreen:
priorité au taf !

Code : Tout sélectionner

Declare CatchMouse()

Enumeration
   #LDVM
   #CAL1
   #CAL2
   #datejour
   #COMBO_DUREE
EndEnumeration

Global NbrJours,Duree_traitement

Procedure CatchDate()
  ; By Ar-S 
  
  ; Récupération de la date du jour
   Jour_en_cours = Day(Date())
   Mois_en_cours = Month(Date())
   Annee_en_cours = Year(Date())
   Debug "Date du début du traitement : " + Jour_en_cours + "/" + Mois_en_cours + "/" + Annee_en_cours
   
   ; A titre informatif
   Date_Fin_Traitement.s = GetGadgetText(#datejour)
   
   ; Récupération de la date complète de la fin du traitement
   Jour_Fin_Traitement = Val( FormatDate("%dd",GetGadgetState(#datejour) ) )
   Mois_fin_Traitement = Val ( FormatDate("%mm",GetGadgetState(#datejour) ) )
   Annee_fin_Traitement = Val ( FormatDate("%yyyy",GetGadgetState(#datejour) ) )
   
   ; Fin du traitement
   Debug "Fin du traitement : " + Jour_Fin_Traitement + "/" + Mois_fin_Traitement + "/" + Annee_fin_Traitement
   SetGadgetState(#CAL1,(Date(Annee_fin_Traitement,Mois_fin_Traitement,Jour_Fin_Traitement,0,0,0) ) ) 
   
   ; Calcul du nombre de jour de traitement
   Difference = Date(Annee_fin_Traitement,Mois_fin_Traitement,Jour_Fin_Traitement,0,0,0) - Date(Annee_en_cours,Mois_en_cours,Jour_en_cours,0,0,0)
   ; Supprimer le -1 si tu veux compter le jour en cours
   Debug "Il reste "+ Str(Day(Difference)-1) + " jour(s) de traitement (sans compter aujourd'hui)"
   
   
   EndProcedure

If OpenWindow(#LDVM, 0, 0, 500, 220, "test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   
   CalendarGadget(#CAL1, 1, 1, 220, 180)
    DisableGadget(#cal1,1)
   DateGadget(#datejour, 1,182, 190, 25, "%dd %mm %yyyy")
   SetGadgetAttribute(#datejour,#PB_Date_Minimum,Day(Date())+1 )
   Date_Debut =  GetGadgetState(#CAL1)

   BindGadgetEvent(#datejour,@CatchDate() )
   
    Date_du_jour = Day(Date())

   Repeat
      Event = WaitWindowEvent()

   Until Event = #PB_Event_CloseWindow
   
EndIf
Je te laisse faire ta petite division concernant le nbr de medoc par boite / durée du traitement ;)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Comment mettre une date calculée dans un gadget date

Message par Marc56 »

Spock a écrit :
Marc56 a écrit : De plus l'aide contextuelle des fonctions (en barre d'état) ne s'applique pas à la fonction imbriquée.

:wink:
ha bon ? meme en posant le curseur dessus ?
voir en sélectionnant la fonction ?

tu utilises quoi comme IDE ?
L'IDE standard.
Avec par exemple:

Code : Tout sélectionner

AddDate(GetGadgetState(#Debut_Doli), #PB_Date_Day, NbJourMois)
En mettant le curseur sur AddDate on a l'aide de AddDate() en barre d'état,
mais si on clique sur GetGadgetState, on n'a pas l'aide de cette commande en barre de tache, on reste sur le paramètre 1 de AddDate (logique)
Mais j'ai peut-être un mauvais paramétrage ?

Par contre le truc bien que j'ai découvert par hasard, c'est qu'en mode débug, si on passe la souris dans le code au dessus d'une variable, l'IDE affiche sa valeur 8O :P
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Comment mettre une date calculée dans un gadget date

Message par Micoute »

Bonsoir Marc56,

Avec 1 ou 2 calendar ça va encore, mais avec 45 c'est la pagaille, je crois qu'il faut que je mette un gadget où quand je cliques dessus, ils m'ouvre une fenêtre fille dans laquelle je pourrais choisir ma date ou sinon je vais mettre mes médicaments en colonnes, c'est-à-dire que les valeurs seront sous le nom du produit.

En tous cas merci beaucoup, car ça me donne des idées.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Comment mettre une date calculée dans un gadget date

Message par Ar-S »

Et mon code c'est du veau ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Comment mettre une date calculée dans un gadget date

Message par Micoute »

Bonsoir Ar-s,

Effectivement ton code est très bon aussi et je t'en remercie pour le partage, mais je ne l'avais pas vu, alors veuille bien m'excuser.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Comment mettre une date calculée dans un gadget date

Message par case »

Ar-S a écrit :Et mon code c'est du veau ?
a toi de nous dire c'est toi le cuistot ^^
ImageImage
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Comment mettre une date calculée dans un gadget date

Message par Ar-S »

Micoute a écrit :alors veuille bien m'excuser.
Je veuille bien :)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Comment mettre une date calculée dans un gadget date

Message par Micoute »

Ar-S a écrit :
Micoute a écrit :alors veuille bien m'excuser.
Je veuille bien :)
Merci de bien vouloir.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [Résolu]Comment mettre une date calculée dans un gadget

Message par Ar-S »

Pas de soucis, alors tu t'en sorts ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: [Résolu]Comment mettre une date calculée dans un gadget

Message par Micoute »

Oui, plutôt bien. Pour ne pas faire une fenêtre qui déborderait de l'écran, j'ai donc mis un panelgadget avec un onglet pour chaque médicament et deux calendargadget dans chaque onglet.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: [Résolu]Comment mettre une date calculée dans un gadget

Message par microdevweb »

La fonction ParseDate, te permet de convertir la date de chaine en entier

Exemple

Code : Tout sélectionner

Debug ParseDate("%yyyy%mm%dd","20151222") ; retourne 1450742400
Debug ParseDate("%dd%mm%yyyy","221215") ; retourne 1450742400
Debug ParseDate("%dd%mm%yy","221215") ; retourne 1450742400
Pour l'ajout d'une valeur à une date tu peux utiliser AddDate en choisir ce que tu veux ajouter, année,mois,semaine,jour,heure,minute,seconde
Exemple

Code : Tout sélectionner

myDate=ParseDate("%yyyy%mm%dd","20151222") ; retourne 1450742400
NewDate=AddDate(myDate,#PB_Date_Week,1)    ; Ajoute d'une semaine
Debug FormatDate("%dd-%mm-%yyyy",NewDate) ; retourne 29-12-2015
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Répondre