Comment savoir si une grille est pleine

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

Comment savoir si une grille est pleine

Message par Micoute »

Bonjour à tous

Pour mes petits enfants qui rentrent au C.P cette année, j'ai fait ce logiciel pour leur apprendre à calculer mentalement, le programme est fonctionnel, mais je souhaiterais que le bouton valider ne s'affiche que si la grille est pleine.

Si vous pouvez m'aider, ce que je ne doute pas, je ne vous en remercierai jamais assez.

Code : Tout sélectionner

;Carré magique

Enumeration
  #Fenetre_principale
EndEnumeration

Enumeration
  #Str_HG
  #Str_HM
  #Str_HD
  #Str_GM
  #Str_MM
  #Str_DM
  #Str_GB
  #Str_MB
  #Str_DB
  #Txt_L1
  #Txt_L2
  #Txt_L3
  #Txt_C1
  #Txt_C2
  #Txt_C3
  #Btn_Parametres
  #Str_Parametres
  #Btn_Ok
  #Btn_Valider
  #Txt_Avertissement
EndEnumeration

Enumeration
  #Police
  #Police2
  #police3
EndEnumeration  

Global Evenement, NombreMagique

LoadFont(#Police, "Microsoft Sans Serif", 120, #PB_Font_Bold)
LoadFont(#Police2, "Microsoft Sans Serif", 20, #PB_Font_Bold)
LoadFont(#Police3, "Microsoft Sans Serif", 10, #PB_Font_Bold)

Procedure Afficher()
  SetGadgetText(#Txt_L1, Str(Val(GetGadgetText(#Str_HG)) + Val(GetGadgetText(#Str_HM)) + Val(GetGadgetText(#Str_HD))))
  SetGadgetText(#Txt_L2, Str(Val(GetGadgetText(#Str_GM)) + Val(GetGadgetText(#Str_MM)) + Val(GetGadgetText(#Str_DM))))
  SetGadgetText(#Txt_L3, Str(Val(GetGadgetText(#Str_GB)) + Val(GetGadgetText(#Str_MB)) + Val(GetGadgetText(#Str_DB))))
  
  SetGadgetText(#Txt_C1, Str(Val(GetGadgetText(#Str_HG)) + Val(GetGadgetText(#Str_GM)) + Val(GetGadgetText(#Str_GB))))
  SetGadgetText(#Txt_C2, Str(Val(GetGadgetText(#Str_HM)) + Val(GetGadgetText(#Str_MM)) + Val(GetGadgetText(#Str_MB))))
  SetGadgetText(#Txt_C3, Str(Val(GetGadgetText(#Str_HD)) + Val(GetGadgetText(#Str_DM)) + Val(GetGadgetText(#Str_DB))))
EndProcedure  

Procedure EntrerNombreMagique()
  For i = #Str_HG To #Str_DB
    SetGadgetText(i, "")
  Next i
  
  SetActiveGadget(#Str_Parametres)
  NombreMagique = Val(GetGadgetText(#Str_Parametres))
EndProcedure

Procedure InitCarre()  
  If NombreMagique    
    SetGadgetText(#Txt_Avertissement, "Le nombre magique est " + NombreMagique)
    Protected NHM = Random(NombreMagique/3,1)
    Protected NMG = Random(NombreMagique/3,1)
    Protected NGB = Random(NombreMagique/3,1)
    Protected NDB = Random(NombreMagique/3,1)
    
    If NMG + NGB < NombreMagique/2
      NMG = Int(Random(NombreMagique/2,NombreMagique/2))
    EndIf  
    
    SetGadgetText(#Str_HM, Str(NHM))
    SetGadgetText(#Str_GM, Str(NMG))
    SetGadgetText(#Str_GB, Str(NGB))
    SetGadgetText(#Str_DB, Str(NDB))
    
  Else
    SetGadgetText(#Txt_Avertissement, "Veuillez choisir un nombre magique, (minimum 3)")
    HideGadget(#Str_Parametres, 0)
    HideGadget(#Btn_Ok, 0)
    EntrerNombreMagique()
  EndIf
EndProcedure

Procedure Init_Questionnaire()
  If OpenWindow(#Fenetre_principale, 379, 5, 815, 775, "Carre magique", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    
    SetGadgetFont(#PB_Default, FontID(#Police))
    
    StringGadget(#Str_HG, 145, 130, 180, 180, "", #PB_String_Numeric|#ES_CENTER)
    StringGadget(#Str_HM, 330, 130, 180, 180, "", #PB_String_Numeric|#ES_CENTER)
    StringGadget(#Str_HD, 515, 130, 180, 180, "", #PB_String_Numeric|#ES_CENTER)
    StringGadget(#Str_GM, 145, 315, 180, 180, "", #PB_String_Numeric|#ES_CENTER)
    StringGadget(#Str_MM, 330, 315, 180, 180, "", #PB_String_Numeric|#ES_CENTER)
    StringGadget(#Str_DM, 515, 315, 180, 180, "", #PB_String_Numeric|#ES_CENTER)
    StringGadget(#Str_GB, 145, 500, 180, 180, "", #PB_String_Numeric|#ES_CENTER)
    StringGadget(#Str_MB, 330, 500, 180, 180, "", #PB_String_Numeric|#ES_CENTER)
    StringGadget(#Str_DB, 515, 500, 180, 180, "", #PB_String_Numeric|#ES_CENTER)
    TextGadget(#Txt_L1, 70, 205, 60, 60, "", #PB_Text_Center)
    TextGadget(#Txt_L2, 70, 400, 60, 60, "", #PB_Text_Center)
    TextGadget(#Txt_L3, 70, 585, 60, 60, "", #PB_Text_Center)
    TextGadget(#Txt_C1, 220, 70, 60, 60, "", #PB_Text_Center)
    TextGadget(#Txt_C2, 400, 70, 60, 60, "", #PB_Text_Center)
    TextGadget(#Txt_C3, 575, 70, 60, 60, "", #PB_Text_Center)
    ButtonGadget(#Btn_Parametres, 155, 10, 175, 35, "Paramètres")
    StringGadget(#Str_Parametres, 335, 10, 95, 35, "", #PB_String_Numeric|#ES_CENTER)
    ButtonGadget(#Btn_Ok, 435, 10, 35, 35, "Ok")
    ButtonGadget(#Btn_Valider, 480, 10, 175, 35, "Valider")
    
    TextGadget(#Txt_Avertissement, 0, 710, 815, 30, "", #PB_Text_Center|#SS_CENTERIMAGE)
    
    HideGadget(#Str_Parametres, 1)
    HideGadget(#Btn_Ok, 1)
    
    ;Polices
    SetGadgetFont(#Btn_Parametres, FontID(#Police2))
    SetGadgetFont(#Btn_Valider, FontID(#Police2))
    SetGadgetFont(#Btn_Ok, FontID(#police3))
    SetGadgetFont(#Str_Parametres, FontID(#police2))
    SetGadgetFont(#Txt_Avertissement, FontID(#Police2))
    
    For i = #Txt_L1 To #Txt_C3
      SetGadgetFont(i, FontID(#Police2))
    Next i
    
    ;Couleurs
    SetWindowColor(#Fenetre_principale, $109217)    
    
    SetGadgetColor(#Txt_Avertissement, #PB_Gadget_BackColor, GetWindowColor(#Fenetre_principale))
    SetGadgetColor(#Txt_Avertissement, #PB_Gadget_FrontColor, $84EFEB)
    
    For i = #Txt_L1 To #Txt_C3
      SetGadgetColor(i, #PB_Gadget_BackColor, GetWindowColor(#Fenetre_principale))
      SetGadgetColor(i, #PB_Gadget_FrontColor, $84EFEB)
    Next i
    
    For i = #Str_HG To #Str_DB
      SetGadgetColor(i, #PB_Gadget_BackColor, $84EFEB)
    Next i
    
    InitCarre()
    
  EndIf
EndProcedure

Init_Questionnaire()

;- Boucle
Repeat
  Evenement = WaitWindowEvent()
  Select Evenement
      
    Case #PB_Event_Gadget
      Select EventGadget()          
        Case #Btn_Parametres
          HideGadget(#Str_Parametres, 0)
          HideGadget(#Btn_Ok, 0)
        Case #Str_Parametres
        Case #Btn_Ok
          NombreMagique = Val(GetGadgetText(#Str_Parametres))
          If NombreMagique
            SetGadgetText(#Txt_Avertissement, "")
            InitCarre()
          EndIf 
          HideGadget(#Str_Parametres, 1)
          HideGadget(#Btn_Ok, 1)
        Case #Btn_Valider
          Afficher()
      EndSelect
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Fenetre_principale
          CloseWindow(#Fenetre_principale)
          Break
      EndSelect
  EndSelect
ForEver
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 savoir si une grille est pleine

Message par Marc56 »

Hello Micoute,

Je n'ai pas regardé tout le code, mais une solution peut-être de faire un DisableGadget(#Btn_Valider, 1) ou HideGadget(#Btn_Valider, 1) au début.
Ensuite tu créé une procédure qui à chaque saisie, vérifie avec GetGadetText que les 9 cases contiennent du texte.
Si oui, alors tu réactives ou affiches le bouton valider

:wink:
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Comment savoir si une grille est pleine

Message par Micoute »

Grand merci Marc56, c'était une bonne idée, fort simple à réaliser.
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 !
Répondre