ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Affichage d'une image provenant d'un champ BLOB dans un controle Grid   



L'auteur

Stéphane ANDRE
France France
Membre Simple
# 0000000089
enregistré le 28/10/2004

http://www.indexld.com
ANDRE Stéphane
30250 VILLEVIEILLE
de la société Index Languedoc Développement
Fiche personnelle


Note des membres
pas de note

Contributions > 01 - PRG : Programmation

Affichage d'une image provenant d'un champ BLOB dans un controle Grid
# 0000000156
ajouté le 01/03/2005 11:59:46 et modifié le 02/03/2005
consulté 8657 fois
Niveau initié

Version(s) Foxpro :
VFP 9.0

Description

En VFP 9 il semble très interessant d'afficher des images provenant de champs BLOB dans des grilles (pour afficher par exemple des petits symboles pour typer certaines lignes).

Implémenter ce type d'affichage n'est pas si simple que ça ...

Une méthode qui fonctionne est la suivante :

Dans une grille, déposer dans une colonne (par drag and drop dans l'IDE) un controle picture à coté du controle 
Text contenu par défaut dans celle-ci. Dans mon exemple le nom de la colonne est Colum15.

Avant d'exécuter ma recherche je coupe tous lien entre ma grille et mes données. 
Les instruction concernant la colonne qui va afficher l'image sont les suivantes :
  .Column15.ControlSource=""
  .Column15.DynamicBackColor=""
  .Column15.DynamicCurrentControl=""

J'effectue ensuite ma recherche et lie toutes les colonne de ma grille aux données.
Les instructions concernant la colonne qui va afficher mon image sont les suivantes :

.Column15.ControlSource="ImageArticle"
.Column15.DynamicBackColor="thisform.DynamicPictureColumn15()"
.Column15.DynamicCurrentControl='IIF (ImageArticle=="","Text1","Image1")'

On remarque que le DynamicCurrentControl va permettre d'afficher soit Text1 soit Image1 en fonction de l'existance ou non d'une donnée dans mon champ BLOB.

VFP n'ayant pas de méthode DynamicPicture nous allons créer une méthode nommée DynamicPictureColumn15 au sein de notre formulaire et l'affecter (voir lignes de code précédente) à la méthode DynamicBackColor qui est exécutée à chaque raffraichissement de ligne de la grille.

Voici le code de la méthode à implémenter.

 
** Méthode DynamicPictureColumn15 à créer dans le formulaire **
  && -- Cette méthode permet d'afficher/masquer dynamiquement un image dans la colonne 15 de la grille --
  && -- Cette méthode est affecté au DynamicBackColor de cette colonne car VFP n'a pas de méthode --
  && -- DynamicPicture --

  && -- Si aucune image n'est spécifiée --
  IF CURSEUR_RESULTAT.IMAGEARTICLE == ""
        && -- On n'affiche rien dans le controle text1 activé par le DynamicCurrentControl appliqué à cette colonne --
       Thisform.grdResultat.Column15.text1.Value = ""
  ELSE && -- Une image est spécifiée dans le champ BLOB --
       && -- Afficher cette image dans le controle Image1 activé par le DynamicCurrentControl appliqué à cette colonne --
       Thisform.grdResultat.Column15.Image1.PictureVal = CURSEUR_RESULTAT.IMAGEARTICLE
  ENDIF

  && -- On retourne un code RGB car DynamicBackColor attend
  une valeur de ce type --
  return RGB(255, 255, 255)

  Tout cela marche parfaitement !
  Le grand intérêt des champ BLOB est qu'ils ne dépendent d'aucun lien OLE et que leur affichage est très rapide.

Commentaires
le 27/03/2006, FoxInCloud (Th. Nivelet) a écrit :
Bravo pour ton code, exactement ce que je cherchais !
Il devrait fonctionner aussi avec un champ contenant l'adresse de l'image au lieu de l'image elle-même
Au lieu de :
Thisform.grdResultat.Column15.Image1.PictureVal = CURSEUR_RESULTAT.IMAGEARTICLE
il faudrait :
Thisform.grdResultat.Column15.Image1.PictureVal = LOADPICTURE(CURSEUR_RESULTAT.IMAGEARTICLE)


Publicité

Les pubs en cours :

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3