Prérequis▲
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
I. 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 ;
- la manipulation des attributs visuels ;
- l'appel d'un écran depuis un menu ;
- la 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 ;
- un écran Forms de sélection des couleurs ;
- une librairie d'objets ;
- un écran de test.
L'intégralité de ce matériel est téléchargeable ici et libre de tout utilisation, déploiement et modification.
II. Principe▲
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.
III. 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 encadrements ne sont pas modifiables.
IV. Description des composants▲
IV-A. La table des préférences utilisateurs▲
CREATE
TABLE
UTIL_PREFS
(
COD_UTIL NUMBER
(
5
)
PRIMARY
KEY
,
C_FOND VARCHAR2
(
20
)
,
C_LIBELLE VARCHAR2
(
20
)
,
C_CADRE VARCHAR2
(
20
)
,
C_BOUTON VARCHAR2
(
20
)
,
C_TBOUTON VARCHAR2
(
20
)
,
C_CURREC VARCHAR2
(
20
)
,
C_TCURREC VARCHAR2
(
20
)
)
;
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.
INSERT
INTO
UTIL_PREFS (
COD_UTIL, C_FOND, C_LIBELLE, C_CADRE, C_BOUTON, C_TBOUTON, C_CURREC, C_TCURREC )
VALUES
(
0
, 'r128g128b192'
, 'r255g255b64'
, 'r128g255b255'
, 'r255g192b128'
, 'r64g64b192'
, 'r128g255b255'
, 'r128g128b255'
)
;
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).
IV-B. 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.
IV-C. 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).
Le package PKG_COULEURS
PACKAGE
PKG_COULEURS IS
PROCEDURE
change_couleur;
PROCEDURE
set_block_couleurs_libelles;
PROCEDURE
set_bouton_couleur;
PROCEDURE
set_current_record;
GC$C_FOND UTIL_PREFS.C_FOND%
Type
;
GC$C_LIBELLE UTIL_PREFS.C_FOND%
Type
;
GC$C_CADRE UTIL_PREFS.C_FOND%
Type
;
GC$C_BOUTON UTIL_PREFS.C_FOND%
Type
;
GC$C_TBOUTON UTIL_PREFS.C_FOND%
Type
;
GC$C_CURREC UTIL_PREFS.C_FOND%
Type
;
GC$C_TCURREC UTIL_PREFS.C_FOND%
Type
;
END
;
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 multilignes(RECORDS_DISPLAYED > 1).
LC$Block
:=
get_form_property(
NAME_IN(
'System.Current_Form'
)
, FIRST_BLOCK )
;
while
LC$Block
is
not
null
Loop
-- pour chaque block --
LN
$NbRec :=
get_block_property(
LC$BLOCK
, RECORDS_DISPLAYED)
;
If
Nvl
(
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
LC$Block
:=
get_form_property(
NAME_IN(
'System.Current_Form'
)
, FIRST_BLOCK )
;
set_va_property() ;
pour affecter aux différents attributs visuels les couleurs de l'utilisateur
get_block_property();
pour se positionner sur le premier item
lc$itemdeb :=
get_block_property(
LC$BLOCK
, FIRST_ITEM)
;
get_item_property();
pour tester le type de l'item
If
GET_ITEM_PROPERTY(
LC$Item , ITEM_TYPE)
in
(
'CHECKBOX'
,'RADIO GROUP'
)
then
set_item_property();
Pour appliquer les propriétés à l'item
set_item_property(
LC$item, VISUAL_ATTRIBUTE, 'VA_CHECKBOX'
)
;
set_canvas_property();
Pour appliquer les propriétés au canvas
set_canvas_property(
lc$canvas,VISUAL_ATTRIBUTE,'VA_FOND'
)
;
set_tab_page_property();
Pour appliquer les propriétés aux onglets
set_tab_page_property(
lc$tabcan,VISUAL_ATTRIBUTE,'VA_PAGE'
)
;
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$Block
is
not
null
Loop
-- pour chaque block --
lc$itemdeb :=
get_block_property(
LC$BLOCK
, FIRST_ITEM)
;
while
lc$itemdeb is
not
null
loop
-- pour chaque item --
lc$item :=
LC$BLOCK
||
'.'
||
lc$itemdeb ;
………………….
lc$itemdeb :=
get_item_property(
lc$item, NEXT_NAVIGATION_ITEM )
;
End
loop
;
LC$Block
:=
get_block_property(
LC$Block
, NEXTBLOCK )
;
End
loop
;
IV-D. Une Forme de référence contenant les attributs visuels, l'attachement 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 écrans à 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 objet dans la propriété Object Library Template.
IV-E. 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
IV-F. 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)
;
IF
NOT
ID_NULL(
pl_id)
THEN
destroy_parameter_list(
pl_id)
;
END
IF
;
pl_id :=
create_parameter_list(
pl_name)
;
IF
ID_NULL(
pl_id)
THEN
MESSAGE(
'Erreur : Échec de l''exécution de la procédure PL/SQL associée au bouton'
)
;
RAISE
FORM_TRIGGER_FAILURE;
END
IF
;
-- 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 ;
IF
NOT
form_success THEN
MESSAGE(
'Erreur : Appel de l''application Forms impossible COULEURS'
)
;
RAISE
FORM_TRIGGER_FAILURE;
END
IF
;
END
;
V. 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 navigables. Par conséquent on ne peut 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 trois caractères : NCC.
Ceux-ci seront bien évidemment éliminés pour un affichage correct à l'exécution
VI. 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
VII. 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