Page 1 sur 1

[Résolu] Problème de relancement de programme

Publié : mar. 12/août/2014 13:07
par Micoute
Bonjour à tous,
je voudrais faire un programme pour mes petits enfants, qui se relance quand on presse le bouton "recommencer", mais le problème c'est qu'il m'envoie toujours la même séquence, bien évidemment il y aura des cases à remplir, mais pour l'instant, ce n'est qu'une ébauche.

Code : Tout sélectionner

;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Fenetre_principale
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Txt_operation
  #Txt_sgn
  #Str_terme_1
  #Str_terme_2
  #Str_Resultat
  #Txt_egal
  #Btn_Recommencer
EndEnumeration
;}
;{ Polices
Enumeration
  #Police_Txt_operation
  #Police_Txt_sgn
  #Police_Str_terme_1
  #Police_Str_terme_2
  #Police_Str_Resultat
  #Police_Txt_egal
EndEnumeration
;}
Global.i Evenement, hasard, terme_1, terme_2, Resultat
Global Dim signes.s(1,3)
;}

  signes(0,0) = "+" : signes(1,0) = "addition"
  signes(0,1) = "-" : signes(1,1) = "soustraction"
  signes(0,2) = "x" : signes(1,2) = "multiplication"
  signes(0,3) = "/" : signes(1,3) = "division"

Procedure initialiser()  
  hasard = Random(3,0)
  terme_1 = Random(9,1)
  terme_2 = Random(9,1)
  If hasard = 0
    Resultat = terme_1 + terme_2
  ElseIf hasard = 1
    Resultat = terme_1 - terme_2
  ElseIf hasard = 2
    Resultat = terme_1 * terme_2
  ElseIf hasard = 3 And terme_1 >= terme_2
    Resultat = terme_1 / terme_2
  ElseIf hasard = 3 And terme_1 < terme_2
    x = terme_1
    terme_1 = terme_2
    terme_2 = x
    Resultat = terme_1 / terme_2
  EndIf  
EndProcedure

Procedure OpenWindow_Fenetre_principale()
  If OpenWindow(#Fenetre_principale, 568, 165, 224, 462, "Opérations", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    TextGadget(#Txt_operation, 15, 20, 195, 35, "", #PB_Text_Center)
    TextGadget(#Txt_sgn, 72, 130, 70, 50, "", #PB_Text_Center)
    StringGadget(#Str_terme_1, 80, 65, 55, 50, "")
    StringGadget(#Str_terme_2, 80, 205, 55, 50, "")
    StringGadget(#Str_Resultat, 65, 325, 80, 50, "")
    TextGadget(#Txt_egal, 25, 270, 170, 50, "=", #PB_Text_Center)
    ButtonGadget(#Btn_Recommencer, 45, 405, 110, 35, "Recommencer")
    ; Gadget Fonts
    SetGadgetFont(#Txt_operation, LoadFont(#Police_Txt_operation, "Verdana", 18, #PB_Font_HighQuality))
    SetGadgetFont(#Txt_sgn, LoadFont(#Police_Txt_sgn, "Verdana", 28, #PB_Font_HighQuality))
    SetGadgetFont(#Str_terme_1, LoadFont(#Police_Str_terme_1, "Verdana", 28, #PB_Font_HighQuality))
    SetGadgetFont(#Str_terme_2, LoadFont(#Police_Str_terme_2, "Verdana", 28, #PB_Font_HighQuality))
    SetGadgetFont(#Str_Resultat, LoadFont(#Police_Str_Resultat, "Verdana", 28, #PB_Font_HighQuality))
    SetGadgetFont(#Txt_egal, LoadFont(#Police_Txt_egal, "Verdana", 28, #PB_Font_HighQuality))
  EndIf
EndProcedure

initialiser()

OpenWindow_Fenetre_principale()

SetGadgetText(#Txt_sgn, signes(0, hasard))
SetGadgetText(#Txt_operation, signes(1,hasard))

SetGadgetText(#Str_terme_1,Str(terme_1))
SetGadgetText(#Str_terme_2,Str(terme_2))
SetGadgetText(#Str_Resultat,Str(Resultat))

;{- Boucle d'événements
Repeat
  Evenement = WaitWindowEvent()
  Select Evenement
      ; ///////////////////
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Txt_operation
        Case #Txt_sgn
        Case #Str_terme_1
        Case #Str_terme_2
        Case #Str_Resultat
        Case #Txt_egal
        Case #Btn_Recommencer
          initialiser()
      EndSelect
      ; ////////////////////////
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Fenetre_principale
          CloseWindow(#Fenetre_principale)
          Break
      EndSelect
  EndSelect
ForEver
;
;}
Je vous remercie tous par anticipation.

Michel

Re: Problème de relancement de programme

Publié : mar. 12/août/2014 13:16
par falsam
Ta procédure initialiser() ne met pas à jour ta fenêtre et doit être lancer la première fois après l'ouverture de la fenêtre.

Place cette portion de code à la fin de ta procédure initialiser()

Code : Tout sélectionner

SetGadgetText(#Txt_sgn, signes(0, hasard))
  SetGadgetText(#Txt_operation, signes(1,hasard))

  SetGadgetText(#Str_terme_1,Str(terme_1))
  SetGadgetText(#Str_terme_2,Str(terme_2))
  SetGadgetText(#Str_Resultat,Str(Resultat))
et remplace

Code : Tout sélectionner

initialiser()
OpenWindow_Fenetre_principale()
par

Code : Tout sélectionner

OpenWindow_Fenetre_principale()
initialiser()

Re: Problème de relancement de programme

Publié : mar. 12/août/2014 13:21
par graph100
ah, falsam m'a grillé :D

Mais bon, voila quand même ma correction :

Code : Tout sélectionner

;{- Enumerations / DataSections
;{ Windows
Enumeration
	#Fenetre_principale
EndEnumeration
;}
;{ Gadgets
Enumeration
	#Txt_operation
	#Txt_sgn
	#Str_terme_1
	#Str_terme_2
	#Str_Resultat
	#Txt_egal
	#Btn_Recommencer
EndEnumeration
;}
;{ Polices
Enumeration
	#Police_Txt_operation
	#Police_Txt_sgn
	#Police_Str_terme_1
	#Police_Str_terme_2
	#Police_Str_Resultat
	#Police_Txt_egal
EndEnumeration
;}
Global.i Evenement, hasard, terme_1, terme_2, Resultat
Global Dim signes.s(1,3)
;}

	signes(0,0) = "+" : signes(1,0) = "addition"
	signes(0,1) = "-" : signes(1,1) = "soustraction"
	signes(0,2) = "x" : signes(1,2) = "multiplication"
	signes(0,3) = "/" : signes(1,3) = "division"

Procedure initialiser()  
	hasard = Random(3,0)
	terme_1 = Random(9,1)
	terme_2 = Random(9,1)
	
	
	If hasard = 0
		Resultat = terme_1 + terme_2
		
	ElseIf hasard = 1
		Resultat = terme_1 - terme_2
		
	ElseIf hasard = 2
		Resultat = terme_1 * terme_2
		
	ElseIf hasard = 3
		
		;; Si tu indiques le reste (il faut l'indiquer si tu ne mets les chiffres après la virgule), tu n'as pas besoin d'intervertir les termes
; 		If terme_1 < terme_2
; 			Swap terme_1, terme_2
; 		EndIf
		
		Resultat = Int(terme_1 / terme_2)
		reste = terme_1 % terme_2
	EndIf
	
	
	; mise à jour des gadgets ICI
	SetGadgetText(#Txt_sgn, signes(0, hasard))
	SetGadgetText(#Txt_operation, signes(1,hasard))
	
	SetGadgetText(#Str_terme_1,Str(terme_1))
	SetGadgetText(#Str_terme_2,Str(terme_2))
	
	If hasard = 3
		SetGadgetText(#Str_Resultat, Str(Resultat) + " reste " + reste)
		
	Else
		SetGadgetText(#Str_Resultat,Str(Resultat))
	EndIf
	
EndProcedure

Procedure OpenWindow_Fenetre_principale()
	If OpenWindow(#Fenetre_principale, 568, 165, 224, 462, "Opérations", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
		TextGadget(#Txt_operation, 15, 20, 195, 35, "", #PB_Text_Center)
		TextGadget(#Txt_sgn, 72, 130, 70, 50, "", #PB_Text_Center)
		StringGadget(#Str_terme_1, 80, 65, 55, 50, "")
		StringGadget(#Str_terme_2, 80, 205, 55, 50, "")
		StringGadget(#Str_Resultat, 10, 325, 200, 50, "", #PB_Text_Center)
		TextGadget(#Txt_egal, 25, 270, 170, 50, "=", #PB_Text_Center)
		ButtonGadget(#Btn_Recommencer, 45, 405, 110, 35, "Recommencer")
		; Gadget Fonts
		SetGadgetFont(#Txt_operation, LoadFont(#Police_Txt_operation, "Verdana", 18, #PB_Font_HighQuality))
		SetGadgetFont(#Txt_sgn, LoadFont(#Police_Txt_sgn, "Verdana", 28, #PB_Font_HighQuality))
		SetGadgetFont(#Str_terme_1, LoadFont(#Police_Str_terme_1, "Verdana", 28, #PB_Font_HighQuality))
		SetGadgetFont(#Str_terme_2, LoadFont(#Police_Str_terme_2, "Verdana", 28, #PB_Font_HighQuality))
		SetGadgetFont(#Str_Resultat, LoadFont(#Police_Str_Resultat, "Verdana", 28, #PB_Font_HighQuality))
		SetGadgetFont(#Txt_egal, LoadFont(#Police_Txt_egal, "Verdana", 28, #PB_Font_HighQuality))
	EndIf
EndProcedure


OpenWindow_Fenetre_principale()

initialiser()

;{- Boucle d'événements
Repeat
	Evenement = WaitWindowEvent()
	Select Evenement
			; ///////////////////
		Case #PB_Event_Gadget
			Select EventGadget()
				Case #Txt_operation
				Case #Txt_sgn
				Case #Str_terme_1
				Case #Str_terme_2
				Case #Str_Resultat
				Case #Txt_egal
				Case #Btn_Recommencer
					initialiser()
			EndSelect
			; ////////////////////////
		Case #PB_Event_CloseWindow
			Select EventWindow()
				Case #Fenetre_principale
					CloseWindow(#Fenetre_principale)
					Break
			EndSelect
	EndSelect
ForEver
;
;}

Re: Problème de relancement de programme

Publié : mar. 12/août/2014 13:50
par Micoute
Je vous remercie infiniment, tous les deux !

Re: [Résolu] Problème de relancement de programme

Publié : mar. 12/août/2014 15:20
par falsam
Vont être content les petits enfants de venir chez papy Micoute :mrgreen:

Re: [Résolu] Problème de relancement de programme

Publié : mar. 12/août/2014 15:30
par Micoute
falsam a écrit :Vont être content les petits enfants de venir chez papy Micoute :mrgreen:
Mais, je l'espère bien, bien que j'ai un petit soucis, car je souhaiterais que quand ils ont tapé le bon nombre de carctères, le programme réponde si c'est bien ou mal selon la réponse !

Je resoumets mon code modifié pour montrer ce qui ne va pas !

Code : Tout sélectionner

;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Fenetre_principale
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Txt_operation
  #Txt_sgn
  #Str_terme_1
  #Str_terme_2
  #Str_Resultat
  #Txt_egal
  #Btn_Continuer
EndEnumeration
;}
;{ Polices
Enumeration
  #Police_Txt_operation
  #Police_Txt_sgn
  #Police_Str_terme_1
  #Police_Str_terme_2
  #Police_Str_Resultat
  #Police_Txt_egal
EndEnumeration
;}
Global.i Evenement, hasard, terme_1, terme_2, verite, Resultat
Global Dim signes.s(1,3)
;}

signes(0,0) = "+" : signes(1,0) = "addition"
signes(0,1) = "-" : signes(1,1) = "soustraction"
signes(0,2) = "x" : signes(1,2) = "multiplication"
signes(0,3) = "/" : signes(1,3) = "division"

Procedure Echange()  
  If terme_1 < terme_2
    x = terme_1
    terme_1 = terme_2
    terme_2 = x
  EndIf
EndProcedure

Procedure Initialiser()  
  hasard = Random(2,0) ;pour éviter la division
  terme_1 = Random(9,1)
  terme_2 = Random(9,1)
  If hasard = 0
    Resultat = terme_1 + terme_2
  ElseIf hasard = 1
    Echange()
    Resultat = terme_1 - terme_2
  ElseIf hasard = 2
    Resultat = terme_1 * terme_2
  ElseIf hasard = 3 And terme_1 >= terme_2
    Resultat = terme_1 / terme_2
  ElseIf hasard = 3 And terme_1 < terme_2
    Echange()
    Resultat = terme_1 / terme_2
  EndIf
  
  Verite = Random(2,0)
  
  SetGadgetText(#Txt_sgn, signes(0, hasard))
  SetGadgetText(#Txt_operation, signes(1,hasard))
  
  If verite = 0
    SetGadgetText(#Str_terme_1,Str(terme_1))
    SetGadgetText(#Str_terme_2,"")
    SetGadgetText(#Str_Resultat,Str(Resultat))
    SetActiveGadget(#Str_terme_2)
    
  ElseIf verite = 1
    SetGadgetText(#Str_terme_1,Str(terme_1))
    SetGadgetText(#Str_terme_2,Str(terme_2))
    SetGadgetText(#Str_Resultat,"")
    SetActiveGadget(#Str_Resultat)
    
  ElseIf verite = 2
    SetGadgetText(#Str_terme_1,"")
    SetGadgetText(#Str_terme_2,Str(terme_2))
    SetGadgetText(#Str_Resultat,Str(Resultat))
    SetActiveGadget(#Str_terme_1)
    
  EndIf
  
EndProcedure

Procedure Bien()
  MessageRequester("","Bien joué",#MB_ICONEXCLAMATION)
  ;Initialiser()
EndProcedure

Procedure Mal(parametre)
  MessageRequester("ERREUR","La réponse était "+parametre,#MB_ICONERROR)
  ;Initialiser()
EndProcedure

Procedure GestionResultat()
  If GetGadgetText(#Str_Resultat) = Str(Resultat)
    Bien()
  Else
    Mal(Resultat)
  EndIf
EndProcedure

Procedure GestionTerme_1()
  If GetGadgetText(#Str_terme_1) = Str(terme_1)
    Bien()
  Else
    Mal(terme_1)
  EndIf
EndProcedure

Procedure GestionTerme_2()
  If GetGadgetText(#Str_terme_2) = Str(terme_2)
    Bien()
  Else
    Mal(terme_2)
  EndIf  
EndProcedure

Procedure OpenWindow_Fenetre_principale()
  If OpenWindow(#Fenetre_principale, 568, 165, 224, 462, "Opérations", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    TextGadget(#Txt_operation, 15, 20, 195, 35, "", #PB_Text_Center)
    TextGadget(#Txt_sgn, 72, 130, 70, 50, "", #PB_Text_Center)
    StringGadget(#Str_terme_1, 80, 65, 55, 50, "")
    StringGadget(#Str_terme_2, 80, 205, 55, 50, "")
    StringGadget(#Str_Resultat, 65, 325, 80, 50, "")
    TextGadget(#Txt_egal, 25, 270, 170, 50, "=", #PB_Text_Center)
    ButtonGadget(#Btn_Continuer, 45, 405, 110, 35, "Recommencer")
    ; Gadget Fonts
    SetGadgetFont(#Txt_operation, LoadFont(#Police_Txt_operation, "Verdana", 18, #PB_Font_HighQuality))
    SetGadgetFont(#Txt_sgn, LoadFont(#Police_Txt_sgn, "Verdana", 28, #PB_Font_HighQuality))
    SetGadgetFont(#Str_terme_1, LoadFont(#Police_Str_terme_1, "Verdana", 28, #PB_Font_HighQuality))
    SetGadgetFont(#Str_terme_2, LoadFont(#Police_Str_terme_2, "Verdana", 28, #PB_Font_HighQuality))
    SetGadgetFont(#Str_Resultat, LoadFont(#Police_Str_Resultat, "Verdana", 28, #PB_Font_HighQuality))
    SetGadgetFont(#Txt_egal, LoadFont(#Police_Txt_egal, "Verdana", 28, #PB_Font_HighQuality))
  EndIf
EndProcedure

OpenWindow_Fenetre_principale()
Initialiser()


;{- Boucle d'événements
Repeat
  Evenement = WaitWindowEvent()
  
  Select Evenement
      ; ///////////////////
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Str_terme_1
          If GetGadgetText(#Str_terme_1) <> ""
            BindGadgetEvent(#Str_terme_1, @GestionTerme_1())
          EndIf
        Case #Str_terme_2
          If GetGadgetText(#Str_terme_2) <> ""
            BindGadgetEvent(#Str_terme_2, @GestionTerme_2())
          EndIf
        Case #Str_Resultat
          If GetGadgetText(#Str_Resultat) <> ""
            BindGadgetEvent(#Str_Resultat, @GestionResultat())
          EndIf
        Case #Btn_Continuer
          initialiser()
      EndSelect
      ; ////////////////////////
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Fenetre_principale
          CloseWindow(#Fenetre_principale)
          Break
      EndSelect
  EndSelect
ForEver
;
;}
là, je suis un peu coincé, juste sur un petit truc, je pense, mais je ne vois pas la solution, alors merci de bien vouloir encore m'aider, s'il vous plaît !

Re: [Résolu] Problème de relancement de programme

Publié : mar. 12/août/2014 15:49
par falsam
dans cet extrait de code

Code : Tout sélectionner

Case #PB_Event_Gadget
      Select EventGadget()
        Case #Str_terme_1
          If GetGadgetText(#Str_terme_1) <> ""
            BindGadgetEvent(#Str_terme_1, @GestionTerme_1())
          EndIf
Tu géres deux fois les événements gadgets

■ La premiere fois tu testes si il y a un événement gadget avec Select EventGadget() .... Case #Str_terme_1
■ et de nouveau, tu dis que si il y a un événement gadget alors appel de la procédure GestionTerme_1 avec BindGadgetEvent(#Str_terme_1, @GestionTerme_1())

■ De plus quand tu testes un événement gagdet tu envoies ton message de succes ou erreur et le curseur se retrouve de nouveau sur ce même gadget : Résultat encore un événement pour ce même gadget.

Tu dois aussi tester le type d'évenement: dans ce cas ça sera en cas de sortie du gadget #PB_EventType_LostFocus

Restons traditionnel. Voici ton code modifié.

Code : Tout sélectionner

;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Fenetre_principale
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Txt_operation
  #Txt_sgn
  #Str_terme_1
  #Str_terme_2
  #Str_Resultat
  #Txt_egal
  #Btn_Continuer
EndEnumeration
;}
;{ Polices
Enumeration
  #Police_Txt_operation
  #Police_Txt_sgn
  #Police_Str_terme_1
  #Police_Str_terme_2
  #Police_Str_Resultat
  #Police_Txt_egal
EndEnumeration
;}
Global.i Evenement, hasard, terme_1, terme_2, verite, Resultat
Global Dim signes.s(1,3)
;}

signes(0,0) = "+" : signes(1,0) = "addition"
signes(0,1) = "-" : signes(1,1) = "soustraction"
signes(0,2) = "x" : signes(1,2) = "multiplication"
signes(0,3) = "/" : signes(1,3) = "division"

Procedure Echange()  
  If terme_1 < terme_2
    x = terme_1
    terme_1 = terme_2
    terme_2 = x
  EndIf
EndProcedure

Procedure Initialiser()  
  hasard = Random(2,0) ;pour éviter la division
  terme_1 = Random(9,1)
  terme_2 = Random(9,1)
  If hasard = 0
    Resultat = terme_1 + terme_2
  ElseIf hasard = 1
    Echange()
    Resultat = terme_1 - terme_2
  ElseIf hasard = 2
    Resultat = terme_1 * terme_2
  ElseIf hasard = 3 And terme_1 >= terme_2
    Resultat = terme_1 / terme_2
  ElseIf hasard = 3 And terme_1 < terme_2
    Echange()
    Resultat = terme_1 / terme_2
  EndIf
  
  Verite = Random(2,0)
  
  SetGadgetText(#Txt_sgn, signes(0, hasard))
  SetGadgetText(#Txt_operation, signes(1,hasard))
  
  If verite = 0
    SetGadgetText(#Str_terme_1,Str(terme_1))
    SetGadgetText(#Str_terme_2,"")
    SetGadgetText(#Str_Resultat,Str(Resultat))
    
    DisableGadget(#Str_terme_1, #True)
    DisableGadget(#Str_terme_2, #False)
    DisableGadget(#Str_Resultat, #True)
    
    SetActiveGadget(#Str_terme_2)
    
  ElseIf verite = 1
    SetGadgetText(#Str_terme_1,Str(terme_1))
    SetGadgetText(#Str_terme_2,Str(terme_2))
    SetGadgetText(#Str_Resultat,"")
    
    DisableGadget(#Str_terme_1, #True)
    DisableGadget(#Str_terme_2, #True)
    DisableGadget(#Str_Resultat, #False)
    
    SetActiveGadget(#Str_Resultat)
  ElseIf verite = 2
    SetGadgetText(#Str_terme_1,"")
    SetGadgetText(#Str_terme_2,Str(terme_2))
    SetGadgetText(#Str_Resultat,Str(Resultat))
    
    DisableGadget(#Str_terme_1, #False)
    DisableGadget(#Str_terme_2, #True)
    DisableGadget(#Str_Resultat, #True)
    
    SetActiveGadget(#Str_terme_1)
  EndIf
  
EndProcedure

Procedure Bien()
  MessageRequester("","Bien joué",#MB_ICONEXCLAMATION)
  ;Initialiser()
EndProcedure

Procedure Mal(parametre)
  MessageRequester("ERREUR","La réponse était "+parametre,#MB_ICONERROR)
  ;Initialiser()
EndProcedure

Procedure GestionResultat()
  If GetGadgetText(#Str_Resultat) = Str(Resultat)
    Bien()
  Else
    Mal(Resultat)
  EndIf
EndProcedure

Procedure GestionTerme_1()
  If GetGadgetText(#Str_terme_1) = Str(terme_1)
    Bien()
  Else
    Mal(terme_1)
  EndIf
EndProcedure

Procedure GestionTerme_2()
  If GetGadgetText(#Str_terme_2) = Str(terme_2)
    Bien()
  Else
    Mal(terme_2)
  EndIf  
EndProcedure

Procedure OpenWindow_Fenetre_principale()
  If OpenWindow(#Fenetre_principale, 568, 165, 224, 462, "Opérations", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    TextGadget(#Txt_operation, 15, 20, 195, 35, "", #PB_Text_Center)
    TextGadget(#Txt_sgn, 72, 130, 70, 50, "", #PB_Text_Center)
    StringGadget(#Str_terme_1, 80, 65, 55, 50, "")
    StringGadget(#Str_terme_2, 80, 205, 55, 50, "")
    StringGadget(#Str_Resultat, 65, 325, 80, 50, "")
    TextGadget(#Txt_egal, 25, 270, 170, 50, "=", #PB_Text_Center)
    ButtonGadget(#Btn_Continuer, 45, 405, 110, 35, "Recommencer")
    ; Gadget Fonts
    SetGadgetFont(#Txt_operation, LoadFont(#Police_Txt_operation, "Verdana", 18, #PB_Font_HighQuality))
    SetGadgetFont(#Txt_sgn, LoadFont(#Police_Txt_sgn, "Verdana", 28, #PB_Font_HighQuality))
    SetGadgetFont(#Str_terme_1, LoadFont(#Police_Str_terme_1, "Verdana", 28, #PB_Font_HighQuality))
    SetGadgetFont(#Str_terme_2, LoadFont(#Police_Str_terme_2, "Verdana", 28, #PB_Font_HighQuality))
    SetGadgetFont(#Str_Resultat, LoadFont(#Police_Str_Resultat, "Verdana", 28, #PB_Font_HighQuality))
    SetGadgetFont(#Txt_egal, LoadFont(#Police_Txt_egal, "Verdana", 28, #PB_Font_HighQuality))
  EndIf
EndProcedure

OpenWindow_Fenetre_principale()
Initialiser()


;{- Boucle d'événements
Repeat
  Evenement = WaitWindowEvent()
  
  Select Evenement
      ; ///////////////////
    Case #PB_Event_Gadget
      ActiveGadget = EventGadget()
      Select EventGadget()
          
        Case #Str_terme_1
          If GetGadgetText(#Str_terme_1) <> "" And EventType() = #PB_EventType_LostFocus
            GestionTerme_1()
          EndIf
          
        Case #Str_terme_2
          If GetGadgetText(#Str_terme_2) <> "" And EventType() = #PB_EventType_LostFocus
            GestionTerme_2()
          EndIf
          
        Case #Str_Resultat
          If GetGadgetText(#Str_Resultat) <> "" And EventType() = #PB_EventType_LostFocus
            GestionResultat()
          EndIf
          
        Case #Btn_Continuer
          initialiser()
      EndSelect
      
      
      ; ////////////////////////
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Fenetre_principale
          CloseWindow(#Fenetre_principale)
          Break
      EndSelect
  EndSelect
ForEver
;
;}

Re: [Résolu] Problème de relancement de programme

Publié : mar. 12/août/2014 16:21
par Micoute
Oh merci, mille fois merci, crois-tu que je doive arrêter la programmation ? Je sens quand même que j'ai des lacunes !

Re: [Résolu] Problème de relancement de programme

Publié : mar. 12/août/2014 16:27
par falsam
Micoute a écrit :Oh merci, mille fois merci, crois-tu que je doive arrêter la programmation ? Je sens quand même que j'ai des lacunes !
Surtout pas ....... ça fait travailler le cerveau :)

je vais ouvir un sujet sur les fonctions binds avec un code simplifié.

Re: [Résolu] Problème de relancement de programme

Publié : mar. 12/août/2014 17:26
par majikeyric
petit programme éducatif sympa. Par contre, si la réponse fait 2 chiffres, avec le l'event #PB_EventType_Change on peut juste rentrer le premier.
faudrait aussi gérer la longueur de la chaine de la réponse dans le test.

Re: [Résolu] Problème de relancement de programme

Publié : mar. 12/août/2014 17:55
par falsam
majikeyric a écrit :si la réponse fait 2 chiffres, avec le l'event #PB_EventType_Change on peut juste rentrer le premier.
faudrait aussi gérer la longueur de la chaine de la réponse dans le test.
Oops tu as raison. Il vaut mieux tester une sortie avec #PB_EventType_LostFocus.

Le code est modifié.

Re: [Résolu] Problème de relancement de programme

Publié : mer. 13/août/2014 9:10
par Micoute
Bonjour à tous,

j'ai simplifié ça en mettant:

Code : Tout sélectionner

Case #Str_terme_1
          If Len(GetGadgetText(#Str_terme_1)) = Len(Str(terme_1)) And EventType() = #PB_EventType_Change
            GestionTerme_1()
          EndIf
         
        Case #Str_terme_2
          If Len(GetGadgetText(#Str_terme_2)) = Len(Str(terme_2)) And EventType() = #PB_EventType_Change
            GestionTerme_2()
          EndIf
         
        Case #Str_Resultat
          If Len(GetGadgetText(#Str_Resultat)) = Len(Str(Resultat)) And EventType() = #PB_EventType_Change
            GestionResultat()
          EndIf
comme ça, je suis sûr que l'entrée est de la bonne longueur !

Merci pour vos bon tuyaux, c'est fou ce qu'on peut faire avec plusieurs cerveaux !

Re: [Résolu] Problème de relancement de programme

Publié : mer. 13/août/2014 10:57
par MLD
Bonjour Micoute

Allez je "pinaille" pour économiser un peu de mémoire, et je centre les textes dans les strings (On appel aussi cela mettre le string au milieu de la raie) :oops:

Code : Tout sélectionner

;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Fenetre_principale
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Txt_operation
  #Txt_sgn = 2
  #Str_terme_1 = 3
  #Str_terme_2 = 4
  #Str_Resultat =5
  #Txt_egal = 6
  #Btn_Continuer
EndEnumeration
;}
;{ Polices

Global.i Evenement, hasard, terme_1, terme_2, verite, Resultat
Global Dim signes.s(1,3)
Global FontID1 = LoadFont(1,"Verdana", 28, #PB_Font_HighQuality)
Global FontID2 = LoadFont(2,"Verdana", 18, #PB_Font_HighQuality)
;}

signes(0,0) = "+" : signes(1,0) = "addition"
signes(0,1) = "-" : signes(1,1) = "soustraction"
signes(0,2) = "x" : signes(1,2) = "multiplication"
signes(0,3) = "/" : signes(1,3) = "division"

Procedure Echange()  
  If terme_1 < terme_2
    x = terme_1
    terme_1 = terme_2
    terme_2 = x
  EndIf
EndProcedure

Procedure Initialiser()  
  hasard = Random(2,0) ;pour éviter la division
  terme_1 = Random(9,1)
  terme_2 = Random(9,1)
  If hasard = 0
    Resultat = terme_1 + terme_2
  ElseIf hasard = 1
    Echange()
    Resultat = terme_1 - terme_2
  ElseIf hasard = 2
    Resultat = terme_1 * terme_2
  ElseIf hasard = 3 And terme_1 >= terme_2
    Resultat = terme_1 / terme_2
  ElseIf hasard = 3 And terme_1 < terme_2
    Echange()
    Resultat = terme_1 / terme_2
  EndIf
  
  Verite = Random(2,0)
  
  SetGadgetText(#Txt_sgn, signes(0, hasard))
  SetGadgetText(#Txt_operation, signes(1,hasard))
  
  If verite = 0
    SetGadgetText(#Str_terme_1,Str(terme_1))
    SetGadgetText(#Str_terme_2,"")
    SetGadgetText(#Str_Resultat,Str(Resultat))
    
    DisableGadget(#Str_terme_1, #True)
    DisableGadget(#Str_terme_2, #False)
    DisableGadget(#Str_Resultat, #True)
    
    SetActiveGadget(#Str_terme_2)
    
  ElseIf verite = 1
    SetGadgetText(#Str_terme_1,Str(terme_1))
    SetGadgetText(#Str_terme_2,Str(terme_2))
    SetGadgetText(#Str_Resultat,"")
    
    DisableGadget(#Str_terme_1, #True)
    DisableGadget(#Str_terme_2, #True)
    DisableGadget(#Str_Resultat, #False)
    
    SetActiveGadget(#Str_Resultat)
  ElseIf verite = 2
    SetGadgetText(#Str_terme_1,"")
    SetGadgetText(#Str_terme_2,Str(terme_2))
    SetGadgetText(#Str_Resultat,Str(Resultat))
    
    DisableGadget(#Str_terme_1, #False)
    DisableGadget(#Str_terme_2, #True)
    DisableGadget(#Str_Resultat, #True)
    
    SetActiveGadget(#Str_terme_1)
  EndIf
  
EndProcedure

Procedure Bien()
  MessageRequester("","Bien joué",#MB_ICONEXCLAMATION)
  ;Initialiser()
EndProcedure

Procedure Mal(parametre)
  MessageRequester("ERREUR","La réponse était "+parametre,#MB_ICONERROR)
  ;Initialiser()
EndProcedure

Procedure GestionResultat()
  If GetGadgetText(#Str_Resultat) = Str(Resultat)
    Bien()
  Else
    Mal(Resultat)
  EndIf
EndProcedure

Procedure GestionTerme_1()
  If GetGadgetText(#Str_terme_1) = Str(terme_1)
    Bien()
  Else
    Mal(terme_1)
  EndIf
EndProcedure

Procedure GestionTerme_2()
  If GetGadgetText(#Str_terme_2) = Str(terme_2)
    Bien()
  Else
    Mal(terme_2)
  EndIf  
EndProcedure

Procedure OpenWindow_Fenetre_principale()
  If OpenWindow(#Fenetre_principale, 568, 165, 224, 462, "Opérations", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    TextGadget(#Txt_operation, 15, 20, 195, 35, "", #PB_Text_Center)
    SetGadgetFont(#Txt_operation,FontID2)
    TextGadget(#Txt_sgn, 72, 130, 70, 50, "", #PB_Text_Center)
    StringGadget(#Str_terme_1, 80, 65, 55, 50, "",#ES_CENTER)
    StringGadget(#Str_terme_2, 80, 205, 55, 50, "",#ES_CENTER)
    StringGadget(#Str_Resultat, 65, 325, 80, 50, "",#ES_CENTER)
    TextGadget(#Txt_egal, 25, 270, 170, 50, "=", #PB_Text_Center)
    For x = 2 To 6
      SetGadgetFont(x,FontID1)
    Next  
    ButtonGadget(#Btn_Continuer, 45, 405, 110, 35, "Recommencer")
  EndIf
EndProcedure

OpenWindow_Fenetre_principale()
Initialiser()


;{- Boucle d'événements
Repeat
  Evenement = WaitWindowEvent()
  
  Select Evenement
      ; ///////////////////
    Case #PB_Event_Gadget
      ActiveGadget = EventGadget()
      Select EventGadget()
          
        Case #Str_terme_1
          If GetGadgetText(#Str_terme_1) <> "" And EventType() = #PB_EventType_LostFocus
            GestionTerme_1()
          EndIf
          
        Case #Str_terme_2
          If GetGadgetText(#Str_terme_2) <> "" And EventType() = #PB_EventType_LostFocus
            GestionTerme_2()
          EndIf
          
        Case #Str_Resultat
          If GetGadgetText(#Str_Resultat) <> "" And EventType() = #PB_EventType_LostFocus
            GestionResultat()
          EndIf
          
        Case #Btn_Continuer
          initialiser()
      EndSelect
      
      
      ; ////////////////////////
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Fenetre_principale
          CloseWindow(#Fenetre_principale)
          Break
      EndSelect
  EndSelect
ForEver
;
;}


Re: [Résolu] Problème de relancement de programme

Publié : mer. 13/août/2014 11:07
par Micoute
Bonjour MLD, tu as parfaitement raison de pinailler, car quand c'est beau, ça marche forcément mieux !