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

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

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

Message 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
Dernière modification par Micoute le mar. 12/août/2014 13:50, modifié 1 fois.
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 !
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème de relancement de programme

Message 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()
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Problème de relancement de programme

Message 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
;
;}
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Problème de relancement de programme

Message par Micoute »

Je vous remercie infiniment, tous les deux !
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 !
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message par falsam »

Vont être content les petits enfants de venir chez papy Micoute :mrgreen:
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message 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 !
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 !
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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
;
;}
Dernière modification par falsam le mar. 12/août/2014 17:55, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message 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 !
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 !
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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é.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

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

Message 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.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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é.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message 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 !
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 !
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

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

Message 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
;
;}

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

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

Message par Micoute »

Bonjour MLD, tu as parfaitement raison de pinailler, car quand c'est beau, ça marche forcément mieux !
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