Page 1 sur 1

[Résolu] Pas de closeGadget() ??

Publié : jeu. 20/sept./2018 1:14
par cowpowah
Hello,

Je viens de réaliser qu'il n'y a pas de fonction pour fermer un gadget?!? 8O On peut en créer dans le code mais pas les supprimer?

Comment on fait quand on a besoin d'afficher à la volée un nombre variable de gadgets?

Re: Pas de closeGadget() ??

Publié : jeu. 20/sept./2018 5:51
par Marc56
cowpowah a écrit : Je viens de réaliser qu'il n'y a pas de fonction pour fermer un gadget?!? 8O On peut en créer dans le code mais pas les supprimer?
FreeGadget()

Re: Pas de closeGadget() ??

Publié : jeu. 20/sept./2018 10:14
par cowpowah
Pff... J'ai plus les yeux en face des trous... Le pire c'est que j'ai cherché pendant une bonne 1/2 heure! :roll:

Merci Marc! :wink:

Ça fonctionne comme ça?

Code : Tout sélectionner

nomGadget = TextGadget(#PB_any, X, Y, Largeur, Hauteur, Texte$)

FreeGadget(nomGadget)

Re: Pas de closeGadget() ??

Publié : jeu. 20/sept./2018 10:20
par Marc56
Oui,
et pour éviter les IMA (si le gadget n'existe plus), on peut le tester avant:

Code : Tout sélectionner

If IsGadget(nomGadget) : FreeGadget(nomGadget) : EndIf
:wink:

Re: [Résolu] Pas de closeGadget() ??

Publié : jeu. 20/sept./2018 19:08
par cowpowah
Ok, bon à savoir, merci du tuyau ;)

Au passage, peut-être que tu sais comment faire un nom de variable itératif? :mrgreen:

Code : Tout sélectionner

for i=0 to 3
  (variable+i).s = blahblah
next

Re: [Résolu] Pas de closeGadget() ??

Publié : jeu. 20/sept./2018 22:44
par G-Rom
cowpowah a écrit :Ok, bon à savoir, merci du tuyau ;)

Au passage, peut-être que tu sais comment faire un nom de variable itératif? :mrgreen:

Code : Tout sélectionner

for i=0 to 3
  (variable+i).s = blahblah
next
avec des macro

Code : Tout sélectionner

Macro variable(num):mavariable_#num:EndMacro

For i = 0 To 100
  variable(i) = i
Next 

Debug mavariable_0
Debug mavariable_i
mais comme tu le vois, ca ne marche pas en runtime, reste les tableaux...

Re: [Résolu] Pas de closeGadget() ??

Publié : jeu. 20/sept./2018 23:54
par cowpowah
Merci G-Rom!

En regardant comment fonctionne ta macro, je me suis rendu compte que ça fonctionne aussi tout simplement comme ça:

Code : Tout sélectionner

For i = 0 To 10
  variable_i.s = "test " + i
  ;Debug variable_i.s
Next
Je suppose que c'est le caractère _ (touche '8') à la fin d'une variable qui permet... bah de lui coller une autre variable au c*l! C'est quand même sacrement bien foutu le PureBasic! Le fichier d'aide mériterait d'être un peu étoffé par contre... :mrgreen:

le caractère de concaténation (#), il marche que pour les macros ou on peut l'utiliser ailleurs?

(concernant le runtime... je met ça de coté pour plus tard... :mrgreen: )

Re: [Résolu] Pas de closeGadget() ??

Publié : ven. 21/sept./2018 0:12
par falsam
Tu penses que variable_i.s dans une boucle de 0 à 10 deviendra variable_0.s, variable_1.s, variable_2.s, etc ..... ?

Essayes ce code

Code : Tout sélectionner

For i = 0 To 10
  variable_i.s = "test " + i
  Debug variable_i.s
Next

Debug "Valeur de " + variable_10.s
Possible aussi que j'ai mal compris ce que tu souhaites :wink:

Re: [Résolu] Pas de closeGadget() ??

Publié : ven. 21/sept./2018 10:21
par Ollivier

Code : Tout sélectionner

Macro Pif()
myVar#MacroExpandedCount
EndMacro

Macro Paf()
myVar#MacroExpandedCount
EndMacro

Pif() = 3
Pif() = 12
Pif() = 13

debug Paf()
debug Paf()
debug Paf()
Ce n'est pas utile car difficilement maîtrisable. Un tableau fait mieux l'affaire pour ça (le i au lieu de le mettre derrière le tiret du 8, tu le mets entre parenthèses.

Code : Tout sélectionner

Dim myVar(5)
For i = 0 to 5
 myVar(i) = 10 * i
Next
Debug myVar(3)

Re: [Résolu] Pas de closeGadget() ??

Publié : ven. 21/sept./2018 11:53
par cowpowah
@Falsam: C'est tout à fait ça, tu as bien compris, et effectivement ça marche pas... :?

Et la macro non plus, du coup! :(

@Ollivier: Avec un tableau, oui, ça devrait aller.

Je vous fait un petit topo: c'est pour afficher un nombre variable de lignes d'une base de donnée dans des textGadget, avec des buttonGadget à chaque ligne pour pouvoir la modifier/supprimer/etc...
Le tout dans une Procedure dans un fichier inclu.
Si je déclare pas les gadgets, ça marche pas, et je peux pas les déclarer parce que je connais pas leur nombre à l'avance...
Ça fonctionne avec var = buttonGadget(#PB_Any, ...) mais il faudrait que je puisse ajouter le N° de ligne à la fin de la variable pour le bindGadgetEvent...

Je test les tableaux ce soir...

Re: [Résolu] Pas de closeGadget() ??

Publié : ven. 21/sept./2018 12:17
par G-Rom
cowpowah a écrit :....et effectivement ça marche pas...

Et la macro non plus, du coup! ...
G-Rom a écrit :mais comme tu le vois, ca ne marche pas
G-Rom a écrit :reste les tableaux...
Ollivier a écrit :Un tableau fait mieux l'affaire pour ça

Re: [Résolu] Pas de closeGadget() ??

Publié : ven. 21/sept./2018 18:29
par cowpowah
C'est vrai ;) alors tableau ce sera.

(pour ma défense, c'est ton exemple qui m'a enduit d'erreur!!) :twisted:

En tous cas merci à tous pour le coup de main :D

Re: [Résolu] Pas de closeGadget() ??

Publié : ven. 21/sept./2018 23:15
par Ollivier
Les concaténations, ça se limite à ce type de bug :

Code : Tout sélectionner

Macro M0(Alpha)
Alpha
EndMacro

Macro M1(Alpha)
M0(Alpha)
M0(Alpha)
EndMacro

Macro Mn(Alpha, N)
M#N(Alpha)
M#N(Alpha)
EndMacro

M1(Debug "YES")
;Mn(Debug "YES", 1)
Si on décommente Mn(...), ça n'identifie pas Mn en tant que macro bien que la macro Mn soit créée. Le genre de bug qui n'existe pas en traitant des tableaux.