Page 1 sur 1

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

Publié : sam. 19/déc./2015 11:21
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

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

Publié : sam. 19/déc./2015 11:51
par Ar-S
Comment indiques tu au programme la durée du traitement ?

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

Publié : sam. 19/déc./2015 12:01
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.

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

Publié : sam. 19/déc./2015 14:21
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:

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

Publié : sam. 19/déc./2015 14:49
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 ;)

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

Publié : sam. 19/déc./2015 15:49
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

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

Publié : sam. 19/déc./2015 19:14
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.

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

Publié : sam. 19/déc./2015 19:36
par Ar-S
Et mon code c'est du veau ?

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

Publié : sam. 19/déc./2015 21:13
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.

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

Publié : sam. 19/déc./2015 21:17
par case
Ar-S a écrit :Et mon code c'est du veau ?
a toi de nous dire c'est toi le cuistot ^^

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

Publié : sam. 19/déc./2015 21:22
par Ar-S
Micoute a écrit :alors veuille bien m'excuser.
Je veuille bien :)

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

Publié : dim. 20/déc./2015 14:04
par Micoute
Ar-S a écrit :
Micoute a écrit :alors veuille bien m'excuser.
Je veuille bien :)
Merci de bien vouloir.

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

Publié : dim. 20/déc./2015 17:17
par Ar-S
Pas de soucis, alors tu t'en sorts ?

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

Publié : dim. 20/déc./2015 19:38
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.

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

Publié : mar. 22/déc./2015 10:43
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