Page 1 sur 1

comportement étrange, pourquoi ?

Publié : mar. 18/févr./2025 14:40
par Micoute
J'essaie de faire un calendrier pharmaceutique pour gérer mon stock de médicament, mais je butte dès le début.

Pouvez-vous m'aider, car quand je clique sur un StringGadget() quelconque, il y a étrange phénomène qui se produit, car apparemment l'action se répète indéfiniment.

Code : Tout sélectionner

; Calendrier pharmaceutique simplifié
; Conçu et créé le 18 février 2025
; avec PB 6.20 (x64)

Enumeration Fenetres
  #Fenetre_Principale
  #Fenetre_Editeur
EndEnumeration

Enumeration Gadgets  
  #Edt
  ; Énumération des StringGadgets de 1 à 28
  #Str_1:#Str_2:#Str_3:#Str_4:#Str_5:#Str_6:#Str_7
  #Str_8:#Str_9:#Str_10:#Str_11:#Str_12:#Str_13:#Str_14
  #Str_15:#Str_16:#Str_17:#Str_18:#Str_19:#Str_20:#Str_21
  #Str_22:#Str_23:#Str_24:#Str_25:#Str_26:#Str_27:#Str_28
  ; Énumération des TextGadgets de 1 à 28
  #Txt_1:#Txt_2:#Txt_3:#Txt_4:#Txt_5:#Txt_6:#Txt_7
  #Txt_8:#Txt_9:#Txt_10:#Txt_11:#Txt_12:#Txt_13:#Txt_14
  #Txt_15:#Txt_16:#Txt_17:#Txt_18:#Txt_19:#Txt_20:#Txt_21
  #Txt_22:#Txt_23:#Txt_24:#Txt_25:#Txt_26:#Txt_27:#Txt_28
  #Txt_Info:#Txt_Indice:#Btn_Enregistrer:#Btn_Sauvegarder_Edt  
EndEnumeration

Global Dim Medications$(28), Evenement, medications$, jour, positionX, positionY

Procedure Fenetre_Editeur(index, jour)
  
  If OpenWindow(#Fenetre_Editeur, 100, 100, 400, 310, "Éditeur de Médicaments", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    TextGadget(#Txt_Indice, 10, 10, 380, 20, "Jour " + Str(jour))
    EditorGadget(#Edt, 10, 40, 380, 200)
    SetGadgetText(#Edt, Medications$(jour))
    ButtonGadget(#Btn_Sauvegarder_Edt, 50, 260, 100, 30, "Sauvegarder")
    Debug "Fenêtre de l'éditeur ouverte"
  EndIf
EndProcedure

Procedure Programme_principal()
    
  If OpenWindow(#Fenetre_Principale, 0, 0, 350, 910, "Calendrier Pharmaceutique (28 jours)", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget)
    TextGadget(#Txt_Info, 10, 10, 780, 20, "Notez les médicaments prescrits pour chaque jour (28 jours)")
    
    positionX = 40
    positionY = 40
    
    For jour = 1 To 28
      TextGadget(#Txt_1 + (jour - 1), positionX, positionY, 70, 20, "Jour " + Str(jour))
      StringGadget(#Str_1 + (jour - 1), positionX + 80, positionY, 200, 20, "")
      positionY + 30
    Next jour
    
    ButtonGadget(#Btn_Enregistrer, 130, 880, 100, 25, "Enregistrer")
    
    ;{ Boucle événementielle
    Repeat
      Evenement = WaitWindowEvent()
      
      Select Evenement
        Case #PB_Event_Gadget
          Select EventGadget()
            Case #Btn_Enregistrer
              For jour = 1 To 28
                Medications$ = GetGadgetText(#Str_1 + jour)
                Debug "Jour " + Str(jour) + ": " + Medications$
              Next jour 
            Case #Btn_Sauvegarder_Edt
              medications$ = GetGadgetText(#Edt)
              Medications$(jour) = medications$
              SetGadgetText(index, medications$)
              Debug "Sauvegarde effectuée"
              Case #Str_1 To #Str_28
                jour = EventGadget()
                Debug "StringGadget cliqué - Jour: " + Str(jour)
                Fenetre_Editeur(EventGadget(), jour)
          EndSelect
        Case #PB_Event_CloseWindow
          If EventWindow() = #Fenetre_Principale
            Debug "EventWindow() = Fenêtre principale"
            CloseWindow(#Fenetre_Principale)
            End
          ElseIf EventWindow() = #Fenetre_Editeur
            Debug "EventWindow() = Fenêtre Éditeur"
            CloseWindow(#Fenetre_Editeur)
          EndIf
      EndSelect
    Until Evenement = #PB_Event_CloseWindow
    ;}
  EndIf
EndProcedure
Programme_principal()

Re: comportement étrange, pourquoi ?

Publié : mar. 18/févr./2025 17:05
par Ar-S
Tu m'as sincèrement emmêler les pinceaux avec ton code. :D
Peux tu préciser l'utilisation exacte du logiciel.
- A quoi te sert la fenêtre editeur ? A décrire plus précisément la posologie ?
- Tu focalises sur 28 jours ? Pourquoi pas le mois entier ?

Écris un exemple de remplissage des champs 1 et 2 avec la même chose pour la fenêtre editeur.

Est-ce que c'est pour le mois en cours ? etc.

Re: comportement étrange, pourquoi ?

Publié : mar. 18/févr./2025 19:55
par Micoute
Ce futur logiciel que je compte terminer est un calendrier pharmaceutique qui doit comporter 13 mois de 28 jours .

L'éditeur sert en fait a remplir un tableau Medecations$(28) qui pour l'instant ne comporte que 28 cases correspondant au nombre de jours de ce mois unique pour l'instant.

Je compte tenir à jour le nombre de médicaments surnuméraires de chaque mois, car il y a des boites de 30, d'autres de 26, 90, 60 ou même 8, donc il arrive qu'il y a une boite que je ne doive pas commander, car à force d'accumuler, il y en a assez pour ce mois-ci.

Si un éditeur n'est pas la bonne méthode, je suis d'accord pour tout autre gadget, par exemple une liste préremplie, car dans un StrinGGadget(), on ne peut mettre qu' un seul médicament et c'est ce que j'ai trouvé qui ne prenne pas trop de place dans la fenêtre principale et des médicaments j'en prends 18 différents tous les jours.

Le mois en cours démarre le jour de l'année où on passe à la pharmacie, par exemple le 18/02/2025 est le jour 49 de l'année et le mois suivant tombera 29 jours plus tard, et ce calendrier de 364 jours n'a rien à voir avec le calendrier grégorien.

Re: comportement étrange, pourquoi ?

Publié : mar. 18/févr./2025 21:15
par Ar-S
Un combo box te permettrait déjà de ne pas te prendre la tête avec 28 gadgets (+28 text de titre)
Ensuite je ne vois pas l'intérêt des 28 jours. Ce qui importe c'est le nombre total de sortes de medocs.
Si tu en prends au max 18 différents par jour, alors je verrai plus une liste avec ces 18 medocs + la quantité par medocs
Il te faut aussi un total pour chaque medoc

Total jaune : 9 - total vert 10 - total blanc 40

Jour 1 : 5 verts - 3 jaunes - 1 blanc
(tu valides la prise et le soft t'indique qu'il reste : 5 verts - 6 jaunes et 39 blanc).
Ainsi tu peux même te faire une alerte quand dans une boite il reste X medoc.

J'espère ne pas me fourvoyer.

Ma vision de ta gestion se ferait dans ce genre :

Code : Tout sélectionner

Structure medocinfo
  Nom.s
  NombreParPrise.i
  NombreEnStock.i
EndStructure

Global NewList medoc.medocinfo()
Global totalMedoc

NbrDeMedocDifferents = 12

NomDesMedox$    = "Vert;jaune;bleu;mauve;rouge;noir;blanc;pistache;caramel;marron;gluant;poivré"
NbreParPrise$   = "1;3;2;1;1;3;2;2;1;1;1;2"
NbrTotal$       = "20;8;30;12;8;50;30;20;20;10;12;30"

For i = 1 To NbrDeMedocDifferents
  N$    = StringField(NomDesMedox$,i,";")
  NPP$  = StringField(NbreParPrise$,i,";")
  NT$   = StringField(NbrTotal$,i,";")
  
  Debug N$ + " " + NPP$ + " " + NT$
  
  ; Enregistrement des éléments dans la liste
  AddElement(medoc())
  With medoc()
    \Nom = N$
    \NombreParPrise = Val(NPP$)
    \NombreEnStock  = Val(NT$)
  EndWith
  
Next


; -----------------------------------------

; On en prend un au hazard ?
NumeroDuMedicament = Random(12,1)

SelectElement (medoc(), NumeroDuMedicament-1)
MessageRequester(Medoc()\Nom + "(stock " + Str(medoc()\NombreEnStock) +")", "Medicament choisit : le "+Str(NumeroDuMedicament)+Chr(10)+Chr(10)+Str(Medoc()\NombreParPrise) + " " + medoc()\Nom + " à prendre."+Chr(10)+"Après cette prise il en reste "+ Str(medoc()\NombreEnStock - medoc()\NombreParPrise)+" en stock.",#PB_MessageRequester_Info)
medoc()\NombreEnStock - medoc()\NombreParPrise

; Debug et disons que le 1er jour passe tu as juste à faire :
ForEach Medoc()
  Debug "Medicament choisit : le " + Str( ListIndex(medoc())+1) + " (stock " + Str(medoc()\NombreEnStock) +")" 
  Debug Str(Medoc()\NombreParPrise) + " x " + medoc()\Nom + " à prendre."
  Debug "Après cette prise il en reste "+ Str(medoc()\NombreEnStock - medoc()\NombreParPrise)+" en stock."
  Debug "-------------------------------------------------------------------------------------------------------"  
Next

; Aprés tu n'as plus qu'à gérer la sauvegarde de ton stock

Re: comportement étrange, pourquoi ?

Publié : mer. 19/févr./2025 10:55
par Micoute
Merci Ar-s pour ta réponse que je comprends très bien, effectivement je pourrais choisir les médicaments à commander à partir d'une liste préremplie, car ce que je veux faire est une gestion de stock et peut-être même que je n'aurais pas besoin de calendrier puisque je ne vais pas à la pharmacie tous les jours, il suffit d'enregistrer la date du dernier passage.

Merci encore.

Re: comportement étrange, pourquoi ?

Publié : mer. 19/févr./2025 12:28
par Ar-S
Oui, avec les années je commence à te cerner. Tu déboules avec une nouvelle idée sans avoir forcément "penser" la chose avant, dans l'engouement :D Ce que je comprends parfaitement. Mais quand tu touches à des logiciels devant entrainer un fichier de données ou une base de donnée, il est important de prendre un peu de recule et de voir : Quels sont les éléments qui vont être amenés à changer, comment puis-je avoir une interface claire. En gros comment être un bon fainéant. La fainéantise en programmation et dans d'autres domaines n'est pas du tout péjorative. Le but étant de faire le plus efficacement et sans perdre du temps.

Re: comportement étrange, pourquoi ?

Publié : jeu. 20/févr./2025 14:50
par Micoute
Ce n'est pas faux ce que tu dis, en fait je suis un autodidacte passionné, mais qui avance à tâtons, car je sais ce que je veux faire mais pas comment le faire et pourtant une gestion de stock ne doit pas être si compliqué, mais vrai que depuis mon avc, j'ai du mal à me souvenir de comment je faisais avant et je prend beaucoup de notes que j'oublie souvent.

J'utilise cette structure pour travailler :
Structure Medicament
Nom.s ; nom du médicament
Dosage.f ; dosage du médicament
Unite.s ; unités de poids du médicament
QuantiteMatin.f ; quantité prise le matin
QuantiteMidi.f ; quantité prise le midi
QuantiteSoir.f ; quantité prise le soir
QuantiteParBoite.i ; Quantité dans la boîte pleine
DateMiseEnStock.i ; Date de passage à la pharmacie
DateReapprovisionnement.i ; Date 28 jours après
QuantiteParJour.f ; Quantité par jour
QuantiteMois.f ; Quantité en 28 jours
NbrBoitesMois.i ; Nombre de boîtes pour 28 jours
DoseJour.f ; Dose de médicament par jour
DoseMois.f ; Dose prise en 28 jours
ResteEnStock.i ; Reste en stock cumulé
CumulStock.i ; Cumul de stock
Excedent.i ; Excédent de stock
EndStructure

Re: comportement étrange, pourquoi ?

Publié : jeu. 20/févr./2025 21:58
par Ar-S
Je suis en train te faire une petite interface. Je la limite à la structure précédement créée (nom, nombreparprise, stock).
Elle sera fonctionnelle (ajout de medoc, edition, suppression).
ça te donnera une base très carré pour l'améliorer (si elle te plait).
J'essaye de faire un truc fonctionnel donc c'est un peu long. J'arrive au bout, il me reste la suppression d'un medoc à finir et ce sera bon :wink: .
Je pense que ce vendredi ce sera bon.

Re: comportement étrange, pourquoi ?

Publié : ven. 21/févr./2025 12:33
par Ar-S
Voilà.
Tu pourras trouver le code ici : viewtopic.php?t=19323