Le guide Oracle Forms 9i/10g
Date de publication : Juin 2005
Les items image
Définition
Concept
Mise en oeuvre
Techniques avancées
Les items image
Définition
Forms peut afficher une image sur le canevas de deux façons:
- Une zone graphique de type image sur laquelle le développeur applique une image depuis le système de fichier ou depuis la base de donnée.
Cette image est directement attachée au canevas au moment de la conception et ne peut pas être manipulée à l'exécution.
- Un item basé ou non, stocké dans un bloc permettant d'afficher également une image de type vecteur ou bitmap depuis le disque dur ou la base de données.
Ce type d'image peut être manipulé au cours de l'exécution.
Les images peuvent également être appliquées aux items de type Bouton de commande.
Sous Forms 9i, les images appliquées aux boutons de commande doivent être au format .GIF ou .JPEG pour l'exécution, et .ICO pour la partie conception.
Forms 10g accepte les images au format .GIF dans tous les cas.
Concept
Lorsqu'une image dite "de fond" est appliquée directement sur un canevas, elle est sélectionnée au moment de la conception puis est enregistrée dans le fichier source .FBM ainsi que dans le fichier exécutable .FMX.
Les items de type Image sont associés à un bloc de données ou de contrôle et sont manipulables à l'exécution.
Lorsque l'item de type Image est basé sur la colonne d'une table, celle-ci peut être de type soit BLOB soit BFILE.
Rappel:
Une colonne de type BLOB stocke le contenu binaire directement dans la colonne de la table.
Une colonne de type BFILE ne stocke dans la colonne que le chemin d'accès vers le fichier stocké au niveau du système de fichiers.
Les images associées aux items de type Bouton de commande sont également manipulables, dans le sens ou il est possible de changer l'image associée au bouton au cours de l'exécution.
Mise en oeuvre
Poser une image de fond sur le canevas
- Ouvrez l'éditeur de présentation
- Assurez vous qu'il affiche le canevas désiré
- Cliquez le menu Edition -> Importer -> Image...
- Selon la source de l'image, choisissez Base de données ou Fichier
- Cliquez le bouton Parcourir... afin de sélectionner l'image
- Choisissez enfin la qualité d'affichage souhaité pour l'image.(plus la qualité est bonne, plus la mémoire nécessaire est importante)
Lorsque l'image apparaît sur le canevas il est possible de la déplacer et d'en changer les dimensions.
La fenêtre de propriété peut être activée en pressant F4.
Gérer un item de type Image
- depuis le navigateur d'objets
Choisissez le bloc dans lequel l'item image sera stocké
Cliquez le nud : Elément du bloc puis l'icône 
Cliquez le nouvel élément et affichez sa fenêtre de propriété avec F4
- depuis l'éditeur de présentation
Sélectionnez le canevas et le bloc de réception désiré
Cliquez l'outil  dans la palette d'outils
Dessinez avec la souris le contour de l'image sur le canevas
Les propriétés de l'image
Affichez la fenêtre de propriété avec F4
Type d'élément doit être : Image
Format image permet d'indiquer dans quel format l'image sera stockée en base
Profondeur d'image détermine le profondeur de l'image lue ou écrite depuis le fichier (fonction désuète depuis la version 9i)
Qualité de l'affichage indique la qualité d'affichage souhaitée
Plus la qualité est bonne, plus l'espace mémoire requis est important.
Afficher palette (il semble que cette fonctionnalité ne soit plus effective en mode Web)
Type d'ajustement
- Découper laisse l'image intacte
- Ajuster ajuste l'image à la taille de l'item
Afficher barre de défilement horizontale, verticale permet d'afficher le ou les ascenseurs pour faire défiler l'image.
Attacher une image à un bouton de commande
Si vous souhaitez visualiser l'image sous Forms Builder, vous devez indiquer une image de type ICON (.ICO).
Par contre, à l'exécution le format attendu est soit .GIF soit .JPEG
Ce système (peu pratique) impose donc d'avoir 2 versions de chaque image.
Partons du principe que les fichiers image sont stockés dans le répertoire : d:\forms9i\icons.
Pour indiquer à Forms Builder dans quels répertoires se trouvent les images, il faut renseigner la variable de registre : UI_ICON
Pour indiquer à Forms Runtime à quel endroit sont stockées les images, il faut le spécifier tout d'abord dans le fichier de configuration:
<ORACLE_HOME>/forms90/server/forms90.conf
en ajoutant une ligne du type:
AliasMatch ^/forms90/icons/(..*) "D:\Forms9i/icons/$1"
Modifier ensuite le fichier:
<ORACLE_HOME>/forms90/java/oracle/forms/registry/registry.dat
mettre à jour les deux ligne suivantes:
default.icons.iconpath=icons/
default.icons.iconextension=gif
Modifier ensuite les propriétés du bouton de commande:
Icône : Oui
Nom de fichier d'icône : nom du fichier (sans l'extension)
Attention au nom de fichier sur les systèmes Unix qui sont sensibles à la casse.
Techniques avancées
Plusieurs écrans d'exemples sont livrés avec l'article.
ALBUM.FMB permet de constituer un album de photos

Les images affichées sont stockées dans la table : PHOTOS dont le script de création est livré avec l'article.
Cette table ne contient qu'une colonne de type BLOB permettant de stocker une image par enregistrement.
Hors l'écran tel que nous le voyons semble construit avec des enregistrements affichant chacun cinq images !
Ouvrez le module ALBUM.FMB.
En fait, cinq blocs basés sur la table photos sont déclarés.
La sélection de la photo se fait dans la propriété : Clause Where de chaque bloc.
Par exemple le premier bloc contient : Substr(IDENTIFIANT,length(IDENTIFIANT),1) IN ('1','6')
Le deuxième contient : Substr(IDENTIFIANT,length(IDENTIFIANT),1) IN ('2','7')
Et ainsi de suite...
La clé primaire de chaque photo stockée (colonne IDENTIFIANT) est alimentée par la séquence SEQ_PHOTOS.
Le premier bloc affiche donc les images dont le numéro d'identifiant se termine par 1 ou 6.
Le deuxième bloc affiche donc les images dont le numéro d'identifiant se termine par 2 ou 7.
Et ainsi de suite pour les trois autres blocs.
Deux boutons permettent d'ajouter de nouvelles images à l'album.
L'un pour afficher un écran de gestion de répertoire (si vous n'avez pas installé la librairie WEBUTIL)
CHARGE_PHOTO.FMB

Si vous n'avez pas installé Webutil, cliquez le bouton Nouvelle photo (sans Webutil) pour afficher un écran Forms de sélection de fichier

Cette forme utilise intensivement la commande Host() pour afficher les lecteurs logiques ainsi que la liste des fichiers inclus.
Remarque:
Cet écran ne fonctionne que sous Windows et Developer Suite.
Néanmoins, comme la grande majorité des postes de développement sont sous Windows, cet écran permet de charger la base de données avec les images présentes sur le poste client sans la présence de WEBUTIL.
Si vous avez installé Webutil, cliquez le bouton Nouvelle photo (avec Webutil) pour afficher un écran Forms de sélection de fichier (CHARGE_PHOTO_WEBUTIL.FMB)
L'item de type image est alimenté avec la fonction Read_Image_File()
Cette fonction permet de lire un fichier image sur le disque et d'en charger le contenu dans un item de type image.
Read_Image_File( nom_fichier, type_fichier, nom_item_image | id_item_image )
nom_fichier représente le nom du fichier complet (chemin + fichier)
type_fichier peut prendre l'une des valeurs suivantes:
- ANY
- BMP
- CALS
- GIF
- JFIF
- JPG
- PICT
- RAS
- TIFF
- TPIC
Voici le contenu de la procédure : Charge_Photo() de l'écran : CHARGE_PHOTO.FMB :
Procédure : Charge_Photo (sans Webutil) PROCEDURE Charge_photo
IS
LC$Img Varchar2(100);
LN$But Number ;
pl_id ParamList;
pl_name Varchar(20) := 'list_params';
BEGIN
pl_id := Get_Parameter_List(pl_name);
If NOT Id_Null(pl_id) THEN
Destroy_Parameter_List( pl_id ) ;
End if ;
pl_id := Create_Parameter_List(pl_name);
Add_Parameter(pl_id,'P_FILTRE',TEXT_PARAMETER,'*.gif,*.jpg');
Add_Parameter(pl_id,'P_POSY',TEXT_PARAMETER,'1');
:global.get_file_name := '' ;
call_form( 'get_file_name', NO_HIDE, DO_REPLACE, QUERY_ONLY, pl_id ) ;
If not form_success Then
message('pb appel get_file_name');
End if ;
If :GLOBAL.get_file_name is not null Then
LC$Img := :GLOBAL.get_file_name ;
Go_block( 'PHOTOS' );
Read_Image_File(LC$Img, 'ANY', 'PHOTOS.photo');
Go_item( 'PHOTOS.NOM' );
Else
Raise form_trigger_failure ;
End if ;
END;
Pour écrire un fichier image depuis un item de type image, utilisez la fonction Write_Image_File().
Un double clic sur l'une des photos de l'écran ALBUM permet d'afficher l'image dans un format plus grand et d'y exécuter certaines manipulations.
quatre boutons permettent de déplacer l'image dans la fenêtre à l'aide des instructions : Image_Scroll()
Image_Scroll( nom_image | id_image, X, Y )
X indique la coordonnée X (abscisse) du déplacement
Y indique la coordonnée Y (ordonnée) du déplacement
X et Y peuvent être négatif, nul ou positif.
Des images sont d'ailleurs attachées à ces boutons (livrés avec l'article):
- fl_droite.gif
- fl_gauche.gif
- fl_haut.gif
- fl_bas.gif
Deux autres boutons permettent d'agrandir ou diminuer l'image avec la fonction : Image_Zoom().
Image_Zoom( nom_image | id_image, zoom_type [, zoom_facteur] )
zoom_type peut valoir:
- ADJUST_TO_FIT Ajuste l'image de telle façon quelle soit entièrement contenu dans la surface de l'item Image.
- SELECTION_RECTANGLE La région de l'image sélectionnée rempli entièrement la surface de l'item image.
- ZOOM_IN_FACTOR L'image est agrandie de la valeur de zoom_facteur.
- ZOOM_OUT_FACTOR L'image est diminuée de la valeur de zoom_facteur.
- ZOOM_PERCENT Agrandie/diminue l'image avec le pourcentage indiqué par zoom_facteur
|