Banque d’images : gérer les images vides
Dans un des premiers articles de la série Banque d’images, il était question de créer un état à partir des images stockées dans la base.
Petit défaut d’affichage : lorsqu’une image n’est pas renseignée, c’est la dernière image utilisée qui s’affiche sur l’état. Nous allons voir comment traiter ce détail.
Le défaut
Dans l’état qui suit, l’image n°3 n’a pas de chemin (en même temps, c’est un peu incohérent pour un album photo, non ?). On voit que la photo 3 est en fait une reprise de la 2.
Première solution
Une première approche va consiste à masquer l’image si sa source est vide. L’objectif étant d’obtenir ceci :
Remplacez l’ancien code de l’événement Au formatage
de la zone de détail de l’état (jamais écrit autant de « de » dans une phrase 🙂 ) par ceci :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Private Sub Détail_Format( _ Cancel As Integer, _ FormatCount As Integer) ' Le chemin complet de l'image... Dim strChemin As String If IsNull(Me.Dossier) Or IsNull(Me.Nom_Fichier) Then strChemin = "" Else strChemin = AddBackslash(Me.Dossier) & Me.Nom_Fichier End If ' Chargement de l'image On Error Resume Next If (strChemin = "") Or (Dir(strChemin) = "") Then Me.imgApercu.Visible = False Else Me.imgApercu.Visible = True Me.imgApercu.Picture = strChemin End If End Sub |
Deuxième solution
Au lieu de masquer la zone d’image, on pourrait aussi afficher une image de remplacement. Ce qui donnerait :
Pour obtenir ce résultat :
- Placez une image appelée
question.jpg
dans le même dossier que votre base de données. - Définissez cette constante dans votre état, ou dans un module standard (la deuxième approche est meilleure si la même image doit servir dans plusieurs états).
1 |
Const IMAGE_PAR_DEFAUT = "question.jpg" |
- Modifiez le code de formatage de l’état comme ceci :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Private Sub Détail_Format( _ Cancel As Integer, _ FormatCount As Integer) ' Le chemin complet de l'image... Dim strChemin As String If IsNull(Me.Dossier) Or IsNull(Me.Nom_Fichier) Then strChemin = "" Else strChemin = AddBackslash(Me.Dossier) & Me.Nom_Fichier End If ' Chargement de l'image On Error Resume Next If (strChemin = "") Or (Dir(strChemin) = "") Then Me.imgApercu.Picture = AddBackslash(CurrentProject.Path) & IMAGE_PAR_DEFAUT Else Me.imgApercu.Picture = strChemin End If End Sub |
Angel > Pour créer un module, cet article devrait aider. Ensuite, il suffit de recopier la ligne de constante (donnée dans cet article) en haut du module.
Re Bonjour,
Concernant la gestion des image vide :
Je ne sais pas comment créer un module et positionner une constante « Const IMAGE_PAR_DEFAUT = « question.jpg »
Je ne sais pas non plus ou j’ écrire dans un etat
Merci
Cordialement
Super; fonctionnement impéccable.
Encore merci et certainement à bientôt