Le guide Oracle Forms 9i/10g
Date de publication : Juin 2005
Les items bouton de commande
Définition
Concept
Mise en oeuvre
Techniques avancées
Les items bouton de commande
Définition
Un bouton de commande permet d'exécuter du code lorsqu'il est cliqué avec la souris ou déclenché avec le clavier (touche Entrée).
Ce type d'item n'accepte pas de saisie et ne stocke aucune valeur.
Il peut être associé soit à un libellé soit à une image.
Concept
- Sous Forms 9i/10g, un item bouton ne peut pas correspondre à une colonne d'une table.
Il est obligatoirement non basé.
- Il peut faire partie d'un bloc mono ou multi enregistrements.
- Le code PL/SQL associé doit être placé dans un déclencheur : When-Button-Pressed.
Mise en oeuvre
Créer un item Bouton de commande
Depuis le navigateur d'objet:
Pointer le nud Eléments du bloc désiré puis sur le bouton 
La propriété Type d'élément doit être valorisée à Bouton de commande
Depuis l'éditeur de présentation:
Sélectionner le canevas et le bloc de réception de l'item.
Cliquer l'icône 
Dessiner sur le canevas un rectangle avec la souris pour délimiter les dimensions de l'item
Propriétés spécifiques du bouton de commande:
Libellé est le texte qui sera affiché dans le bouton.
Cette propriété peut être modifiée à l'exécution via l'instruction:
Set_Item_Property( nom_item | id_item, LABEL, libelle) ;.
Touche d'accès permet de sélectionner la touche clavier de déclenchement du bouton avec la touche ALT.
Si vous souhaitez que le bouton réagisse à Alt+d, entrez d dans cette propriété.
Cette propriété ne peut être modifiée à l'exécution.
Icône permet d'indiquer si une image sera associée au bouton (à la place du libellé).
Cette propriété ne peut être modifiée à l'exécution.
Nom de fichier d'icône indique le nom du fichier image associé au bouton.
Il ne faut pas saisir l'extension du nom de fichier.
En effet Forms 9i cherche un fichier ayant l'extension .ICO dans la partie conception (Forms Builder) et .GIF à l'exécution (Forms Runtime)...
Cette curiosité obligeant la présence de deux fichiers (.ICO et .GIF) pour chaque image. (Forms 10g accepte un fichier .GIF dans les deux modes).
Cette propriété peut être modifiée à l'exécution via l'instruction:
Set_Item_Property( nom_item | id_item, ICON_NAME, nom_fichier_icone).
Bouton par défaut indique si le bouton obtiendra automatiquement le focus.
Il régira donc à toute frappe de la touche Entrée.
Cette propriété ne peut être modifiée à l'exécution.
Navigation autorisée au clavier Indique si le bouton obtiendra le focus lors de la navigation par le clavier (touches Tab ou Shift+Tab).
Cette propriété peut être modifiée à l'exécution via l'instruction:
Set_Item_Property( nom_item | id_item, NAVIGABLE, PROPERTY_TRUE | PROPERTY_FALSE).
Navigation à la souris indique si le bouton obtiendra le focus lorsqu'il est cliqué avec la souris.
Cette propriété peut être modifiée à l'exécution via l'instruction:
Set_Item_Property( nom_item | id_item, MOUSE_NAVIGATE, PROPERTY_TRUE | PROPERTY_FALSE).
Attention:
Ces deux dernières propriétés positionnées à Oui peuvent engendrer des effets non souhaités.
En effet, le bouton peut appartenir à un autre bloc (souvent un bloc de contrôle) et engendre, dans ce cas un processus de navigation qui actionne certains déclencheurs ( When-Validate-Record, Post-Record, Post-Block, etc.), ce qui n'est pas toujours le but souhaité.
Je conseille dans ce cas, en l'absence d'une bonne raison, de positionner ces deux propriétés à Non.
Le code Forms devant s'exécuter lorsque le bouton est actionné doit être placé dans un déclencheur When-Button-Pressed qui accepte les procédures restreintes.
Techniques avancées
Lorsque vous placez un item Bouton de commande dans un bloc multi enregistrements, Forms créé autant de boutons que d'enregistrements affichés.
Si vous ne souhaitez qu'une seule instance du bouton, positionnez sa propriété Nombre d'éléments affichés à 1.
D'une façon générale, il est conseillé de placer les boutons de commande dans un bloc de contrôle dont la propriété Enregistrement unique est positionnée à OUI
Libellé multi-lignes
Au moment de la conception, il n'est pas possible de scinder le libellé du bouton en plusieurs lignes.
Par contre vous pouvez le faire à l'exécution.
Il suffit pour cela de déclarer une chaîne de caractères contenant des caractères CHR(10) puis d'associer cette chaîne au bouton comme dans l'exemple suivant :
Declare
LC$Label varchar2(30) := 'libellé ' || chr(10) || 'du' || chr(10) || 'bouton' ;
Begin
Set_Item_Property('bloc3.bt', LABEL, LC$Label ) ;
End;
Bouton multi lignes de couleurs différentes:
Dans un bloc muti enregistrements, il est possible de donner un attribut graphique différent à chaque bouton grâce à l'instruction Set_Item_Instance_Property().
Notre forme possède trois attributs visuels:
Dans le déclencheur Post-Query du bloc DEPT, nous souhaitons donner à chaque bouton un aspect particulier selon le code du département:
If :DEPTNO = 10 Then
Set_Item_Instance_Property( 'DEPT.BT', CURRENT_RECORD, VISUAL_ATTRIBUTE, 'VA_ROUGE' ) ;
ElsIf :DEPTNO = 20 Then
Set_Item_Instance_Property( 'DEPT.BT', CURRENT_RECORD, VISUAL_ATTRIBUTE, 'VA_BLEU' ) ;
Else
Set_Item_Instance_Property( 'DEPT.BT', CURRENT_RECORD, VISUAL_ATTRIBUTE, 'VA_VERT' ) ;
End if ;
Afin d'obtenir le résultat suivant:

Bouton de contour irrégulier:
Les items bouton de commande sont de forme rectangulaire.
Pour travailler avec des bouton de forme irrégulière, ce type d'item ne convient pas, mais plusieurs techniques de contournement sont possibles.
1- L'image en fond d'écran:
Le but est de placer une image en fond d'écran (Edition->Importer->Image) et de gérer la position X et Y de la souris dans un déclencheur de niveau forme : When-Mouse-Click
Il est important de vérifier en tout premier point que le système de coordonnées est positionné à : Pixel car c'est dans ce système que les variables :system.mouse_x_pos et :system.mouse_y_pos sont valorisées.
- Placez l'image sur le canevas avec le menu d'importation.
- Placez par dessus des rectangles dont les dimensions correspondent à la zone de "sensibilité" de l'image .
- Notez les coordonnées physiques (position x, position y, largeur, hauteur) de ces cadres, puis supprimez-les.
- Dans le déclencheur When-Mouse-Click, vérifiez si la position de la souris au moment du clic est située dans l'une des zones de sensibilité
Declare
LN$Posx pls_integer := :system.mouse_x_pos ;
LN$Posy pls_integer := :system.mouse_y_pos ;
Begin
If LN$Posx between 20 and 120
And LN$posy between 65 and 200 Then
Message('Image cliquée', acknowledge );
End if ;
End ;
2- L'item de type Image:
Cette solution est moins coûteuse en terme de développement mais nécessite que l'image soit présente dans le système de fichiers.
- Placer un item de type image sur le canevas en fixant les propriété de couleur et relief à NULL
- Charger l'image dans l'item au chargement de la forme en utilisant l'instruction Read_Image_File():
Déclencheur : When-New-Form-Instance
Read_Image_File( 'D:\Cours\tuto_forms\Photos\test.gif','ANY', 'BLOC6.IMG') ;
- Placer un déclencheur When-Image-Pressed sur l'item image.
Ce déclencheur remplace le When-Button-Pressed d'un bouton et ne nécessite aucun code de gestion de la position de la souris.
Configurer Forms pour afficher les icônes
Lorsque vous utiliser des images sur les boutons de commande, il faut indiquer à Forms le chemin d'accès aux fichiers images.
Ce chemin est indiqué dans un répertoire virtuel (virtual directory).
Avec Application Server, il faut configurer le fichier:
<ORACLE_HOME>/forms90/server/forms90.conf
Ajouter l'alias faisant correcpondre le répertoire virtuel avec le chemin physique:
Pour l'exemple nous stockons les fichiers images dans le répertoire : d:\icons
Nous ajoutons donc la ligne suivante:
# Virtual Path pour les icones
AliasMatch ^/forms90/icons/(..*) "d:\icons/$1"
Avec Developer Suite, il faut configurer le fichier:
%DEV_SUITE_HOME%\j2ee\Oracle9iDS\application-deployments\forms\forms90web\orion-web.xml
<virtual-directory virtual-path="/icons" real-path="D:\icons" />
|