cs_eklips
Messages postés7Date d'inscriptionvendredi 25 janvier 2008StatutMembreDernière intervention 8 novembre 2008
-
8 nov. 2008 à 16:53
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 2013
-
9 nov. 2008 à 08:04
Bonjour à tous!
J'ai un problème avec la manipulation d'image! Je dois conçevoir un programme d'exercice à partir d'une banque d'image. L'usager sélectionne une image à partir d'un treeview, elle apparaît dans un picturebox et s'il la choisis elle est transférée dans un listview.
Pour ce faire j'utilise un array pour stocker le chemin des images affichées dans le picturebox. Mon problême est que lorsque le programme d'exercice est complété je dois pouvoir en faire une version papier à l'aide de crystal report. Lorsque je tente d'envoyer les images a crystal report j'obtiens une erreur: les images sont ouvertes donc impossible de les lire. Ça fait déjà quelques jours que je tente de trouver le moyen de contourner le problême mais je manque d'informations.
Premièrement je ne suis pas certain où exactement dans l'application l'image demeure ouverte? est-ce lorsque je remplis le treeview, ou alors lorsque j'affiche l'image dans le picturebox?
Biensur j'ai trouver de l'information sur .clone et sur l'utilisation des thumbnails mais comme je ne sais pas comment vérifier si l'image est ouverte à un moment x du déroullement de l'application j'ai de la difficulté à tester ces conctions.
Bon puisqu'une "image" :P vaut milles mots voici mon code:
#Region "Creation du programme d'entrainement"
Private Sub initialiserTreeview()
Dim z As TreeNode
tvExercice.ImageList = icones
z = tvExercice.Nodes.Add("..\Exercices")
Explor(z)
z.ImageIndex = 0
z.SelectedImageIndex = 0
End Sub
Private Sub Explor(ByVal Node As TreeNode)
Try
Dim s As String
For Each s In Directory.GetDirectories(Node.FullPath)
Node.Nodes.Add(Path.GetFileName(s))
Node.ImageIndex = 1
Node.SelectedImageIndex = 2
Next s
Catch ex As IOException
End Try
Try
For Each f As String In Directory.GetFiles(Node.FullPath)
Node.Nodes.Add(Path.GetFileName(f))
Node.ImageIndex = 3
Node.SelectedImageIndex = 3
Next f
Catch e As IOException
End Try
End Sub
Private Sub tvExercice_AfterCollapse(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvExercice.AfterCollapse
pbImage.Image = Image.FromFile("..\blank.bmp").Clone
End Sub
Private Sub tvExercice_AfterExpand(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvExercice.AfterExpand
Dim z As TreeNode
For Each z In e.Node.Nodes
Explor(z)
If z.FullPath.EndsWith("bmp") Then
z.ImageIndex = 3
z.SelectedImageIndex = 3
Else
z.ImageIndex = 2
z.SelectedImageIndex = 2
End If
Next z
End Sub
Private Sub tvExercice_AfterSelect(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvExercice.AfterSelect
chargerPhoto()
End Sub
Private Sub chargerPhoto()
Try
pbImage.Image = Image.FromFile(tvExercice.SelectedNode.FullPath).Clone
pbImage.Refresh()
selectionne = tvExercice.SelectedNode.FullPath
Catch e As Exception
End Try
End Sub
Private Sub tvExercice_NodeMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles tvExercice.NodeMouseClick
If Not e.Node.FullPath.EndsWith("bmp") Then
pbImage.Image = Image.FromFile("..\blank.bmp").Clone
btnAjout.Enabled = False
Else
btnAjout.Enabled = True
btnEnleve.Enabled = False
End If
End Sub
Private Sub btnAjout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAjout.Click
ajoutAuProg()
btnAjout.Enabled = False
btnEnleve.Enabled = True
btnRapportEntrainement.Enabled = True
End Sub
Private Sub tvExercice_NodeMouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles tvExercice.NodeMouseDoubleClick
If Not e.Node.ImageIndex = 1 Then
pbImage.Image = Image.FromFile("..\blank.bmp").Clone
btnAjout.Enabled = False
Else
ajoutAuProg()
btnAjout.Enabled = False
btnEnregistrer.Enabled = True
End If
End Sub
Private Sub ajoutAuProg()
Try
For i As Int16 = 0 To posArray
If selectionne = chemin(i) Then
If selectionne.ToString <> "!" Then
MsgBox("l'exercice " & nomFichier(chemin(i)) & " se trouve déjà dans le programme d'entraînement.")
Exit Sub
End If
End If
Next
chemin(posArray) = selectionne
ListGrand.Images.Add(Image.FromFile(chemin(posArray)).Clone)
lvEntrainement.LargeImageList = ListGrand
posArray += 1
Dim j As Int16 = posArray - 1
Dim path As String = chemin(posArray - 1)
lvEntrainement.Items.Add(nomFichier(path), posArray - 1)
btnEnregistrer.Enabled = True
Catch ex As Exception
End Try
End Sub
Private Sub lvEntrainement_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvEntrainement.Click
btnEnleve.Enabled = True
btnAjout.Enabled = False
End Sub
Private Sub lvEntrainement_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvEntrainement.DoubleClick
enleveAuProg()
btnEnleve.Enabled = False
btnEnregistrer.Enabled = True
End Sub
Private Sub btnEnleve_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnleve.Click
enleveAuProg()
btnEnleve.Enabled = False
btnEnregistrer.Enabled = True
modifie = True
End Sub
Public Sub enleveAuProg()
Dim temp(0 To 9) As String
Dim k As Int16 = 0
For i As Int16 = 0 To posArray - 1
If lvEntrainement.SelectedItems(0).Text = nomFichier(chemin(i)) Then
lvEntrainement.Items.RemoveAt(lvEntrainement.SelectedItems(0).Index)
chemin(i) = Nothing
If lvEntrainement.Items.Count = 0 Then
btnRapportEntrainement.Enabled = False
End If
Exit Sub
End If
Next
posArray -= 1
btnEnregistrer.Enabled = True
If lvEntrainement.Items.Count = 0 Then
btnRapportEntrainement.Enabled = False
End If
End Sub
Private Function nomFichier(ByVal path)
Try
Return path.Substring(path.LastIndexOf("") + 1, path.Length - path.LastIndexOf("") - 5)
Catch ex As Exception
Return "!"
End Try
End Function
Alors pour résumer mes questions sont:
1. Comment vérifier à l'aide de code, si une image est ouverte
2. Comment cloner une image ou alors comment charger l'image en mémoire sans qu'elle demeure ouverte
3. Où exactement le problême est causé (treeview, picturebox ou listview)
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 8 nov. 2008 à 21:37
Bonjour,
VB6 ?? "#Region "Creation du programme d'entrainement"" .NET plutot.
Ensuite, pour libérer une ressource utilises Dispose sur l'image, cela devrait t'aider. Ensuite, tu peux utiliser System.GC.Collect afin de forcer l'execution du GarbageCollector. Si ça ne fonctionne pas, utilises alors l'image (sciemment gardée en mémoire) et fais un .Save(...).
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 8 nov. 2008 à 18:33
Bonjour,
Je dois vraiment être débutant de chez débutant en Thèmes / Visual Basic 6, car beaucoup de choses sont encore totalement inconnues de moi...
Ceci, par exemple :
pbImage.Image = Image.FromFile(tvExercice.SelectedNode.FullPath).Clone
Plus grave encore, j'ai beau fouiller dans mon aide en ligne pour VB6 (MSDN/VB6), je ne trouve rien concernant Clone, FromFile, etc...
Tu me fiches beaucoup de complexes ...
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 8 nov. 2008 à 18:40
Non...
Sérieux, là ...
J'apprends beaucoup (comme tout débutant) en regardant sur ce forum les solutions proposées pour des problèmes VB6...
Mais là, je suis totalement perdu ...et mon aide en ligne ne m'aide pas sur ces points ...
Où les as-tu appris ? As_tu un livre à recommander pour acquérir ces notions VB6 supplémentaires ?
Y a-t-il sur ce forum un tuto spécial pour ces notions complémentaires ?
Aidez-moi...
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 9 nov. 2008 à 08:04
Bonjour, NHenry,
Merci d'avoir ainsi tranquilisé le pauvre débutant que je suis et qui commençait à s'inquiéter sérieusement !
Ta précision aura sans doute permis d'en tranquiliser d'autres (de débutants) qui, comme moi, sont venus lire les discussions de ce forum pour apprendre et se perfectionner... et pas pour être effrayés par des syntaxes totalement inconnues !!!
MERCI ENCORE ...
Ouf !