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 ?
Il veut dire... que dans sa boucle d'événements
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"

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

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