Insérer des mots dans une picturebox et les relier entre eux

moscato40 Messages postés 27 Date d'inscription mardi 13 mai 2008 Statut Membre Dernière intervention 24 juin 2010 - 26 févr. 2009 à 13:50
moscato40 Messages postés 27 Date d'inscription mardi 13 mai 2008 Statut Membre Dernière intervention 24 juin 2010 - 2 mars 2009 à 13:59
Bonjour,

je reviens vers le forum pour demander l'avis pertinent des membres de la communauté VBFrance. Je voudrais afficher dans une picturebox un point avec comme intitulé un mot issu d'un dictionnaire sous la forme fichier texte.

Je voudrais par la suite, si on clique sur ce point, pouvoir afficher les mots synonymes du premier terme demandé relié avec lui avec une ligne.

Le fichier dictionnaire est de la forme :

mot1,synonyme1, synonyme2, synonyme3
mot2,synonyme1, synonyme2
mot3,synonyme1, synonyme2, synonyme3,synonyme4

ou encore en moins barbare :

bois, forêt, bosquet
fouiller, farfouiller, fourgonner, fureter, ratisser,fourrager
attaquer, accuser, agresser

Si je choisi "bois", le terme apparaît dans la picturebox, si je clique dessus, les mots "forêt" et "bosquet" apparaissent aussi avec une ligne les reliant au mot "bois"

Tous vos avis seront importants même si vous me dites qu'il ne faut surtout pas faire comme ça !!!

Merci de me donner des pistes et/ou des petits bouts de codes (tant qu'à demander !!!) pour que je puisse me dépatouiller par la suite comme un grand.

Par avance Merci

3 réponses

Utilisateur anonyme
28 févr. 2009 à 00:34
salut moscato40,


je n'ai pas vb6 mais j'ai réalisé ceci en vb net si tu décide de t'y mettre on sait jamais


'colle ceci dans une form vierge puis appuie sur F5




Public








Class

 Form1



Dim

 picG 


As

 PictureBox = 


New

 PictureBox 


'declaration d'une picturebox








Dim

 btnSuivant 


As

 Button = 


New

 Button 


'declaration d'un bouton








Dim

 Dict(,) 


As





String





'dictionnaire








Dim

 Num 


As





Integer





'compteur des mots a changer bien entendu selon ton code








Dim

 PointClick 


As

 Rectangle 


'rectangle contenant ton point cliquable








Dim

 b 


As

 Bitmap 


'declaration d'un bitmap








Dim

 g 


As

 Graphics 


'declaration d'un objet de dessin (pour dessiner sur b)








Private





Sub

 Form1_Load(


ByVal

 sender 


As

 System.Object, 


ByVal

 e 


As

 System.EventArgs) 


Handles





MyBase

.Load



'adapter ceci a ton code ---------------------








ReDim

 Dict(2, 5)



Dim

 d(2) 


As





String


d(0) = 





"bois, forˆt, bosquet"


d(1) = 





"fouiller, farfouiller, fourgonner, fureter, ratisser, fourrager"


d(2) = 





"attaquer, accuser, agresser"








Dim

 x 


As





Integer








For

 x = 0 


To

 UBound(d)



Dim

 tmp() 


As





String

 = Split(d(x), 


", "

)



For

 y = 0 


To

 UBound(tmp)Dict(x, y) = tmp(y)



Next








Next








'---------------------------------------------








'proprietes de la picturebox








With

 picG.Parent = 



Me


.Bounds = 





New

 Rectangle(3, 3, 280, 150).BorderStyle = BorderStyle.Fixed3D



End





With








'ajout d'un evenement mousedown








AddHandler

 picG.MouseDown, 


AddressOf

 picG_Click



'propriete du bouton








With

 btnSuivant.Parent = 



Me


.Bounds = 





New

 Rectangle(3, picG.Height + 10, 150, 22).Text = 



"Mot Suivant"








End





With








'ajout d'un evenement click au bouton








AddHandler

 btnSuivant.Click, 


AddressOf

 btnSuivant_Click



'petit click dessus


btnSuivant.PerformClick()








End





Sub








Private





Sub

 btnSuivant_Click(


ByVal

 sender 


As





Object

, 


ByVal

 e 


As

 EventArgs)



'on essaye d'afficher l'image genere par la fonction AfficheMotSuivant








Try


picG.Image = AfficheMotSuivant()








Catch

 ex 


As

 IndexOutOfRangeException



'si echec on remet le compteur a zero et on réaffiche


Num = 0


picG.Image = AfficheMotSuivant()








End





Try








End





Sub








Private





Function

 AfficheMotSuivant() 


As

 Image



'demande d'une image vierge puis objet de dessin


b = 





New

 Bitmap(picG.Width, picG.Height)g = Graphics.FromImage(b)



'remplissage d'un rectangle de fond (pour faire joli)


g.FillRectangle(





New

 SolidBrush(Color.Firebrick), 


New

 Rectangle(0, 0, picG.Width, picG.Height))



'ecriture du mot de base 0 du dictionnaire


g.DrawString(Dict(Num, 0), 





New

 Font(


"Arial"

, 12, FontStyle.Regular), 


New

 SolidBrush(Color.Yellow), 5, 5)



'creation du rectangle qui contiendra le point cliquable (on mesure le mot pour afficher le point juste derriere)


PointClick = 





New

 Rectangle(g.MeasureString(Dict(Num, 0), 


New

 Font(


"Arial"

, 12, FontStyle.Regular)).Width + 10, 10, 8, 8)



'dessin du point cliquable


g.FillEllipse(





New

 SolidBrush(Color.Tomato), PointClick)



'incrementation de numerot mot


Num += 1








'renvoi de l'image obtenue








Return

 b



End





Function








Private





Sub

 picG_Click(


ByVal

 sender 


As





Object

, 


ByVal

 e 


As

 MouseEventArgs)



'detection des coordonn‚es du click sur la picturebox








If

 e.X > PointClick.X 


And

 e.X < PointClick.X + PointClick.Width 


And

 e.Y > PointClick.Y 


And

 e.Y < PointClick.Y + PointClick.Height 


Then








'si l'on se trouve dans le rectangle cliquable on affiche les synonymes


picG.Image = AfficheSynonymes()








End





If








End





Sub








Private





Function

 AfficheSynonymes() 


As

 Image



'demande d'un clone de l'image affich‚e afin d'y rajouter les synonymes








Dim

 i 


As

 Image = b.Clone



'declaration d'un rectangle (qui contiendra les points de correspondance)








Dim

 rectdest 


As

 Rectangle



'objet de dessin sur le clone i


g = Graphics.FromImage(i)








'hauteur qu'on incr‚mentera afin de superposer les mots








Dim

 hauteur 


As





Integer

 = 5



'boucle d'affichage des synonymes








For

 x = 1 


To

 5



'dessin du synonyme


g.DrawString(Dict(Num - 1, x), 





New

 Font(


"Arial"

, 12, FontStyle.Regular), 


New

 SolidBrush(Color.Orange), 190, hauteur)



'si le synonyme existe








If

 Dict(Num - 1, x) <> 


""





Then








'calcul position du rectangle du point de correspondance


rectdest = 





New

 Rectangle(180, hauteur + 5, 8, 8)



'dessin du point de correspondance


g.FillEllipse(





New

 SolidBrush(Color.Tomato), rectdest)



'dessin de la ligne reliant le point cliquable au point du synonyme


g.DrawLine(





New

 Pen(Color.White), PointClick.X + 8, PointClick.Y + 4, rectdest.X, rectdest.Y + 4)



End





If








'incrémentation de la hauteur


hauteur += 20








Next








'renvoi du clone modifié de l'image d'origine 








Return

 i



End





FunctionEnd







Class

0
Utilisateur anonyme
28 févr. 2009 à 00:37
oups, le collage a foiré on dirait bon on verra ca demain, il est tard dsl
0
moscato40 Messages postés 27 Date d'inscription mardi 13 mai 2008 Statut Membre Dernière intervention 24 juin 2010
2 mars 2009 à 13:59
Salut,
merci banana32 de t'être penché sur mon problème. Je vais regarder ton code de plus près et essayer de la transposer en vb6. En ce moment, je travaille sur une autre solution mais qui ne me plaît qu'à 50%.

@suivre
0
Rejoignez-nous