Cette fonction est développée sous Forms 9i et testée avec un noyau 9.2.0.1.0
Il est toutefois possible de concevoir un équivalent adapté à la version 6i par copier-coller des différents constituants
N'hésitez pas à consulter
le complément de cet article avec un écran de sélection de couleurs qui utilise le javabean Colorpicker.jar
1. Introduction
L'objet de ce tutoriel est de voir comment modifier les couleurs d'une forme pendant l'exécution afin de permettre à l'utilisateur de personnaliser l'apparence des écrans de son application Oracle Forms.
Les concepts abordés dans cette partie concernent :
La navigation dans les blocs
Lecture et positionnement des propriétés des items
Manipulation des attributs visuels
Appel d'un écran depuis un menu
Centralisation du traitement en librairie
Le matériel nécessaire à la mise en uvre de cette fonctionnalité est constitué des éléments suivants
Une forme de référence pour base des futurs écrans
Une librairie PL/SQL Forms
Un menu Forms (en français) contenant l'appel de l'écran de sélection des couleurs
Les couleurs des différents objets de la forme sont stockées dans une table contenant autant de lignes que d'utilisateurs
Lors du chargement de l'écran, l'ensemble de ses objets est balayé et colorisé selon les choix enregistrés
Un écran de sélection des couleurs est mis à disposition de l'utilisateur pour lui permettre à tout moment de modifier ses préférences et de les enregistrer
3. Liste des objets modifiables dynamiquement
Tous les types d'items ainsi que l'invite associée sont modifiables dynamiquement
Les objets graphiques tels que les lignes et encadrement ne sont pas modifiables
Cette table doit avoir au moins une ligne avec le COD_UTIL = 0.
Cette ligne est sélectionnée par défaut lorsque l'utilisateur n'a pas encore personnalisé ses couleurs.
L'utilisateur est identifié par son code numérique (COD_UTIL)
La table permet de stocker :
la couleur du canvas (C_FOND)
la couleur des onglets (C_CADRE)
la couleur des invites (C_LIBELLE)
la couleur du fond des boutons (C_BOUTON)
la couleur du texte des boutons (C_TBOUTON)
la couleur du fond de l'enregistrement courant (C_CURREC)
la couleur du texte de l'enregistrement courant (C_TCURREC)
4.2. L'écran de sélection des couleurs
COULEURS.FMB
Le bloc Objets permet de sélectionner les différents objets sur lesquels l'utilisateur applique une couleur sélectionnée dans l'onglet Couleurs
4.3. La librairie Forms COULEURS.PLL
Contient le package PKG_COULEURS de colorisation des items, ainsi que 2 procédures permettant de gérer la colorisation des items interrogeables (QUERY_ALLOWED) lors d'une interrogation (ENTER-QUERY)
Debut_query() et Fin_query().
Ces deux procédures sont appelées par les trigger KEY-EXEQRY et KEY-ENTQRY de la forme de référence(FORM_REF.FMB).
La procédure change_couleurs lit les préférences de l'utilisateur dans la table UTIL_PREFS, adapte les couleurs des attributs visuels et appelle les procédures spécifiques de colorisation.
La procédure set_block_couleurs_libellés colorise tous les items de la form à l'exception des boutons de commande
La procédure set_bouton_couleur colorise les boutons de commande
La procédure set_current_record applique l'attribut visuel à la propriété CURRENT_RECORD_ATTRIBUTE de chaque block multi-lignes(RECORDS_DISPLAYED > 1).
LC$Block := get_form_property( NAME_IN('System.Current_Form'), FIRST_BLOCK ) ;
while LC$BlockisnotnullLoop-- pour chaque block --LN$NbRec := get_block_property(LC$BLOCK, RECORDS_DISPLAYED) ;
IfNvl(LN$NbRec,1) > 1 Then
.......
Les principales fonctions utilisées sont :
get_form_property();
ici pour se positionner sur le premier block de la form
Le balayage des différents items d'un bloc est réalisé dans la boucle suivante :
LC$Block := get_form_property( NAME_IN('System.Current_Form'), FIRST_BLOCK ) ;
while LC$BlockisnotnullLoop-- pour chaque block --
lc$itemdeb := get_block_property(LC$BLOCK, FIRST_ITEM) ;
while lc$itemdeb isnotnullloop-- pour chaque item --
lc$item := LC$BLOCK || '.' || lc$itemdeb ;
.
lc$itemdeb := get_item_property(lc$item, NEXT_NAVIGATION_ITEM );
Endloop ;
LC$Block := get_block_property( LC$Block, NEXTBLOCK ) ;
Endloop ;
4.4. Une Forme de référence contenant les attributs visuels, l'attachament de la librairie, le paramètre UTI_ID
et les déclencheurs référencés depuis la librairie d'objets.
Chaque écran de l'application doit avoir un paramètre :PARAMETER.UTI_ID qui contient le code utilisateur ainsi qu'un appel à la fonction du package de la librairie placé dans le trigger WHEN-NEW-FORM-INSTANCE : PKG_COULEURS.Change_couleur ;
La librairie COULEURS.PLL doit être attachée à chaque forme.
L'idéal est de référencer vos écran à partir de FORM_REF.FMB
Conception d'un nouvel écran
Si vous partez de zéro, le plus simple est de faire une copie de la forme de référence comme base de développement du nouvel écran.
Si vous vous appuyez déjà sur une forme de référence, glissez le groupe d'objets de la librairie d'objets dans la section Groupes d'objets de votre forme de référence.
Faites un attachement par Référence plutôt que par Copie et attachez la librairie COULEURS.PLL
Si vous générez vos écrans depuis Oracle Designer, indiquez la forme de référence dans la propriété Form Template ainsi que la librairie objets dans la propriété Object Library Template.
4.5. La librairie d'objets contenant la référence des éléments constitutifs
OLB_COULEURS.OLB
Ces éléments sont regroupés dans un groupe d'objets nommé GRP_COULEURS
4.6. Le menu Forms pour lancer l'écran de modification des couleurs
MENU_REF.MMB
Il est attaché à la forme TEST_COULEURS et contient l'option Changer les couleurs dans le menu Edition
Declare
pl_id PARAMLIST;
pl_name VARCHAR2(10);
BEGIN-- Création de la liste de paramètres --
pl_name := 'temp';
pl_id := get_parameter_list(pl_name);
IFNOT ID_NULL(pl_id) THEN
destroy_parameter_list(pl_id);
ENDIF;
pl_id := create_parameter_list(pl_name);
IF ID_NULL(pl_id) THEN
MESSAGE('Erreur : Echec de l''exécution de la procédure PL/SQL associée au bouton');
RAISE FORM_TRIGGER_FAILURE;
ENDIF;
-- Passage du code utilisateur --
add_parameter(pl_id, 'UTI_ID', TEXT_PARAMETER,name_in('PARAMETER.UTI_ID'));
-- Appel de l'écran de choix des couleurs --
call_form('COULEURS', HIDE, DO_REPLACE, NO_QUERY_ONLY, SHARE_LIBRARY_DATA,pl_id);
-- Prise en compte immédiate des nouvelles couleurs --
PKG_COULEURS.Change_couleur ;
IFNOT form_success THEN
MESSAGE('Erreur : Appel de l''application Forms impossible COULEURS');
RAISE FORM_TRIGGER_FAILURE;
ENDIF;
END;
5. Indications sur la fonction de colorisation
Les items saisissables sont indiqués par une couleur de fond blanc
(Il est inutile d'utiliser des Display_Item pour les champs non modifiables.
En effet ceux-ci sont non naviguables. Par conséquent on ne peux pas y faire entrer le curseur pour faire défiler le contenu,
ni pour des opérations de copier-coller. Utilisez plutôt des Text_Item dont les propriétés INSERT et UPDATE sont positionnées à FALSE)
Les items non saisissables sont indiqués par une couleur de fond gris
Les items obligatoires sont indiqués par une invite en caractères gras.
Si vous utilisez une charte graphique particulière pour mettre en relief certains composants ( Items de totalisation soulignés par une couleur particulière, montants négatifs colorés en rouge, etc.) Il faut indiquer à la procédure de colorisation de ne pas traiter ces éléments.
Pour cela, il suffit de faire précéder le texte de la propriété TOOLTIP (Bulle d'information) des 3 caractères : NCC
Ceux-ci seront bien évidemment éliminés pour un affichage correct à l'exécution
6. Installation du matériel
Copier et décompresser le fichier
forms_couleurs.zip (130 Ko)dans un répertoire de votre station de travail
Adapter la base de registre pour faire pointer Forms sur ce répertoire (FORMS90_PATH)
Créer la table UTIL_PREFS et insérer la ligne de l'utilisateur 0
Compiler et générer un exécutable de la librairie COULEURS.PLL
Compiler et générer un exécutable du menu MENU_REF.MMB
Compiler les formes COULEURS.FMB et TEST_COULEURS.FMB
Exécuter la forme TEST_COULEURS
Cliquer l'option Changer les couleurs du menu Edition
Modifier les couleurs des objets, enregister, quitter
De retour dans l'écran TEST_COULEURS, les nouvelles préférences sont appliquées
7. Exercice
Un exercice intéressant consisterait à ajouter la couleur du mode Enter-Query à la table des préférences.
La réalisation de cette évolution impose les modifications suivantes :
Ajout d'une colonne dans la table UTIL_PREFS
Modification de l'écran de sélection des couleurs pour prendre en compte cette nouvelle colonne
Modification de la procédure PKG_COULEURS.Change_couleur pour définir une variable de package supplémentaire et adapter l'attribut visuel correspondant (VA_CURRENT_RECORD)
Remerciements
Chaleureux remerciements à Developpez.com et l'équipe SGBD
Responsable bénévole de la rubrique Oracle : Vincent Rogier - Contacter par EMail :