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: SetGadget
Text(#Fin_Doli, ...
Mais: SetGadget
State(#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)
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.

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
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.

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

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