Doublon de Constantes !!!

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
cirederff
Messages : 54
Inscription : ven. 15/mai/2009 19:57

Doublon de Constantes !!!

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

Message 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 ?
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message 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
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Anonyme

Message 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
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message 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
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
cirederff
Messages : 54
Inscription : ven. 15/mai/2009 19:57

Message 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
cirederff
Messages : 54
Inscription : ven. 15/mai/2009 19:57

Message 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  	 
   
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Code : Tout sélectionner

SetGadgetText(6,"Cequetuveux") ;6 car tu commences à 0 donc 6 = case 7
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
cirederff
Messages : 54
Inscription : ven. 15/mai/2009 19:57

Message par cirederff »

mais dans le cas ou j'utilise #PB_Any comme dans l'exemple de Jacobus ?
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message 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, @+
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Anonyme

Message 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...)
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message 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...
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
cirederff
Messages : 54
Inscription : ven. 15/mai/2009 19:57

Message 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:
Anonyme

Message par Anonyme »

une formule ou il n'y a pas de doublon :
Colonne + NbColonne * ligne

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


@+
cirederff
Messages : 54
Inscription : ven. 15/mai/2009 19:57

Message 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  	 
    
    	 
   
Répondre