Page 1 sur 1

[RESOLU] Gestion de StringGadget dans 2eme fenêtre

Publié : sam. 04/sept./2010 13:13
par Malo
Bonjour

Je pensais que l'on pouvait gérer tous les evenements dans une boucle principale,
même ceux d'une fenêtre secondaire.
Hors quand j'ouvre ma 2eme fenêtre (menu liste) et que je fasse une saisie dans le StringGadget , et que je veuille fermer celle-çi
avec un EventWindows() (la croix rouge )ça plante à ; nomfiltr$=GetGadgetText(#ChxTrieEmpl),toujours reconnu actif dans
la boucle principale comme .......

Si je ferme avec un ButtonGadget() , ça fonctionne, pourtant c'est la même commande dans les
2 cas : CloseWindow(#Fenetre_1).

Ce qui est curieux , si je n'utilise que ListIconGadget() pourtant avec des retours d'informations
comme ;
selctResul = GetGadgetState(#LaListe)
leFichier$ = GetGadgetItemText(#LaListe, selctResul ,4)

il n'y a pas de problème, StringGadget aurait un fonctionnement particulier?


J'ai donc fait un 2eme code ou je gère la fermeture avec EventWindows() directement dans
la fenêtre secondaire, et là cela fonctionne et sans ajouter un ButtonGadget()

Es-que c'est la bonne solution ou es-que dans le premier code j'ai fait une erreur.

Merci par avance pour vos réponses et solutions.

Premier code

Code : Tout sélectionner

Enumeration
	#Fenetre_0
	#Fenetre_1
EndEnumeration

Enumeration
	#LeMenu
	#Quitter
EndEnumeration

Enumeration
	#Nom
	#LeNom
	#LaListe
  	#TriEmplacement
  	#ChxTrieEmpl
  	#BtQuit
EndEnumeration




Procedure FenetreListe()

	
	UseGadgetList(WindowID(#Fenetre_0))
	
If OpenWindow(#Fenetre_1, 200, 200, 1100, 800, "Liste ",  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
	StickyWindow(#Fenetre_1,1)
	TextGadget(#TriEmplacement,220,35,150,20,"Recherche ")
  	StringGadget(#ChxTrieEmpl,220,50,150,20,"")
	ListIconGadget(#LaListe, 10, 100, 1000, 700," ",100,#PB_ListIcon_FullRowSelect )
	ButtonGadget(#BtQuit,220,10,150,20,"Quitter")
	
  	For i=1 To 4
  		AddGadgetColumn(#LaListe, i,"Champs"+Str(i), 100)
  	Next
  
EndIf


EndProcedure

Procedure CreerMenus()

		
		If CreateMenu(#LeMenu,WindowID(#Fenetre_0))
			MenuTitle("Fichier")
			MenuItem(#Quitter,"&Quitter")
			
			MenuTitle("Liste")
			MenuItem(#LaListe,"&Liste")
			
			
		EndIf
		

EndProcedure
		
Procedure Fenetre_Principale()
If OpenWindow(#Fenetre_0,0,0,1000,700,"Fenetre" ,#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    TextGadget(#Nom,50,50,150,20,"Nom ")
  	StringGadget(#LeNom,80,50,150,20,"")	
  	CreerMenus() 
EndIf
     
EndProcedure


Fenetre_Principale()

Repeat
	evenement = WaitWindowEvent()
;-Fenetre	      
      If evenement = #PB_Event_CloseWindow
      	;Debug "event :"+Str(EventWindow() )
      	
            Select EventWindow() 
                  Case #Fenetre_0 : quitx = 1
                        
                   Case #Fenetre_1 
                  	;SetActiveGadget(#LeNom)

					CloseWindow(#Fenetre_1)

            EndSelect    
      EndIf
      
;-Menu
      If evenement = #PB_Event_Menu
            Select EventMenu()
                    Case #LaListe
                        FenetreListe()
                    Case #Quitter
                    	 quitx = 1  
            EndSelect
        EndIf
        
        
        
        
        Debug EventGadget()
;-Gadget
      If evenement =  #PB_Event_Gadget
 		Select EventGadget()
			Case #LaListe
				Select EventType()
					Case #PB_EventType_LeftDoubleClick  
						selctResul = GetGadgetState(#LaListe)
						
						leFichier$ = GetGadgetItemText(#LaListe, selctResul ,4)
						
				EndSelect
				
			Case #BtQuit
				CloseWindow(#Fenetre_1)
				
; ************* BLOC StringGadget()	********************************	
			Case #ChxTrieEmpl
				
 				nomfiltr$=GetGadgetText(#ChxTrieEmpl)
 				
; ************* BLOC StringGadget()	********************************	 				
 		EndSelect
 	EndIf  
	
 	
 				
	
Until quitx = 1

Second code

Code : Tout sélectionner

Enumeration
	#Fenetre_0
	#Fenetre_1
EndEnumeration

Enumeration
	#LeMenu
	#Quitter
EndEnumeration

Enumeration
	#Nom
	#LeNom
	#LaListe
  	#TriEmplacement
	#ChxTrieEmpl
EndEnumeration



Procedure FenetreListe()

	
	UseGadgetList(WindowID(#Fenetre_0))
	
If OpenWindow(#Fenetre_1, 200, 200, 1100, 800, "Liste ",  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
	StickyWindow(#Fenetre_1,1)
	TextGadget(#TriEmplacement,220,35,150,20,"Recherche ")
  	StringGadget(#ChxTrieEmpl,220,50,150,20,"")
	ListIconGadget(#LaListe, 10, 100, 1000, 700,"Num ",100,#PB_ListIcon_FullRowSelect )
  	
  	For i=1 To 4
  		AddGadgetColumn(#LaListe, i,"Champs"+Str(i), 100)
  	Next
  	
  	
  	;==============================================================================================================================
;  
EndIf
Repeat
	evenement2 = WaitWindowEvent()
	If evenement2 = #PB_Event_CloseWindow
      ;Debug "event :"+Str(EventWindow() )
      	
            Select EventWindow() 
                  Case #Fenetre_1 
                  	
                  	 CloseWindow(#Fenetre_1)
            EndSelect    
        EndIf
        
    ; Debug EventGadget()   
	If evenement2 =  #PB_Event_Gadget
 		Select EventGadget()

			
			Case #ChxTrieEmpl
				
 				nomfiltr$=GetGadgetText(#ChxTrieEmpl)
 				
;  				 				
 		EndSelect
 	EndIf
 
Until  evenement2 = #PB_Event_CloseWindow


EndProcedure

Procedure CreerMenus()

		
		If CreateMenu(#LeMenu,WindowID(#Fenetre_0))
			MenuTitle("Fichier")
			MenuItem(#Quitter,"&Quitter")
			
			MenuTitle("Liste")
			MenuItem(#LaListe,"&Liste")
			
			
		EndIf
		
		
	

EndProcedure
		
Procedure Fenetre_Principale()
If OpenWindow(#Fenetre_0,0,0,1000,700,"Fenetre" ,#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    TextGadget(#Nom,50,50,150,20,"Nom ")
  	StringGadget(#LeNom,80,50,150,20,"")	
  	CreerMenus() 
EndIf  
EndProcedure


Fenetre_Principale()

Repeat
	evenement = WaitWindowEvent()
;-Fenetre
      If evenement = #PB_Event_CloseWindow
      	
      	
            Select EventWindow() 
                        
                  Case #Fenetre_0 : quitx = 1
                        
;                 
                        
            EndSelect    
      EndIf
      

    
;-Menu
      If evenement = #PB_Event_Menu
            Select EventMenu()
                    Case #LaListe
                        FenetreListe()
                    Case #Quitter
                    	 quitx = 1 
            EndSelect
        EndIf
        
        
        
;-Gadget        
      Debug EventGadget()
      If evenement =  #PB_Event_Gadget
 		Select EventGadget()
			Case #LaListe
				Select EventType()
					Case #PB_EventType_LeftDoubleClick  
						selctResul = GetGadgetState(#LaListe)
						
						leFichier$ = GetGadgetItemText(#LaListe, selctResul ,4)
						
						
				EndSelect

 		EndSelect
 	EndIf  
	
 	
 				
	
Until quitx = 1

Re: Gestion de StringGadget dans 2eme fenêtre

Publié : sam. 04/sept./2010 14:09
par MLD
Bonjour
le code n°1 n'est pas bon car tu ferme la fenêtre, et ta boucle lit en permanence le contenu du string. qui n'existe plus
si tu fait comme ceci ça marche

Code : Tout sélectionner

Case #ChxTrieEmpl
           Select EventType() 
            Case  #PB_EventType_Change    
             nomfiltr$ = GetGadgetText(#ChxTrieEmpl)
           EndSelect 
Mais ton code est un peu fouillis :oops:
Le 2em code est mieux.
Dans le mesure du possible code toujours étape par étape. Fenêtre 1, Gadgets de la F1, Fenêtre 2, Gadgets de la F2 ect
autrement dit, tu mets le fil rouge sur le fil rouge , et le fil bleu sur le fil bleu :lol:
Michel

Re: Gestion de StringGadget dans 2eme fenêtre

Publié : sam. 04/sept./2010 16:47
par Malo
Merci MLD pour ta réponse et ton code qui répond à mon problème.

Par contre je ne comprends pourquoi cela fonctionne avec le code dans le ButtonGadget(),
qui lui aussi ferme la fenêtre secondaire, avec la même fonction que EventWindow(),
et pourquoi avec ListIconGadget(#LaListe), ça ne bloque pas.
Il est vrai que la ce n'est pas facile à voir ici puisqu'il n'y a pas de données dans la liste.

PS : Je prends note de ta remarque