Associer dans une procédure fenêtre et événements
Associer dans une procédure fenêtre et événements
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
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
perso je deconseille l'emploi de multiple fichier d'include... mais chacun fait comme il veut .... et pleure 
dans l'absolu, je pense qu'il ne te faut Qu'une seule boucle des events !
voici le principe de base :

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
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 !
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
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 ...
car lorsque tu ecris :
en general on isole éventuellement la boucle principale (qui gere donc les Events ) generalement Repeat --- until ***
mais on ne scinde pas cette boucle
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 ...

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

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
Bonjour
jai pas bien compris , pourquoi il ya écris Repeat-forever ? moi j'ai appris avec la doc que c'est Repeat-Until Normalement
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
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
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
merci beaucoup pour tes explications
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Associer dans une procédure fenêtre et événements
Exactement Dobro. Que penses tu de la structure suivante pour des programmes un peu conséquents.Dobro a écrit :en programmation , il n'y a pas vraiment de règles établies
l'essentiel c'est que ça marche
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
Code : Tout sélectionner
Declare OpenMainForm1()
Declare OpenMainForm2()
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
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
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Associer dans une procédure fenêtre et événements
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 .
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
@Michalon : oui : c'est ce qu'il fait 

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 ...

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

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
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
;
;}
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 !
Un homme doit être poli, mais il doit aussi être libre !