Gambas France BETA


Pas de compte ? Incription

Gérer les évènements de widget créés

1
AuteurMessages
spheris#1 Posté le 26/4/2010 à 09:31:00
bonjour,
Lors d'un clic sur un bouton, je crée une picturebox nommé toto1
lors d'un deuxieme clic sur ce bouton je crée une autre picturebox nommé toto2
lors d'un troisieme clic sur ce bouton je crée une autre picturebox nommé toto3
maintenant je veux pouvoir déplacer,supprimer, ou autre évènement sur mes picturebox.
Comment m'y prendre ? Avez vous une idée ?
Merci de vos réponses.
;)
jeanyvon#2 Posté le 26/4/2010 à 10:00:00
Gambas? Ma! Et gustoHello!
Pour déplacer aucun problème, c'est du drag and drop et tu es le meilleur
Pour supprimer et autres choses, si tu créais un menu attaché à chaque picturebox activé par le bouton droit, ça te laisse le choix du code attaché au menu.
JY
Vieillir? On peut retarder mais pas y échapper!
gambix#3 Posté le 26/4/2010 à 20:51:00
Faire simple !bon jean yvon a encore répondu a coté mdr :)

Tu fait pointer tes picturesbox ver le même event handler

Et dans le gestionnaire :


Public sur pbImage_Click()
Print Last.Tag
End

ça c'est pour gérer les évènements

Tu peux stocker les variable objet dans un tableau d'objet générale

en gb2 :

Private hMyPic as new Object[]
Public sub AddPicbox()
dim hPic as PictureBox
hPic = new Picturebox(me) as "pbImage"
hMyPic.Add(hPic)
end


en gb3

Private hMyPic as New PictureBox[]

Public sub AddPicbox()
dim hPic as PictureBox
hPic = new Picturebox(me) as "pbImage"
hMyPic.Add(hPic)
end


et tu peu ensuite utiliser

hMyPic[1].Move(x,y) etc
Moins de texte dans une signature c'est agrandir son espace.
jeanyvon#4 Posté le 27/4/2010 à 07:08:00
Gambas? Ma! Et gusto
bon jean yvon a encore répondu a coté mdr :)

C'est pour ça que je ne serais jamais de ta classe j'ai une autre façon d'appréhender les problèmes qui fait qu'en informatique comme en math malgré tous mes efforts je reste à bas niveau....
Ce qui ne m'empêche pas de m'amuser comme un fou avec Gambas!
A+
JY
Vieillir? On peut retarder mais pas y échapper!
spheris#5 Posté le 28/4/2010 à 20:45:00
Gambix,

Tu fait pointer tes picturesbox ver le même event handler

Peux tu préciser ceci ? je ne comprend pas.
;)
gambix#6 Posté le 28/4/2010 à 21:59:00
Faire simple !event handler c'est le gestionnaire d'évènement cad le nom préfix donné aux fonction qui vont gérer les évènement dudit objet


hMyPic = New picturebox(ME) AS "MonGestionnaire"
hMyPic2 = New picturebox(ME) AS "MonGestionnaire"

Public sub MonGestionnaire_Click()
End

Donc ces deux objets vont appeler la même fonction ... c'est un groupe :)

Quand on utilise l'IDE , et qu'on sélectionne un évènement a gérer pour un objet gambas utilise le nom de celui-ci pour préfixer la fonction... mais le soucis c'est que les noms serve aussi au variable d'acces aux objets...donc il y a Groupe qui prédomine sur le nom pour préfixer ces fonction et surtout il peux y avoir plusieurs objet avec le même groupe.

Voila c'est simple mais pas évident a entrevoir.
Moins de texte dans une signature c'est agrandir son espace.
jeanyvon#7 Posté le 29/4/2010 à 06:53:00
Gambas? Ma! Et gustoHello!
Le seul truc c'est qu'on ne récupère pas le bouton de la souris
C'est quand même ennuyeux....
A+
JY
Vieillir? On peut retarder mais pas y échapper!
gambix#8 Posté le 29/4/2010 à 07:35:00
Faire simple !C'est bon jean yvon ... tu as trouvé un autre bug :/... sous gb3 c'est un bug avec qt4... si tu utilise gb.gui et que tu as gb.gtk de compilé ce que tu peux faire en attendant c'est de forcer l'utilisation de gb.gtk a gb.gui en ajoutant une variable d'environnement


pour cela tu vas dans les option du projet. et dans l'onglet environnement a variable d'envirronnement tu ajoute la clé "GB_GUI" et en valeur "gb.gtk".


ça va forcer gb.gui a utiliser gb.gtk. gb.gui est un méta composant qui a juste la capacité de selectionner le composant en fonction de l'envirronnement (kde ou gnome)
Moins de texte dans une signature c'est agrandir son espace.
spheris#9 Posté le 29/4/2010 à 07:42:00
Ok gambix,
mais dans la fonction

hMyPic = New picturebox(ME) AS "MonGestionnaire"
hMyPic2 = New picturebox(ME) AS "MonGestionnaire"

Public sub MonGestionnaire_Click()

end


comment saura t on que l'on a cliqué hmypic ou hmypic2 ?

Admettons que si l'on clique sur hmypic on affiche print "clic sur hmypic"
et si on clique sur hmypic2 on affiche "clic sur hmypic2", comment par l'exemple écrirais tu ce code ?
:scratch: :scratch: ;)
jeanyvon#10 Posté le 29/4/2010 à 07:57:00
Gambas? Ma! Et gustoen version 3 c'est facile:
quand je créé mes objet, je leur donne un indice

for i = 0 to x
monbouton = New bouton as "mongroupe"
next


public sub mongroupe_mouseup()

for i = 0 to x
if monbouton.hasfocus then
Action à faire
endif
next

end

en version 2 je ne sais pas faire....
A+
JY
Vieillir? On peut retarder mais pas y échapper!
gambix#11 Posté le 29/4/2010 à 08:40:00
Faire simple !ben faicle ...

il suffit de donner un identifiant a chaque image ... dans tag tu met 1 pour la prière et 2 pour la deuxième.


ensuite :

Public sub mongetionnaire_click()

if last.tag=1 then print "Click sur image 1"
if last.tag=2 then print "Click sur image 2"


endif


Last est un des key word a connaitre par coeur en gambas .. il représente l'objet qui envoie l'évènement. Il faut faire attention car comme il est global il peut ètre perverti par un autre évènement si votre fonction de traitement est trop longue. Dans ce cas il suffira de la stocké dès le début de la fonction dans une variable locale... mais bon c'est rarement nécéssaire, je tenait juste a le souligner.

Tag est une propriété de stockage variant que possède tout widget ... il me sert souvent pour identifier les objet ou pour les coupler.


Il faut retenir que gambas ne passe pas les objet par argument mais par propriété. c'est une des différence avec vb.

la c'est le cas pour l'objet c'est le cas pour les bouton des sourie, pour les touche du clavier... etc c'est un choix de desing
Moins de texte dans une signature c'est agrandir son espace.
spheris#12 Posté le 7/5/2010 à 23:01:00
Oui mais le truc qui cloche c'est que dans ton exemple le TAG est vide et si je fais un print last.tag, j'ai des lignes vides.
Ou dois je remplir mes tag dans ton exemple?
gambix#13 Posté le 7/5/2010 à 23:04:00
Faire simple !Private hMyPic as new Object[]
Public sub AddPicbox()
dim hPic as PictureBox
dim i as integer
for i= 0 to 10
hPic = new Picturebox(me) as "pbImage"
hpic.tag=i
hMyPic.Add(hPic)
next
end
Moins de texte dans une signature c'est agrandir son espace.
1