Page 1 sur 1

Doublon de Constantes !!!

Publié : sam. 05/sept./2009 18:44
par cirederff
Bonsoir

Une chose m'échappe, j'utilise Until Event1=#PB_Event_CloseWindow pour fermer ma fenêtre principale

et quant je fais un debug de " #PB_Event_CloseWindow " ça me donne 16 et j'ai une boucle for next qui utilise la même valeur

Code : Tout sélectionner

	For ligne =0 To 17
   		For colonne = 0 To 17 
  			StringGadget(colonne+ligne*18, colonne*49+100, ligne*25+60,49,25,"",#PB_String_Numeric)
  			SetGadgetColor(colonne+ligne*18 , #PB_Gadget_BackColor,  RGB($FF,$FF,$CC)) 
  		Next
	Next
Quand je clique sur la case qui à la valeur 16 ça me ferme la fenêtre :(
Ca doit me boucher la vue :? mais que dalle...

Publié : sam. 05/sept./2009 19:38
par Anonyme
j'ai rien compris... :?
et quant je fais un debug de " #PB_Event_CloseWindow " ça me donne 16 et j'ai une boucle for next qui utilise la même valeur
j'vois pas le rapport entre une boucle f/n et une constante :/
Quand je clique sur la case qui à la valeur 16 ça me ferme la fenêtre Sad
c'est quoi une case ? un bouton ?

Publié : sam. 05/sept./2009 20:17
par Jacobus
Cpl.Bator a écrit :j'ai rien compris... :? c'est quoi une case ? un bouton ?
:lol:
Il veut dire... que dans sa boucle d'événements

Code : Tout sélectionner

Select 
  Case 16
  Case 17
  etc...
 EndSelect
Il vaut mieux créer des énumérations de constantes et en dynamique utiliser #PB_any

Publié : sam. 05/sept./2009 20:25
par Anonyme
l'id du gadget n'a rien à voir avec les événement sur la fenetre...
et puis , je dois être nul , j'arrive pas à cliqué sur une "case" :D

Publié : dim. 06/sept./2009 0:08
par Jacobus
Dans ce petit exemple avec tes boucles imbriquées, pas de bean's.
J'ai peut-être pas tout saisi non plus, mais où est le problème?

Code : Tout sélectionner

Enumeration
#Btn_Close 
#Text
EndEnumeration

If OpenWindow(0,0,0, 1000, 550, "Tableau de strings",#PB_Window_SystemMenu  | #PB_Window_ScreenCentered |#PB_Window_TitleBar)=0  
   End 
EndIf 

ButtonGadget(#Btn_Close,5,5,50,20,"Fermer")
		For ligne =0 To 17
			For colonne = 0 To 17 
				string = StringGadget(#PB_Any, colonne*49+100, ligne*25+60,49,25,"",#PB_String_Numeric)
				SetGadgetColor(string , #PB_Gadget_BackColor,  RGB($FF,$FF,$CC)) 
			Next
		Next
TextGadget(#Text,10,530,300,15,"")		
		
Repeat
  Event = WaitWindowEvent() 
   If Event = #PB_Event_Gadget
     Select EventGadget() 
       		  
		  Case #Btn_Close : Event = #PB_Event_CloseWindow
		  
      Case GetActiveGadget()
       SetGadgetText(#Text, "Gadget actif numéro = "+Str(GetActiveGadget()))
		       		   
     EndSelect  
   EndIf 
Until Event = #PB_Event_CloseWindow

Publié : dim. 06/sept./2009 10:57
par cirederff
Mon problème est que je n'utilisais pas #PB_Any,
il va falloir que j' utilise Les objets dynamiques et ça c'est nouveau pour moi

Publié : dim. 06/sept./2009 11:31
par cirederff
Mon code, encore beaucoup de base à acquérir.... :roll:

Mais comment fait on pour envoyer une valeur à un emplacement bien spécifique,
avec GetActiveGadget() je connais l'emplacement grâce au focus du clavier, mais sans :!:
Si par exemple je désire envoyer un nombre à la case 7 de la première ligne ?

Code : Tout sélectionner

Enumeration           ; constante

#fenetre = 600
#bouton_reglage_fenetre_mere
#bouton_quitter_fenetrte_reglage
#fenetre_reglage

EndEnumeration

Procedure fenetre_reglage();*********************************************FENETRE DE REGLAGE**************************************************************************

OpenWindow(#fenetre_reglage ,0,0,1200 ,800 ,"REGLAGE" ,#PB_Window_ScreenCentered)
StickyWindow(#fenetre_reglage,1) ;Affiche la #Fenetre toujours au premier plan
ButtonGadget(#bouton_quitter_fenetrte_reglage, 920, 600, 170, 40, " QUITTER" )
	

		
	
Repeat
Event2= WaitWindowEvent(20) ;on met à jour les évenements pour la gestion des gadgets

  		If Event2 = #PB_Event_Gadget 
 			Select EventGadget()
 		

 			Case #bouton_quitter_fenetrte_reglage
 			CloseWindow(#fenetre_reglage)
			
 			Break
		EndSelect
 	EndIf
ForEver
EndProcedure






OpenWindow(#fenetre,0,0,1200,800,"INJECTION",#PB_Window_ScreenCentered)
 
 	ButtonGadget(#bouton_reglage_fenetre_mere, 1010, 50, 150, 60, "paramétrage general",#PB_Button_MultiLine )

	For ligne =0 To 17
   		For colonne = 0 To 17 
  			StringGadget(colonne+ligne*18, colonne*49+100, ligne*25+60,49,25,"",#PB_String_Numeric)
  			SetGadgetColor(colonne+ligne*18 , #PB_Gadget_BackColor,  RGB($FF,$FF,$CC)) 
  		Next
	Next 



	 	 	
;....................................................................................BOUCLE PRINCIPALE.....................................................................................................................................	
 Repeat
		Event1 = WaitWindowEvent() ;on met à jour les évenements pour la gestion des gadgets

 	If Event1 = #PB_Event_Gadget 
 	
			Select EventGadget()
			
			

			
			Case #bouton_reglage_fenetre_mere
			fenetre_reglage()
			

			
			Case #PB_Event_CloseWindow
			CloseWindow(#fenetre) 
 			
 			Break
			EndSelect
	EndIf
	

        		
        		
	Until Event1=#PB_Event_CloseWindow
  End  	 
   

Publié : dim. 06/sept./2009 12:11
par Ar-S

Code : Tout sélectionner

SetGadgetText(6,"Cequetuveux") ;6 car tu commences à 0 donc 6 = case 7

Publié : dim. 06/sept./2009 12:19
par cirederff
mais dans le cas ou j'utilise #PB_Any comme dans l'exemple de Jacobus ?

Publié : dim. 06/sept./2009 12:24
par Jacobus
Pour ça il faut utiliser les listes chaînées ou LinkedList()

Pas trop de temps, alors vite fait...
Place ton curseur sur le premier string (le 2, manque le 1 et pas le temps de corriger) puis avance avec la touche Tab. Tu verras que le numéro du gadget 7 est détecté et donc activé et le string complété.

Code : Tout sélectionner

Enumeration 
#Btn_Close 
#Text 
EndEnumeration 

Structure GadgetNum 
    SGadget.i
    string.i
EndStructure
Global NewList StringList.GadgetNum()

If OpenWindow(0,0,0, 1000, 550, "Tableau de strings",#PB_Window_SystemMenu  | #PB_Window_ScreenCentered |#PB_Window_TitleBar)=0  
   End 
EndIf 

ButtonGadget(#Btn_Close,5,5,50,20,"Fermer")

Gadget_Str = 0 
      For ligne =0 To 17          
         
         For colonne = 0 To 17 
           AddElement(StringList()) 
           Gadget_Str+1
           string+1       
            StringList()\SGadget = Gadget_Str 
            StringList()\string = StringGadget(StringList()\SGadget, colonne*49+100, ligne*25+60,49,25,"",#PB_String_Numeric)                        
           SetGadgetColor(StringList()\SGadget , #PB_Gadget_BackColor,  RGB($FF,$FF,$CC))            
         Next 
                  
      Next 
TextGadget(#Text,10,530,300,15,"")       
       
Repeat 
  Event = WaitWindowEvent() 
   If Event = #PB_Event_Gadget 
     Select EventGadget() 
               
      Case #Btn_Close : Event = #PB_Event_CloseWindow 
        
      Case GetActiveGadget() 
       SetGadgetText(#Text, "Gadget actif numéro = "+Str(GetActiveGadget())) 
       If GetActiveGadget() = 7
        SetGadgetText(7,"22")
       EndIf 
       
                       
     EndSelect  
   EndIf 
Until Event = #PB_Event_CloseWindow
je suis à la bourre, @+

Publié : dim. 06/sept./2009 12:26
par Anonyme
ici , c'est pas bon :

Code : Tout sélectionner

 For ligne =0 To 17 
      For colonne = 0 To 17  
       StringGadget(colonne+ligne*18, colonne*49+100, ligne*25+60,49,25,"",#PB_String_Numeric) 
       SetGadgetColor(colonne+ligne*18 , #PB_Gadget_BackColor,  RGB($FF,$FF,$CC))  
     Next 
  Next  
si ligne = 5 et colonne = 2 , et en reprenant ton opération (colonne+ligne*18)
2+5*18 = 126
si ligne = 2 et colonne = 5 ( l'inverse )
5+2*18 = 126

doublon...

donc :

Code : Tout sélectionner

dim Tableau2D(TailleX,TailleY)
Tableau2D(colonne,ligne) =  StringGadget(#pb_any,etc...)

Publié : dim. 06/sept./2009 17:29
par Jacobus
Je reprend mon exemple avec Structure et List corrigé.
Maintenant on connaît la valeur de chaque gadget et on peut en faire ce que l'on veut (ajouter; soustraire; multiplier; des valeurs numériques) et avoir un tableau de valeurs comme il semble que c'est ce que tu voulais.
Sinon vois avec la méthode de Cpl.Bator.

Code : Tout sélectionner

Enumeration 
#Btn_Close  = 400
#Text       = 401
EndEnumeration 

Structure GadgetNum 
    SGadget.i
    string.i
EndStructure
Global NewList StringList.GadgetNum()

If OpenWindow(0,0,0, 1000, 550, "Tableau de strings",#PB_Window_SystemMenu  | #PB_Window_ScreenCentered |#PB_Window_TitleBar)=0  
   End 
EndIf 

;On crée le tableau     
      For ligne =0 To 17                   
         For colonne = 0 To 17 
           AddElement(StringList()) 
            Gadget_Str + 1
            string + 1    
            StringList()\SGadget = Gadget_Str 
            StringList()\string = StringGadget(StringList()\SGadget, colonne*49+100, ligne*25+60,49,25,"",#PB_String_Numeric)                        
           SetGadgetColor(StringList()\SGadget , #PB_Gadget_BackColor,  RGB($FF,$FF,$CC))                       
         Next                  
      Next 
;On ajoute les gadgets de l'Enumeration (On peut en ajouter plusieurs à la suite s'ils sont énumérés après.
ButtonGadget(#Btn_Close,5,5,50,20,"Fermer") 
 Debug Str(#Btn_Close) ; gadget doit être n° 400     
TextGadget(#Text,10,530,300,15,"")   
 Debug Str(#Text); gadget  doit être n° 401

;Le tableau de strings commence à 1 car les gadgets de l'Enumeration sont placés loin à 400 et 401 
;Ainsi on sait que les gadgets strings du tableau vont de 1 à 324
;Tu peux maintenant agir sur chaque gadget comme tu veux car tu connais leur numéro et la simplicité vient 
;du fait que la première 'case' porte le n° 1, etc... 

;Test au pif: On ajoute une valeur dans des gadgets
SetGadgetText(1,"1")
SetGadgetText(16,"16") 
SetGadgetText(324,"324")   
       
Repeat 
  Event = WaitWindowEvent() 
   If Event = #PB_Event_Gadget 
     Select EventGadget() 
               
      Case #Btn_Close : Event = #PB_Event_CloseWindow 
        
      Case GetActiveGadget() 
       SetGadgetText(#Text, "Gadget actif numéro = "+Str(GetActiveGadget())) 
       If GetActiveGadget() = 7
        SetGadgetText(7,"7")
       ElseIf GetActiveGadget() = 22
        SetGadgetText(22,"22")
       ElseIf GetActiveGadget() = 300
        SetGadgetText(300,"1000") 
       EndIf  
       
       Case 23 : SetGadgetText(23,"23")           
                      
     EndSelect  
   EndIf 
Until Event = #PB_Event_CloseWindow
End 
Allez bonne bourre...

Publié : dim. 06/sept./2009 19:49
par cirederff
Cpl.Bator a écrit :ici , c'est pas bon :
si ligne = 5 et colonne = 2 , et en reprenant ton opération (colonne+ligne*18)
2+5*18 = 126
si ligne = 2 et colonne = 5 ( l'inverse )
5+2*18 = 126
doublon...
[/code]
Très juste,:oops:
il faudrait dans ce cas ci que j'incrémente une variable


Merci, je vais étudier ça cette semaine, j'ai encore du bouleau avec Structure et List.
Je vous ferais part de l'évolution de la chose :wink:

Publié : dim. 06/sept./2009 20:01
par Anonyme
une formule ou il n'y a pas de doublon :
Colonne + NbColonne * ligne

5 + 17 * 2 = 44
2 + 17 * 5 = 95


@+

Publié : lun. 07/sept./2009 12:23
par cirederff
Je pense que je tiens le bon bout !:D

Code : Tout sélectionner


Enumeration           ; constante

#fenetre 
#bouton_reglage_fenetre_mere
#bouton_quitter_fenetrte_reglage
#fenetre_reglage

EndEnumeration

Procedure fenetre_reglage();********************FENETRE DE REGLAGE**************************************************************************

OpenWindow(#fenetre_reglage ,0,0,1200 ,800 ,"REGLAGE" ,#PB_Window_ScreenCentered)
StickyWindow(#fenetre_reglage,1) ;Affiche la #Fenetre toujours au premier plan
ButtonGadget(#bouton_quitter_fenetrte_reglage, 920, 600, 170, 40, " QUITTER" )
	

		
	
Repeat
Event2= WaitWindowEvent(20) ;on met à jour les évenements pour la gestion des gadgets

  		If Event2 = #PB_Event_Gadget 
 			Select EventGadget()
 		

 			Case #bouton_quitter_fenetrte_reglage
 			CloseWindow(#fenetre_reglage)
			
 			Break
		EndSelect
 	EndIf
ForEver
EndProcedure



Dim Map.L (324)


OpenWindow(#fenetre,0,0,1200,800,"map",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
 
 	ButtonGadget(#bouton_reglage_fenetre_mere, 1010, 50, 150, 60, "paramétrage general",#PB_Button_MultiLine )



increment = 0
	For ligne =0 To 17
   		For colonne = 0 To 17 
  			string =StringGadget(#PB_Any, colonne*49+100, ligne*25+60,49,25,"",#PB_String_Numeric)
  			SetGadgetColor(string , #PB_Gadget_BackColor,  RGB($FF,$FF,$CC)) 
  			Map (increment ) =string
  			increment = increment+1
  			Debug 	increment
  		Next
	Next 
	 	 	
;............................................BOUCLE PRINCIPALE........................................................	
 Repeat
		Event1 = WaitWindowEvent() ;on met à jour les évenements pour la gestion des gadgets

 	If Event1 = #PB_Event_Gadget 
 	
			Select EventGadget()
			
			

			
			Case #bouton_reglage_fenetre_mere
			fenetre_reglage()
			

			
			Case #PB_Event_CloseWindow
			CloseWindow(#fenetre) 
 			
 			Break
			EndSelect
	EndIf
	

        		
        		
	Until Event1=#PB_Event_CloseWindow
  End