Page 1 sur 1

Associer dans une procédure fenêtre et événements

Publié : sam. 03/août/2013 15:32
par fd
Bonjour,

J'ai écrit un programme qui comporte une dizaine de fenêtres différentes. Pour mieux me retrouver dans me code et le faire évoluer partiellement, j'ai voulu isoler chaque fenêtre dans un fichier et surtout ne plus avoir un très long code de gestion de tous les événements.
Chaque fichier contient donc Enumération des variables, procédures et une procédure contenant la création de la fenêtre, des gadgets et une boucle avec le traitement des événements de la fenêtre (ainsi que la fermeture de la fenêtre).
La fenêtre 1 était ouverte par un clic sur un bouton de la fenêtre 0.
Le problème est que lorsque je ferme la fenêtre 1, les événements de la fenêtre 0 qui était restée ouverte ne sont plus traités ?
J’espérais retrouver une fenêtre 0 fonctionnelle avec ses événements ...

Merci

Re: Associer dans une procédure fenêtre et événements

Publié : sam. 03/août/2013 16:27
par Backup
perso je deconseille l'emploi de multiple fichier d'include... mais chacun fait comme il veut .... et pleure :lol:

dans l'absolu, je pense qu'il ne te faut Qu'une seule boucle des events !

voici le principe de base :

Code : Tout sélectionner

Enumeration 0 ; Id. Fenêtres
	#FENETRE1
	#FENETRE2
EndEnumeration
Enumeration 0 ; Id. Gadgets
	#FEN1_BOUTON
	#FEN1_FERMER
	#FEN2_FERMER
EndEnumeration

If OpenWindow(#FENETRE1, 0, 0, 640, 480, "Fenêtre 1", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
	
	If CreateGadgetList(WindowID(#FENETRE1))
		ButtonGadget(#FEN1_BOUTON, 5,  5, 100, 22, "Ouvrir Fenêtre 2")
		ButtonGadget(#FEN1_FERMER, 5, 45, 100, 22, "Quitter")
	EndIf
	
	Repeat
		
		Evenement.l = WaitWindowEvent()
		
		Select EventWindow()
			
			;=====================================================
			;== EVENEMENTS DE LA FENETRE PRINCIPALE
			;=====================================================
			
			Case #FENETRE1
			
			Select Evenement
				
				Case #PB_Event_Gadget
				
				Select EventGadget()
					
					Case #FEN1_BOUTON
					If OpenWindow(#FENETRE2, 0, 0, 320, 240, "Fenêtre 2", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
						If CreateGadgetList(WindowID(#FENETRE2))
							ButtonGadget(#FEN2_FERMER, 5, 5, 100, 22, "Fermer")
						EndIf
					EndIf
					
					Case #FEN1_FERMER
					Break
					
				EndSelect
				
				Case #PB_Event_CloseWindow
				Break
				
			EndSelect
			
			;=====================================================
			;== EVENEMENTS DE LA FENETRE SECONDAIRE
			;=====================================================
			
			Case #FENETRE2
			
			Select Evenement
				
				Case #PB_Event_Gadget
				
				If EventGadget() = #FEN2_FERMER
					CloseWindow(#FENETRE2)
				EndIf
				
				Case #PB_Event_CloseWindow
				
				CloseWindow(#FENETRE2)
				
			EndSelect
			
		EndSelect
		
	ForEver
	
EndIf


; 

; EPB

Re: Associer dans une procédure fenêtre et événements

Publié : sam. 03/août/2013 16:58
par fd
Oui, c'était exactement mon programme initial.
C'est la multiplication des boucles events associées à chaque fenêtre (un par fenêtre et donc par include) qui foire !

Re: Associer dans une procédure fenêtre et événements

Publié : sam. 03/août/2013 17:49
par Backup
dans le code ci dessus , il n'y a pas multiplication de boucles d'events ....

il n'y a qu'une seule boucle d'events .... ! (ici Repeat-forever avec un seul " Evenement.l = WaitWindowEvent()")

si tu respectes cette architecture .... en donnant le bon nom des fenêtres ... ça doit le faire

maintenant si tu t'amuses a séparer le contenu de la boucle principale (d'events )
en multiple fichiers.... il faut alors que tes includes se trouvent aux bon endroits ...(a l'endroit ou devrait se trouver le code qu'ils remplacent )

du moment que pour l'ensemble de tes fichiers , il y ait 1 seul Repeat-forever avec un seul " Evenement.l = WaitWindowEvent()"
et pas un Repeat-forever ou/et un WaitWindowEvent() par fichier include ... :roll:

car lorsque tu ecris :
Chaque fichier contient donc ......... une boucle avec le traitement des événements de la fenêtre (ainsi que la fermeture de la fenêtre).
ben t'as tout faux ;)

en general on isole éventuellement la boucle principale (qui gere donc les Events ) generalement Repeat --- until ***

mais on ne scinde pas cette boucle

Re: Associer dans une procédure fenêtre et événements

Publié : dim. 04/août/2013 6:34
par Michalon
Bonjour
jai pas bien compris , pourquoi il ya écris Repeat-forever ? moi j'ai appris avec la doc que c'est Repeat-Until Normalement

Re: Associer dans une procédure fenêtre et événements

Publié : dim. 04/août/2013 6:51
par Backup
en programmation , il n'y a pas vraiment de règles établies
l'essentiel c'est que ça marche :)

si tu utilises repeat--until la condition de sortie se fait en fin de boucle (dans le until)...

si tu utilise repeat --- Forever (equivalent de Do---Loop )
il faut mettre une condition de sortie , ici dans le code
elle a lieu par un Select -- Case --- endSelect

l'essentiel, c'est qu'il y ai une condition de sortie au cas ou l'on ferme la fenetre .. :)

de pus , il y a 2 fenetres a tester ... cela obligerai a mettre les 2 conditions de sortie
dans le meme UNTIL ... avec un OR ou un AND
ou faire 2 boucles Repeat---- Until (une pour chaque fenetre ) ... bref le cirque

en utilisant FOREVER cela permet de mettre pour chaque fenetre la condition de sortie
dans un Case :)

Re: Associer dans une procédure fenêtre et événements

Publié : dim. 04/août/2013 9:38
par Michalon
merci beaucoup pour tes explications

Re: Associer dans une procédure fenêtre et événements

Publié : dim. 04/août/2013 10:07
par falsam
Dobro a écrit :en programmation , il n'y a pas vraiment de règles établies
l'essentiel c'est que ça marche :)
Exactement Dobro. Que penses tu de la structure suivante pour des programmes un peu conséquents.

Main.pb - Programme principal de l'application

Code : Tout sélectionner

IncludeFile "declare.pbi" 
IncludeFile "mainform1.pbi"
IncludeFile "mainform2.pbi"

OpenMainForm1()
OpenMainForm2()

Repeat
  Event = WaitWindowEvent()
  WEvent = EventWindow()
  
  Mainform1_Events(Event)
  Mainform2_Events(Event)
 
Until Event = #PB_Event_CloseWindow And WEvent = #MF1
Declare.pbi - Contient les déclaration de procédures

Code : Tout sélectionner

Declare OpenMainForm1()
Declare OpenMainForm2()
MainForm1.pbi - Première Fenêtre

Code : Tout sélectionner

Enumeration #PB_Compiler_EnumerationValue
  #MF1
  #MF1_OpenMF2
EndEnumeration


Procedure OpenMainform1()
  OpenWindow(#MF1, 0, 0, 800, 600, "Mainform 1", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ButtonGadget(#MF1_OpenMF2, 700, 20, 80, 22, "Ouvre MF2")
EndProcedure

Procedure Mainform1_Events(event)
  Select event
    Case #PB_Event_CloseWindow
      ProcedureReturn #False

    Case #PB_Event_Menu
      Select EventMenu()
      EndSelect

    Case #PB_Event_Gadget
      Select EventGadget()
        Case #MF1_OpenMF2
          OpenMainform2()
      EndSelect
  EndSelect
  ProcedureReturn #True
EndProcedure
MainForm2.pbi - Deuxième fenêtre

Code : Tout sélectionner

Enumeration #PB_Compiler_EnumerationValue
  #MF2
EndEnumeration


Procedure OpenMainForm2()
  OpenWindow(#MF2, 0, 0, 400, 300, "MainForm 2", #PB_Window_SystemMenu | #PB_Window_WindowCentered)
  StickyWindow(#MF2, 1) ;Fenetre au premier plan
EndProcedure

Procedure MainForm2_Events(event)
  Select event
    Case #PB_Event_CloseWindow
      CloseWindow(EventWindow())
      
    Case #PB_Event_Menu
      Select EventMenu()
      EndSelect

    Case #PB_Event_Gadget
      Select EventGadget()
      EndSelect
  EndSelect
  
  ProcedureReturn #True
EndProcedure
Je pense que ça apporte une certaine souplesse et surtout plus de clarté dans le code.

Re: Associer dans une procédure fenêtre et événements

Publié : dim. 04/août/2013 10:37
par Michalon
Si j'ai bien compris ton explication Falsam
tu crée 3 codes et tu crée un 4 ieme qui sera le code principale de ton programme en utilisant IncludeFile pour appellez les 3 codes .

Re: Associer dans une procédure fenêtre et événements

Publié : dim. 04/août/2013 11:12
par Backup
@Michalon : oui : c'est ce qu'il fait :)

falsam a écrit :Que penses tu de la structure suivante pour des programmes un peu conséquents.
oui c'est bien ... :)

mais je le redis , pour ma part j'evite le plus possible de faire ça
car une fois que le programme fonctionne c'est nickel
mais en cours de mise au point , debugger un prg qui fait appel a des includes
ça deviens vite galere .... :)

car quelque fois une erreur peut etre signalé dans une partie de code.. donc dans un include
alors qu'en fait l'erreur a été commise précédemment dans le code ... donc dans un autre include

bref , on passe son temps a courir d'un include a l'autre ...
et je ne parle meme pas d'erreur d’écriture de mémoire
qui sont deja loin d'etre évidentes a débusquer lorsqu'on a l’intégralité du code sous les yeux ...

option explicite obligatoire dans le cas d'includes



pour ma part , je préfère avoir tout dans le même éditeur
avec des Signets bien placé
;- creation fenetre
;- boucle principale
;-Procedures

etc .....

comme ça je saute d'un bout a l'autre de mon code rien qu'avec un seul click souris :)

au moins sur du code a 8500 lignes ça passe encore bien ...
j'ai juste été obligé d'utiliser les includes pour mon synthetiseur Vocale
qui prends un max de lignes concernant l'attribution des sons ...
j'avais donc effectivement été obligé de séparer l'analyseur syntaxique
du reste .... mais seulement lorsque tout fonctionnait ... :)

Re: Associer dans une procédure fenêtre et événements

Publié : lun. 05/août/2013 12:34
par Micoute
Bonjour à tous, moi je pense que le plus simple, ce sont les modules !

Code : Tout sélectionner

;-Module Tension
DeclareModule Tension
Enumeration
   #Fenetre_principale   
   #Fenetre_T
EndEnumeration

Enumeration 10
   #Conteneur_T
   #Option_T1
   #Option_T2
   #Option_T3
   #Option_T4
   
   #TexteQuestion_T1
   #TexteQuestion_T2
   #ChaineQuestion_T1
   #ChaineQuestion_T2
   
   #BoutonConvertir_T
   #BoutonSortir_T
   #ChaineResultat_T
   #Cadre_T
EndEnumeration
Declare Ouvrir_Fenetre()
Declare U_RI()
Declare U_PR()
Declare U_PI()
EndDeclareModule

;-Module Intensité
DeclareModule Intensite
Enumeration
   #Fenetre_principale   
   #Fenetre_I=2
EndEnumeration

Enumeration 20
   #Conteneur_i
   #Option_I1
   #Option_I2
   #Option_I3
   #Option_I4
   
   #TexteQuestion_I1
   #TexteQuestion_I2
   #ChaineQuestion_I1
   #ChaineQuestion_I2
   
   #BoutonConvertir_I
   #BoutonSortir_I
   #ChaineResultat_I
   #Cadre_I
EndEnumeration
Declare Ouvrir_Fenetre()
Declare I_UP()
Declare I_PR()
Declare I_UR()
EndDeclareModule

;-Module Résistance
DeclareModule Resistance
Enumeration
   #Fenetre_principale   
   #Fenetre_R=3
EndEnumeration

Enumeration 30
   #Conteneur_R
   #Option_R1
   #Option_R2
   #Option_R3
   #Option_R4
   
   #TexteQuestion_R1
   #TexteQuestion_R2
   #ChaineQuestion_R1
   #ChaineQuestion_R2
   
   #BoutonConvertir_R
   #BoutonSortir_R
   #ChaineResultat_R
   #Cadre_R
EndEnumeration
Declare Ouvrir_Fenetre()
Declare R_PI()
Declare R_UI()
Declare R_UP()
EndDeclareModule

;-Module Puissance
DeclareModule Puissance
Enumeration
   #Fenetre_principale   
   #Fenetre_P=4
EndEnumeration

Enumeration 40
   #Conteneur_P
   #Option_P1
   #Option_P2
   #Option_P3
   #Option_P4
   
   #TexteQuestion_P1
   #TexteQuestion_P2
   #ChaineQuestion_P1
   #ChaineQuestion_P2
   
   #BoutonConvertir_P
   #BoutonSortir_P
   #ChaineResultat_P
   #Cadre_P
EndEnumeration
Declare Ouvrir_Fenetre()
Declare P_UR()
Declare P_UI()
Declare P_RI()
EndDeclareModule

Enumeration
   #Fenetre_Principale
   #Fenetre_T
   #Fenetre_I
   #Fenetre_R
   #Fenetre_P
EndEnumeration
;}
;{ Gadgets
Enumeration 
   #Conteneur
   #Option_1
   #Option_2
   #Option_3
   #Option_4
EndEnumeration

Enumeration 10
   #Conteneur_T
   #Option_T1
   #Option_T2
   #Option_T3
   #Option_T4
   
   #TexteQuestion_T1
   #TexteQuestion_T2
   #ChaineQuestion_T1
   #ChaineQuestion_T2
   
   #BoutonConvertir_T
   #BoutonSortir_T
   #ChaineResultat_T
   #Cadre_T
EndEnumeration

Enumeration 20
   #Conteneur_i
   #Option_I1
   #Option_I2
   #Option_I3
   #Option_I4
   
   #TexteQuestion_I1
   #TexteQuestion_I2
   #ChaineQuestion_I1
   #ChaineQuestion_I2
   
   #BoutonConvertir_I
   #BoutonSortir_I
   #ChaineResultat_I
   #Cadre_I
EndEnumeration

Enumeration 30
   #Conteneur_R
   #Option_R1
   #Option_R2
   #Option_R3
   #Option_R4
   
   #TexteQuestion_R1
   #TexteQuestion_R2
   #ChaineQuestion_R1
   #ChaineQuestion_R2
   
   #BoutonConvertir_R
   #BoutonSortir_R
   #ChaineResultat_R
   #Cadre_R
EndEnumeration

Enumeration 40
   #Conteneur_P
   #Option_P1
   #Option_P2
   #Option_P3
   #Option_P4
   
   #TexteQuestion_P1
   #TexteQuestion_P2
   #ChaineQuestion_P1
   #ChaineQuestion_P2
   
   #BoutonConvertir_P
   #BoutonSortir_P
   #ChaineResultat_P
   #Cadre_P

   #BoutonQuitter
   #Image_UIR
EndEnumeration
;}
Global  Event, EventWindow, EventGadget, EventType, EventMenu, Resultat
Global.f Tension, Intensite, Resistance, Puissance, U, I, R, P
Global FichierImage1$ = "D:\Programmation\Prg perso\Gfx\UIR.png"
UsePNGImageDecoder()
;}
Procedure Ouvrir_Fenetre()
   If OpenWindow(#Fenetre_Principale, 450, 200, 400, 400, "Loi d'Ohm", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
      ContainerGadget(#Conteneur, 5, 5, 190, 250, #PB_Container_Raised)
      OptionGadget(#Option_1, 20, 10, 80, 30, "Tension")
      OptionGadget(#Option_2, 20, 70, 80, 30, "Intensité")
      OptionGadget(#Option_3, 20, 130, 80, 30, "Résistance")
      OptionGadget(#Option_4, 20, 190, 80, 30, "Puissance")
      CloseGadgetList()
      
      Resultat = CreateImage(#Image_UIR, 185, 227)
      If Resultat
         Resultat = LoadImage(#Image_UIR, FichierImage1$)
         If Resultat
            ResizeImage(#Image_UIR,190, 250)
            ImageGadget(#Image_UIR, 200,5,190,250, ImageID(#Image_UIR))
         EndIf
      EndIf
      
      ButtonGadget(#BoutonQuitter, 170, 320, 60, 30, "Quitter")
   EndIf
EndProcedure

Module Tension
Procedure Ouvrir_Fenetre()
   If OpenWindow(#Fenetre_T, 450, 200, 400, 400, "Tension", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
      ContainerGadget(#Conteneur_T, 0, 00, 400, 200, #PB_Container_Raised)
      OptionGadget(#Option_T1, 15, 15, 140, 30, "Résistance et Intensité")
      OptionGadget(#Option_T2, 15, 55, 140, 30, "Puissance et Résistance")
      OptionGadget(#Option_T3, 15, 95, 140, 30, "Puissance et Intensité")
      CloseGadgetList()
   EndIf
EndProcedure

Procedure U_RI()
   TextGadget(#TexteQuestion_T1, 25, 235, 190, 25, "Résistance en Ohms")
   TextGadget(#TexteQuestion_T2, 25, 270, 190, 25, "Intensité en Ampères")
   StringGadget(#ChaineQuestion_T1, 215, 235, 160, 20, "")
   StringGadget(#ChaineQuestion_T2, 215, 270, 159, 20, "")
   ButtonGadget(#BoutonConvertir_T, 105, 310, 90, 20, "Convertir")
   ButtonGadget(#BoutonSortir_T, 220, 310, 90, 20, "Sortir")
   StringGadget(#ChaineResultat_T, 25, 345, 350, 20, "", #PB_String_ReadOnly)
   FrameGadget(#Cadre_T, 15, 220, 370, 160, "Tension")
EndProcedure

Procedure U_PR()
   
   TextGadget(#TexteQuestion_T1, 25, 235, 190, 25, "Puissance en Watts")
   TextGadget(#TexteQuestion_T2, 25, 270, 190, 25, "Résistance en Ohms")
   StringGadget(#ChaineQuestion_T1, 215, 235, 160, 20, "")
   StringGadget(#ChaineQuestion_T2, 215, 270, 159, 20, "")
   ButtonGadget(#BoutonConvertir_T, 105, 310, 90, 20, "Convertir")
   ButtonGadget(#BoutonSortir_T, 220, 310, 90, 20, "Sortir")
   StringGadget(#ChaineResultat_T, 25, 345, 350, 20, "", #PB_String_ReadOnly)
   FrameGadget(#Cadre_T, 15, 220, 370, 160, "Tension")
EndProcedure

Procedure U_PI()
   TextGadget(#TexteQuestion_T1, 25, 235, 190, 25, "Puissance en Watts")
   TextGadget(#TexteQuestion_T2, 25, 270, 190, 25, "Intensité en Ampères")
   StringGadget(#ChaineQuestion_T1, 215, 235, 160, 20, "")
   StringGadget(#ChaineQuestion_T2, 215, 270, 159, 20, "")
   ButtonGadget(#BoutonConvertir_T, 105, 310, 90, 20, "Convertir")
   ButtonGadget(#BoutonSortir_T, 220, 310, 90, 20, "Sortir")
   StringGadget(#ChaineResultat_T, 25, 345, 350, 20, "", #PB_String_ReadOnly)
   FrameGadget(#Cadre_T, 15, 220, 370, 160, "Tension")
EndProcedure
EndModule

Module Intensite
Procedure Ouvrir_Fenetre()
   If OpenWindow(#Fenetre_I, 450, 200, 400, 400, "Intensité", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
      ContainerGadget(#Conteneur_i, 0, 00, 400, 200, #PB_Container_Raised)
      OptionGadget(#Option_I1, 15, 15, 140, 30, "Tension et Puissance")
      OptionGadget(#Option_I2, 15, 55, 140, 30, "Puissance et Résistance")
      OptionGadget(#Option_I3, 15, 95, 140, 30, "Tension et Résistance")
      CloseGadgetList()
   EndIf
EndProcedure

Procedure I_UP()
   TextGadget(#TexteQuestion_I1, 25, 235, 190, 25, "Tension en Volts")
   TextGadget(#TexteQuestion_I2, 25, 270, 190, 25, "Puissance en Watts")
   StringGadget(#ChaineQuestion_I1, 215, 235, 160, 20, "")
   StringGadget(#ChaineQuestion_I2, 215, 270, 159, 20, "")
   ButtonGadget(#BoutonConvertir_I, 105, 310, 90, 20, "Convertir")
   ButtonGadget(#BoutonSortir_I, 220, 310, 90, 20, "Sortir")
   StringGadget(#ChaineResultat_I, 25, 345, 350, 20, "", #PB_String_ReadOnly)
   FrameGadget(#Cadre_I, 15, 220, 370, 160, "Intensité")
EndProcedure

Procedure I_PR()
   TextGadget(#TexteQuestion_I1, 25, 235, 190, 25, "Puissance en Watts")
   TextGadget(#TexteQuestion_I2, 25, 270, 190, 25, "Résistance en Ohms")
   StringGadget(#ChaineQuestion_I1, 215, 235, 160, 20, "")
   StringGadget(#ChaineQuestion_I2, 215, 270, 159, 20, "")
   ButtonGadget(#BoutonConvertir_I, 105, 310, 90, 20, "Convertir")
   ButtonGadget(#BoutonSortir_I, 220, 310, 90, 20, "Sortir")
   StringGadget(#ChaineResultat_I, 25, 345, 350, 20, "", #PB_String_ReadOnly)
   FrameGadget(#Cadre_I, 15, 220, 370, 160, "Intensité")
EndProcedure

Procedure I_UR()
   TextGadget(#TexteQuestion_I1, 25, 235, 190, 25, "Tension en Volts")
   TextGadget(#TexteQuestion_I2, 25, 270, 190, 25, "Résistance en Ohms")
   StringGadget(#ChaineQuestion_I1, 215, 235, 160, 20, "")
   StringGadget(#ChaineQuestion_I2, 215, 270, 159, 20, "")
   ButtonGadget(#BoutonConvertir_I, 105, 310, 90, 20, "Convertir")
   ButtonGadget(#BoutonSortir_I, 220, 310, 90, 20, "Sortir")
   StringGadget(#ChaineResultat_I, 25, 345, 350, 20, "", #PB_String_ReadOnly)
   FrameGadget(#Cadre_I, 15, 220, 370, 160, "Intensité")
EndProcedure
EndModule

Module Resistance
Procedure Ouvrir_Fenetre()
   If OpenWindow(#Fenetre_R, 452, 200, 400, 400, "Résistance", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
      ContainerGadget(#Conteneur_R, 0, 00, 400, 200, #PB_Container_Raised)
      OptionGadget(#Option_R1, 15, 15, 140, 30, "Puissance et Intensité")
      OptionGadget(#Option_R2, 15, 55, 140, 30, "Tension et intensité")
      OptionGadget(#Option_R3, 15, 95, 140, 30, "Tension et Puissance")
      CloseGadgetList()
   EndIf
EndProcedure

Procedure R_PI()
   TextGadget(#TexteQuestion_R1, 25, 235, 190, 25, "Puissance en Watts")
   TextGadget(#TexteQuestion_R2, 25, 270, 190, 25, "Intensité en Ampères")
   StringGadget(#ChaineQuestion_R1, 215, 235, 160, 20, "")
   StringGadget(#ChaineQuestion_R2, 215, 270, 159, 20, "")
   ButtonGadget(#BoutonConvertir_R, 105, 310, 90, 20, "Convertir")
   ButtonGadget(#BoutonSortir_R, 220, 310, 90, 20, "Sortir")
   StringGadget(#ChaineResultat_R, 25, 345, 350, 20, "", #PB_String_ReadOnly)
   FrameGadget(#Cadre_R, 15, 220, 370, 160, "Résistance")
EndProcedure

Procedure R_UI()
   TextGadget(#TexteQuestion_R1, 25, 235, 190, 25, "Tension en Volts")
   TextGadget(#TexteQuestion_R2, 25, 270, 190, 25, "Intensité en Ampères")
   StringGadget(#ChaineQuestion_R1, 215, 235, 160, 20, "")
   StringGadget(#ChaineQuestion_R2, 215, 270, 159, 20, "")
   ButtonGadget(#BoutonConvertir_R, 105, 310, 90, 20, "Convertir")
   ButtonGadget(#BoutonSortir_R, 220, 310, 90, 20, "Sortir")
   StringGadget(#ChaineResultat_R, 25, 345, 350, 20, "", #PB_String_ReadOnly)
   FrameGadget(#Cadre_R, 15, 220, 370, 160, "Résistance")
EndProcedure

Procedure R_UP()
   TextGadget(#TexteQuestion_R1, 25, 235, 190, 25, "Tension en Volts")
   TextGadget(#TexteQuestion_R2, 25, 270, 190, 25, "Puissance en Watts")
   StringGadget(#ChaineQuestion_R1, 215, 235, 160, 20, "")
   StringGadget(#ChaineQuestion_R2, 215, 270, 159, 20, "")
   ButtonGadget(#BoutonConvertir_R, 105, 310, 90, 20, "Convertir")
   ButtonGadget(#BoutonSortir_R, 220, 310, 90, 20, "Sortir")
   StringGadget(#ChaineResultat_R, 25, 345, 350, 20, "", #PB_String_ReadOnly)
   FrameGadget(#Cadre_R, 15, 220, 370, 160, "Résistance")
EndProcedure
EndModule

Module Puissance
Procedure Ouvrir_Fenetre()
   If OpenWindow(#Fenetre_P, 450, 200, 400, 400, "Puissance", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
      ContainerGadget(#Conteneur_P, 0, 00, 400, 200, #PB_Container_Raised)
      OptionGadget(#Option_P1, 15, 15, 140, 30, "Tension et Résistance")
      OptionGadget(#Option_P2, 15, 55, 140, 30, "Tension et Intensité")
      OptionGadget(#Option_P3, 15, 95, 140, 30, "Résistance et Intensité")
      CloseGadgetList()
   EndIf
EndProcedure

Procedure P_UR()
   TextGadget(#TexteQuestion_P1, 25, 235, 190, 25, "Tension en volts")
   TextGadget(#TexteQuestion_P2, 25, 270, 190, 25, "Résistance en Ohms")
   StringGadget(#ChaineQuestion_P1, 215, 235, 160, 20, "")
   StringGadget(#ChaineQuestion_P2, 215, 270, 159, 20, "")
   ButtonGadget(#BoutonConvertir_P, 105, 310, 90, 20, "Convertir")
   ButtonGadget(#BoutonSortir_P, 220, 310, 90, 20, "Sortir")
   StringGadget(#ChaineResultat_P, 25, 345, 350, 20, "", #PB_String_ReadOnly)
   FrameGadget(#Cadre_P, 15, 220, 370, 160, "Puissance")
EndProcedure

Procedure P_UI()
   TextGadget(#TexteQuestion_P1, 25, 235, 190, 25, "Tension en Volts")
   TextGadget(#TexteQuestion_P2, 25, 270, 190, 25, "Intensité en Ampères")
   StringGadget(#ChaineQuestion_P1, 215, 235, 160, 20, "")
   StringGadget(#ChaineQuestion_P2, 215, 270, 159, 20, "")
   ButtonGadget(#BoutonConvertir_P, 105, 310, 90, 20, "Convertir")
   ButtonGadget(#BoutonSortir_P, 220, 310, 90, 20, "Sortir")
   StringGadget(#ChaineResultat_P, 25, 345, 350, 20, "", #PB_String_ReadOnly)
   FrameGadget(#Cadre_P, 15, 220, 370, 160, "Puissance")
EndProcedure

Procedure P_RI()
   TextGadget(#TexteQuestion_P1, 25, 235, 190, 25, "Résistance en Ohms")
   TextGadget(#TexteQuestion_P2, 25, 270, 190, 25, "Intensité en Ampères")
   StringGadget(#ChaineQuestion_P1, 215, 235, 160, 20, "")
   StringGadget(#ChaineQuestion_P2, 215, 270, 159, 20, "")
   ButtonGadget(#BoutonConvertir_P, 105, 310, 90, 20, "Convertir")
   ButtonGadget(#BoutonSortir_P, 220, 310, 90, 20, "Sortir")
   StringGadget(#ChaineResultat_P, 25, 345, 350, 20, "", #PB_String_ReadOnly)
   FrameGadget(#Cadre_P, 15, 220, 370, 160, "Puissance")
EndProcedure
EndModule

Ouvrir_Fenetre()

;{- Boucle des évenement
Repeat
   Event = WaitWindowEvent()
   Select Event
         ; ///////////////////
      Case #PB_Event_Gadget
         EventGadget = EventGadget()
         EventType = EventType()
         If EventGadget = #Option_1
            Tension::Ouvrir_Fenetre()
         ElseIf EventGadget = #Option_2
            Intensite::Ouvrir_Fenetre()
         ElseIf EventGadget = #Option_3
            Resistance::Ouvrir_Fenetre()
         ElseIf EventGadget = #Option_4
            Puissance::Ouvrir_Fenetre()
            
         ElseIf EventGadget = Tension::#Option_T1
            Resultat = 11
            Tension::U_RI()
         ElseIf EventGadget = Tension::#Option_T2
            Resultat = 12
            Tension::U_PR()
         ElseIf EventGadget = Tension::#Option_T3
            Resultat = 13
            Tension::U_PI()
            
         ElseIf EventGadget = Intensite::#Option_I1
            Resultat = 21
            Intensite::I_UP()
         ElseIf EventGadget = Intensite::#Option_I2
            Resultat = 22
            Intensite::I_UR()
         ElseIf EventGadget = Intensite::#option_I3
            Resultat = 23
            Intensite::I_PR()
            
         ElseIf EventGadget = Resistance::#Option_R1
            Resultat = 31
            Resistance::R_PI()
         ElseIf EventGadget = Resistance::#Option_R2
            Resultat = 32
            Resistance::R_UI()
         ElseIf EventGadget = Resistance::#Option_R3
            Resultat = 33
            Resistance::R_UP()
            
         ElseIf EventGadget = Puissance::#Option_P1
            Resultat = 41
            Puissance::P_UR()
         ElseIf EventGadget = Puissance::#Option_P2
            Resultat = 42
            Puissance::P_UI()
         ElseIf EventGadget = Puissance::#Option_P3
            Resultat = 43
            Puissance::P_RI()
            
         ElseIf EventGadget = Tension::#BoutonSortir_T
            Tension::CloseWindow(Tension::#Fenetre_T)
         ElseIf EventGadget = Intensite::#BoutonSortir_I
            Intensite::CloseWindow(Intensite::#Fenetre_I)
         ElseIf EventGadget = Resistance::#BoutonSortir_R
            Resistance::CloseWindow(Resistance::#Fenetre_R)
         ElseIf EventGadget = Puissance::#BoutonSortir_P
            Puissance::CloseWindow(Puissance::#Fenetre_P)
            
         ElseIf EventGadget = Tension::#BoutonConvertir_T
            If Resultat = 11
               R.f = ValF(GetGadgetText(Tension::#ChaineQuestion_T1))
               I.f = ValF(GetGadgetText(Tension::#ChaineQuestion_T2))
               SetGadgetText(Tension::#ChaineResultat_T, "La Tension est de " + StrF(R * I, 2)+" Volts")
            EndIf
            If Resultat = 12
               P.f = ValF(GetGadgetText(Tension::#ChaineQuestion_T1))
               R.f = ValF(GetGadgetText(Tension::#ChaineQuestion_T2))
               SetGadgetText(Tension::#ChaineResultat_T, "La Tension est de " + StrF(Sqr(P * R), 2)+" Volts")
            EndIf
            If Resultat = 13
               P.f = ValF(GetGadgetText(Tension::#ChaineQuestion_T1))
               I.f = ValF(GetGadgetText(Tension::#ChaineQuestion_T2))
               SetGadgetText(Tension::#ChaineResultat_T, "La Tension est de " + StrF(P / I, 2)+" Volts")
            EndIf
            
         ElseIf EventGadget = Intensite::#BoutonConvertir_I	
            If Resultat = 21
               U.f = ValF(GetGadgetText(Intensite::#ChaineQuestion_I1))
               P.f = ValF(GetGadgetText(Intensite::#ChaineQuestion_I2))
               SetGadgetText(Intensite::#ChaineResultat_I, "L'intensité est de " + StrF(P / U, 2)+" Ampères")
            EndIf
            If Resultat = 22
               P.f = ValF(GetGadgetText(Intensite::#ChaineQuestion_I1))
               R.f = ValF(GetGadgetText(Intensite::#ChaineQuestion_I2))
               SetGadgetText(Intensite::#ChaineResultat_I, "L'intensité est de " + StrF(Sqr(P / R), 2)+" Ampères")
            EndIf
            If Resultat = 23
               U.f = ValF(GetGadgetText(Intensite::#ChaineQuestion_I1))
               R.f = ValF(GetGadgetText(Intensite::#ChaineQuestion_I2))
               SetGadgetText(Intensite::#ChaineResultat_I, "L'intensité est de " + StrF(U / R, 2)+" Ampères")
            EndIf
         ElseIf EventGadget = Resistance::#BoutonConvertir_R
            If Resultat = 31
               P.f = ValF(GetGadgetText(Resistance::#ChaineQuestion_R1))
               I.f = ValF(GetGadgetText(Resistance::#ChaineQuestion_R2))
               SetGadgetText(Resistance::#ChaineResultat_R, "La résistance est de " + StrF(P / (I * I), 2)+" Ohms")
            EndIf
            If Resultat = 32
               U.f = ValF(GetGadgetText(Resistance::#ChaineQuestion_R1))
               I.f = ValF(GetGadgetText(Resistance::#ChaineQuestion_R2))
               SetGadgetText(Resistance::#ChaineResultat_R, "La résistance est de " + StrF(U / I, 2)+" Ohms")
            EndIf
            If Resultat = 33
               U.f = ValF(GetGadgetText(Resistance::#ChaineQuestion_R1))
               P.f = ValF(GetGadgetText(Resistance::#ChaineQuestion_R2))
               SetGadgetText(Resistance::#ChaineResultat_R, "La résistance est de " + StrF((U * U) / P, 2)+" Ohms")
            EndIf
            
         ElseIf EventGadget = Puissance::#BoutonConvertir_P	
            If Resultat = 41
               U.f = ValF(GetGadgetText(Puissance::#ChaineQuestion_P1))
               R.f = ValF(GetGadgetText(Puissance::#ChaineQuestion_P2))
               SetGadgetText(Puissance::#ChaineResultat_P, "La puissance est de " + StrF((U * U) / R, 2)+" Watts")
            EndIf
            If Resultat = 42
               U.f = ValF(GetGadgetText(Puissance::#ChaineQuestion_P1))
               I.f = ValF(GetGadgetText(Puissance::#ChaineQuestion_P2))
               SetGadgetText(Puissance::#ChaineResultat_P, "La puissance est de " + StrF(U * I, 2)+" Watts")
            EndIf
            If Resultat = 43
               R.f = ValF(GetGadgetText(Puissance::#ChaineQuestion_P1))
               I.f = ValF(GetGadgetText(Puissance::#ChaineQuestion_P2))
               SetGadgetText(Puissance::#ChaineResultat_P, "La puissance est de " + StrF(R * (I * I), 2)+" Watts")
            EndIf
            
         ElseIf EventGadget = #BoutonQuitter
            End
         EndIf
         ; ////////////////////////
      Case #PB_Event_CloseWindow
         EventWindow = EventWindow()
         If EventWindow = #Fenetre_Principale
            CloseWindow(#Fenetre_Principale)
            Break
         ElseIf EventWindow = Tension::#Fenetre_T
            CloseWindow(Tension::#Fenetre_T)
            Break
         ElseIf EventWindow = Intensite::#Fenetre_I
            CloseWindow(Intensite::#Fenetre_I)
            Break
         ElseIf EventWindow = Resistance::#Fenetre_R
            CloseWindow(Resistance::#Fenetre_R)
            Break
         ElseIf EventWindow = Puissance::#Fenetre_P
            CloseWindow(Puissance::#Fenetre_P)
            Break
         EndIf
   EndSelect
ForEver
;
;}