Page 1 sur 1
Générer des #Gadget selon un fichier .ini (ou variable)
Publié : mer. 15/juin/2011 15:06
par Shinao
Bonjour,
Voila, je voudrais qu'une liste d'image se crée en fonction du nombre de ligne que j'ai dans un fichier .ini (pour faire simple).
Le problème que j'ai, c'est comment faire une boucle pour générer l’énumération ?
De même pour les evenements de ces ImagesGadget() ?
Par exemple je ne peux pas faire :
Ni
En bref, faire que le nom de mon gadget change en fonction d'une variable, seulement PureBasic n'aime pas.
Est-ce possible ou comment faire le même rendu mais avec une autre solution ?
Merci d'avance
Re: Générer des #Gadget selon un fichier .ini (ou variable)
Publié : mer. 15/juin/2011 16:22
par Ouaf-Ouaf
Shinao a écrit :Bonjour,
Voila, je voudrais qu'une liste d'image se crée en fonction du nombre de ligne que j'ai dans un fichier .ini (pour faire simple).
[...] Par exemple [...]
Est-ce possible ou comment faire le même rendu mais avec une autre solution ?
Merci d'avance
Bonjour,
Si la première méthode me parait clairement inappropriée, la seconde ( celle citée ici ), me semble tout à fait valable.. Tant que la valeur de i est bien numérique et non textuelle ( comme ça semble être le cas pour la méthode 1 )
Si par "le nom du gadget" vous entendez obtenir par exemple comme résultat :
Code : Tout sélectionner
ImageGadget(#MonImage_Nomimage01, ....)
ImageGadget(#MonImage_Nomimage02, ....)
ImageGadget(#MonImage_Nomimage03, ....)
C'est que vous faites une méprise sur la nature des constantes !
Dans l'optique de fonctionner avec un index textuel (et dans le cas ou ce serait nécessaire), il faudrait utiliser un tableau de type "Map".
Mais il est également envisageable de créer une liste dynamique, avec ou sans structure, selon le nombre d'informations utiles.
Pouvez vous fournir une portion de code un peu plus complète ?
Re: Générer des #Gadget selon un fichier .ini (ou variable)
Publié : mer. 15/juin/2011 16:46
par Ar-S
Je ne sais pas si c'est ce que tu cherches mais c'est l'impression que ça donne.
Imaginons qu'il y ai 5 lignes donc que ton interface doit créer 5 imagegadget.
Code : Tout sélectionner
UsePNGImageDecoder()
Enumeration
#Window_0
EndEnumeration
Enumeration
#Image_Image_0
#IMG_GADGET
EndEnumeration
If CreateImage(#Image_Image_0, 16, 16)
StartDrawing(ImageOutput(#Image_Image_0))
Box(0,0,16,16,$00CCFF)
StopDrawing() ; This is absolutely needed when the drawing operations are finished !!! Never forget it !
EndIf
Global NbrLigne
NbrLigne = 5 ; => Ton Nombre de ligne
Position = 5
If OpenWindow(#Window_0, 560, 227, 443, 158, "Win", #PB_Window_SystemMenu|#PB_Window_TitleBar)
For i=1 To NbrLigne
ImageGadget(#IMG_GADGET+i, Position, 20, 16, 16, ImageID(#Image_Image_0))
Position+25
Debug "Image "+Str(i)+" : Gadget numéro "+Str(#IMG_GADGET+i)
Next i
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Window_0
CloseWindow(#Window_0)
Break
EndSelect
EndSelect
ForEver
Re: Générer des #Gadget selon un fichier .ini (ou variable)
Publié : mer. 15/juin/2011 18:49
par Kwai chang caine
Moi pour ce genre de travail, je fait un tableau de "PbId" (Identificateur PB), un peu comme dans VB avec ses groupes de contrôles

Comme ça tu as tout loisir d'appeler chacun des gadget en creant un tableau pour les images "ImageId()" , un pour les boutons "BoutonId()", etc...
Ou alors creer un tableau a deux dimensions, dans lequel tu fourres tous les ID
Code : Tout sélectionner
Enumeration
#GadgetBoutons
#GadgetImages
#GadgetText
etc ...
End Enumeration
TabloId(x, #GadgetBoutons) ; Contient tous les ID des boutons
TabloId(x, #GadgetImages) ; Contient tous les ID des images
etc ...
En recuperant la jolie image de Ar-s, et avec un tableau une dimension, ça donne ça :
Code : Tout sélectionner
NbreElement = 10
Dim PbId(NbreElement)
If CreateImage(0, 16, 16)
StartDrawing(ImageOutput(0))
Box(0,0,16,16,$00CCFF)
StopDrawing() ; This is absolutely needed when the drawing operations are finished !!! Never forget it !
EndIf
If OpenWindow(0, 560, 227, 300, 300, "Cette fenetre contient " + Str(NbreElement) + " éléments", #PB_Window_SystemMenu|#PB_Window_TitleBar)
For i = 1 To NbreElement
PbId(i) = ImageGadget(#PB_Any, x + (i*20), y+(i*20), 16, 16, ImageID(0))
Debug "Le ''PbId'' de l'image n°" + Str(i) + " est " + Str(PbId(i))
Next
EndIf
Repeat
Evenement = WaitWindowEvent()
Until Evenement = #PB_Event_CloseWindow
Re: Générer des #Gadget selon un fichier .ini (ou variable)
Publié : mer. 15/juin/2011 20:48
par Shinao
Yeah! Merci pour ces réponses
Je ne savais pas que l'on pouvait mettre une variable numérique à la suite des constantes, très utile, j'essayais de le bourrer avec mes strings.
Cependant, je ne comprend pas comment ce code est possible :
Code : Tout sélectionner
UsePNGImageDecoder()
Enumeration
#Window_0
EndEnumeration
Enumeration
#Image_Image_0
#IMG_GADGET
EndEnumeration
If CreateImage(#Image_Image_0, 16, 16)
StartDrawing(ImageOutput(#Image_Image_0))
Box(0,0,16,16,$00CCFF)
StopDrawing() ; This is absolutely needed when the drawing operations are finished !!! Never forget it !
EndIf
Global NbrLigne
NbrLigne = 5 ; => Ton Nombre de ligne
Position = 5
If OpenWindow(#Window_0, 560, 227, 443, 158, "Win", #PB_Window_SystemMenu|#PB_Window_TitleBar)
For i=1 To NbrLigne
ImageGadget(#IMG_GADGET+i, Position, 20, 16, 16, ImageID(#Image_Image_0))
Position+25
Debug "Image "+Str(i)+" : Gadget numéro "+Str(#IMG_GADGET+i)
Next i
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Window_0
CloseWindow(#Window_0)
Break
EndSelect
EndSelect
ForEver
Sans au préalable avoir mis tout les #IMG_GADGET+i dans l'Enumeration.... ?!
Car seul #IMG_GADGET tout court à une valeur, alors comment est-ce possible ? Wizard ?
De plus je ne connaissais pas le PbId(), je vais étudier ça sèrieusement demain... d'ailleurs le #PB_Any que j'avais tout simplement oublié (inutile dans ce cas la car je change son etat au cours du prog' mais toujours utile à savoir).
Bref, je vais essayer les diverses solutions cités et opté pour celle qui me paraît la plus simple à mettre en oeuvre, je vous tiens au courant si ça ne fonctionne pas (du moins, que je suis encore trop limité pour concrétisé vos idées chers collègues PureBiens)
Merci encore !
Re: Générer des #Gadget selon un fichier .ini (ou variable)
Publié : mer. 15/juin/2011 21:36
par Backup
deja t'es pas obligé d'utiliser une constante pour un gadget !
tu peut utiliser une variable toute simple
tu peux utiliser un tableau , ou bien une liste chainée, une structure , bref tout ce qui peut
servir de memoire pour retenir le numero que tu attribut a ton gadget !!
bref tout ceci est valable :
Code : Tout sélectionner
ImageGadget(#IMG_GADGET+i, Position, 20, 16, 16, ImageID(#Image_Image_0))
ou
ou
Code : Tout sélectionner
ImageGadget(Toto(i), Position, 20, 16, 16, ImageID(image(i)))
etc ...
pour les constantes "enumeration" n'est pas une obligation !
c'est juste plus pratique
tu peut initialiser une constante comme une variable
#contante = 8
ou aussi
#constante$ ="toto"
Re: Générer des #Gadget selon un fichier .ini (ou variable)
Publié : mer. 15/juin/2011 21:53
par Shinao
J'ai oublié mes bases, crazy.
Thanks
Re: Générer des #Gadget selon un fichier .ini (ou variable)
Publié : jeu. 16/juin/2011 7:41
par Geo Trouvpatou
Mais attention avec la méthode d'Ar-s, parce que du coup, si tu ajoutes comme je l'ai fait un bouton juste après #IMG_GADGET dans l'Enumeration, alors celui-ci est bouffé
Vu que : #SuperBouton vaut 3 et que le 1er ImageGadget vaut 3 aussi.
Cela peut être source d'erreur.
Code : Tout sélectionner
UsePNGImageDecoder()
Enumeration
#Window_0
EndEnumeration
Enumeration
#Image_Image_0
#IMG_GADGET
#SuperBouton ; Vaut 3
EndEnumeration
If CreateImage(#Image_Image_0, 16, 16)
StartDrawing(ImageOutput(#Image_Image_0))
Box(0,0,16,16,$00CCFF)
StopDrawing() ; This is absolutely needed when the drawing operations are finished !!! Never forget it !
EndIf
Global NbrLigne
NbrLigne = 5 ; => Ton Nombre de ligne
Position = 5
If OpenWindow(#Window_0, 560, 227, 443, 158, "Win", #PB_Window_SystemMenu|#PB_Window_TitleBar)
ButtonGadget(#SuperBouton, 10, 10, 200, 22, "Super Bouton") ; -----------------> Ce bouton est bouffé.
For i=1 To NbrLigne
ImageGadget(#IMG_GADGET+i, Position, 20, 16, 16, ImageID(#Image_Image_0))
Position+25
Debug "Image "+Str(i)+" : Gadget numéro "+Str(#IMG_GADGET+i)
Next i
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Window_0
CloseWindow(#Window_0)
Break
EndSelect
EndSelect
ForEver
Re: Générer des #Gadget selon un fichier .ini (ou variable)
Publié : jeu. 16/juin/2011 11:22
par Ar-S
C'est vrai que pour ce genre de fonction, il suffit pour être tranquille de séparer les énumérations en gardant les gadgets "dynamiques" à la fin (à partir de 100 par exemple).
Code : Tout sélectionner
UsePNGImageDecoder()
Enumeration
#Window_0
#Image_Image_0
#SuperBouton
EndEnumeration
Enumeration 100
#IMG_GADGET
EndEnumeration
If CreateImage(#Image_Image_0, 16, 16)
StartDrawing(ImageOutput(#Image_Image_0))
Box(0,0,16,16,$00CCFF)
StopDrawing() ; This is absolutely needed when the drawing operations are finished !!! Never forget it !
EndIf
Global NbrLigne
NbrLigne = 5 ; => Ton Nombre de ligne
Position = 5
If OpenWindow(#Window_0, 560, 227, 443, 158, "Win", #PB_Window_SystemMenu|#PB_Window_TitleBar)
ButtonGadget(#SuperBouton, 10, 10, 200, 22, "Super Bouton") ; -----------------> Ce bouton est bouffé.
For i=1 To NbrLigne
ImageGadget(#IMG_GADGET+i, Position, 20, 16, 16, ImageID(#Image_Image_0))
Position+25
Debug "Image "+Str(i)+" : Gadget numéro "+Str(#IMG_GADGET+i)
Next i
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Window_0
CloseWindow(#Window_0)
Break
EndSelect
EndSelect
ForEver
Ainsi même si tu ajoutes des gadgets dans la partie enumeration des gadgets "statiques", les images seront toujours = 101, 102, 103 etc..
Re: Générer des #Gadget selon un fichier .ini (ou variable)
Publié : jeu. 16/juin/2011 18:54
par Shinao
Merci pour vos réponses !
J'en ai tout de même une dernière, comment je peux faire varier le nom d'une constante avec une variable ?
Du genre concaténé le #Imagebla avec le chaîne de caractère "bla".
Est-ce possible ?
Merci encore
Re: Générer des #Gadget selon un fichier .ini (ou variable)
Publié : jeu. 16/juin/2011 20:47
par Backup
...................
Re: Générer des #Gadget selon un fichier .ini (ou variable)
Publié : jeu. 16/juin/2011 21:08
par GallyHC
Il faut inventer les constantes, variables et les variables, contantes lolll non je rigole. La bonne chose a faire est en fonction des informations que l'on a. Si une seule information, un tableau est bien si plus un tableau avec une struture est mieu.
Je vais voir ce que je peux te proposer demain car la pas mal de chose a faire
Cordialement,
GallyHC
Re: Générer des #Gadget selon un fichier .ini (ou variable)
Publié : jeu. 16/juin/2011 21:36
par Shinao
Merci pour les réps !
Je lirais ça attentivement demain matin, car ma tête surchauffe.
Et ferais part de ce que j'ai fais pour savoir si il y a moyen d'opti' ou autre, bref, j'ai du boulot à faire avant de trouver le bon résultat...
Ty
Re: Générer des #Gadget selon un fichier .ini (ou variable)
Publié : ven. 17/juin/2011 9:27
par Shinao
Hello, donc voici ce que j'ai fais, pour adapater à mes besoins :
Code : Tout sélectionner
Procedure.i GID()
GID = GID + 1
ProcedureReturn GID
EndProcedure
Et donc pour mes gadgets :
Code : Tout sélectionner
Frame3DGadget(GID(), 10, 12, 145, 150, Programmes(NbLogDisplay)\programme$)
C'est le GID() qui est important ici, pas la structure ^^
Bref, merci pour vos réponses, ça m'a beaucoup aidé !