Créer une alerte personnalisée dans Director
(D5)
L'Xobjet choiceAlert permet l'appel depuis Director d'une
boîte de dialogue standard définie dans une
ressource de type ALRT. Mais pourquoi, direz-vous, utiliser
un Xobjet et ResEdit pour créer une boîte de
dialogue dans Director lorsqu'il suffit d'ouvrir une animation
dans une fenêtre (MIAW) ?
Nous répondrons que l'utilisation d'une ressource
ALRT garantit le respect en tout point du "Look and Feel"
macintosh puisque l'affichage des contrôles et la
gestion des événements utilisateur sont assurés
par le Dialog Manager. Si vous préférez partir
de copies d'écran retouchées et animées
en Lingo, d'accord ! Mais au moins ne refusez pas d'explorer
avec nous le bel enchevêtrement de ressources qu'exige
la création d'une alerte personnalisée...
Dans ResEdit, on crée un nouveau document ou fichier
de ressources vierge "TOUNEUF" pour le doter aussitôt
par la commande Create New resource du menu Resource. ResEdit
ouvre alors son sélecteur de types de ressources :
On choisit le type ALRT. ResEdit ajoute alors à
notre fichier de ressources un sélecteur de ressources
de type ALRT qui n'affiche qu'une seule ressource d'ID 128
( le premier identifiant autorisé puisque les nombres
inférieurs sont réservés). ResEdit
ouvre aussi l'éditeur dédié de la nouvelle
ressource dans lequel nous pouvons définir ses dimensions
comme aussi choisir sa position à l'écran.
Nous nous faisons aider par la commande AutoPosition du
menu ALRT.
La ressource ainsi créée ne définit
que la forme ou le contenant de notre alerte et pas son
contenu qui sera créé ailleurs. ResEdit le
sait bien qui associe immédiatement à notre
alerte une ressource DITL (Dialog/Alert Items List
ou liste des articles de l'alerte) à laquelle il
donne le même identifiant (que ce soit le même
est préférable mais pas nécessaire).
L'indication de cette association est entourée en
rouge sur notre copie d'écran :
On ferme l'éditeur d'ALRT d'ID 128 ainsi que le
sélecteur de ressources de ce type. Il nous faut
maintenant créer la resource de type DITL pour y
définir les éléments textes, icônes
et contrôles que l'alerte affichera.
Une deuxième fois, on appelle la commande Create
New Resource du menu Resource mais cette fois on choisit
le type DITL. ResEdit ajoute le type DITL au fichier "TOUNEUF"
et ouvre aussitôt la première (et la seule)
ressource de ce type dans un éditeur dédié.
Il attribue à cette ressource l'identifiant 128 par
défaut ce qui lui permettra d'être associée
à la ressource ALRT créée plus haut.
Nous pouvons désormais construire notre dialogue
par simple glisser-déposer d'objets pourvu toutefois
que nous respections quelques règles :
L'ordre de création des objets (contrôles,
zones de texte, icônes) détermine leur numérotation.
Cette numérotation est d'une importance capitale
pour la gestion de l'alerte : Le bouton par défaut
devra en effet avoir le numéro 1, ce sont ces numéros
également que le Dialog Manager retournera à
l'application lorsque l'utilisateur cliquera. ResEdit permet
de visualiser cette numérotation et de la modifier,
si besoin est, grâce à deux commandes du menu
DITL : Show Item Numbers et Select Item Number..
Une alerte contrairement aux dialogues (ressource DLOG)
ne peut afficher qu'un seul type de contrôle :
des boutons. On peut en revanche y disposer des éléments
décoratifs texte, images ou icône. Un fois
les objets glissés de la palette sur la fenêtre
de l'éditeur, on modifie leur aspect en double-cliquant
dessus. Pour les boutons, on saisit simplement leur intitulé
"Oui" et "Non" ici, de même pour les zones de texte
statique. Comme nous souhaitons que notre alerte affiche
une icône, après avoir glissé l'objet
sur la fenêtre de l'éditeur et double-cliqué
dessus, il nous faut noter l'identifiant proposé.
Notre icône (une autre ressource de type ICON qu'il
va falloir créer) devra avoir ce même identifiant
pour que l'alerte l'utilise. Il en serait de même
si nous souhaitions afficher une image : Il nous faudrait
glisser l'objet sur la fenêtre de l'éditeur
de DITL, noter l'identifiant proposé puis ajouter
au fichier "TOUNEUF" (par copier-coller d'une image) une
ressource de type PICT de même identifiant.
|
On a double-cliqué sur l'objet Icon après
l'avoir glissé sur la fenêtre de l'éditeur
de DITL. Dans la boîte de dialogue qui apparaît
alors, ResEdit propose l'identifiant 128 pour la ressource
qui sera utilisée à l'affichage.
La case à cocher "Enabled" indique le caractère
non sensible (non cliquable) de l'objet. Seuls les
boutons sont sensibles (Enabled) par défaut.
On ne change rien.
|
La ressource DITL associée à la ressource
ALRT est désormais créée. N'oublions
pas de créer maintenant la ressources de type ICON
dont la DITL a besoin !
Menu Resource/Create New Resource une dernière fois.
Dans le sélecteur de type on choisit ICON et l'on
fait joujou avec les outils de dessin :
À noter : si une ressource de type cicn (color
icon) de même identifiant se trouve dans le fichier,
le dialog manager lui donnera la priorité et l'affichera
à la place de la ressource ICON.
Voilà ! Notre alerte est maintenant terminée,
il ne nous reste plus qu'à l'utiliser dans Director
et ce grâce à l'xobjet choiceAlert. On quitte
ResEdit en enregistrant "TOUNEUF" et on lance Director.
Dans la fenêtre message afin de rendre l'Xobjet disponible,
nous saisissons l'instruction openXlib en indiquant à
Director le chemin et le nom de fichier exact du fragment
de code externe que nous voulons utiliser :
openxlib "Disque dur:desktop folder:choiceAlert"
Quelles sont les méthodes de choiceAlert ?
Passée à l'objet, la méthode globale
mDescribe fournit la liste des fonctions disponibles :
put choiceAlert(mdescribe)
-- Factory: choiceAlert ID:10701
-- choiceAlert - XObject
-- Bring up a multiple-choice alert box that you have previously
defined
-- in ResEdit or whatever. Returns 0 if no ALRT resource
loaded, or the number
-- of the chosen selection (corresponding with the DITL
item #)
-- Don't forget to open resource file first.
-- © 1994 (free use) Mark_Carolan@aapda.com.au or CompuServe
100242,1154
-- I mNew
-- create the XObject
-- II mDo, alertID
-- do it; bring up alert, using ALRT resource number alertID
--------
-- <Null>
Les sept premières lignes portent mention de l'auteur
et indiquent que choiceAlert est freeware. Les lignes suivantes
présentent une à une et de façon conventionnelle,
les méthodes utilisables pour choiceAlert. Chacune
de ces lignes est rédigée de la même
manière :
Le groupe de lettres initiales (capitales souvent) fournit
de indications sur le type que la fonction retourne (premier
caractère) et le type d'arguments qu'elle requiert
(tous les autres).
X indique que la fonction ne retourne aucune valeur
I désigne un entier (ou un booléen)
S une chaîne de caractères entre guillemets
plus rarement on rencontre dans ces listes :
L pour une liste d'entiers (ou un long)
P pour une image
O pour une instance d'Xobjet
V pour une variable
Nous devons commencer par créer une instance de
l'objet en utilisant la méthode globale mNew. L'instance
(ou enfant) doit recevoir un nom de baptême nous permettant
de l'invoquer : nous allons utiliser une variable pour nommer
celle-ci.
set CRAPO to choiceAlert(mNew)
La méthode mNew est passée à l'Xobjet.
Un objet-enfant est créé en mémoire,
stocké dans la variable CRAPO. La méthode
utilisée renvoie un entier code d'erreur (le "i").
Si tout se passe bien le résultat est 0
Notre objet CRAPO sera bien incapable d'appeler une quelconque
alerte personnalisée si nous ne lui rendons pas accessible.
Le fichier "TOUNEUF" contient les ressources nécessaires.
Director sait ouvrir un fichier de ressources :
openResFile "disque dur:desktop folder:TOUNEUF"
Le fichier de ressources est dès lors accessible.
L'objet CRAPO est prêt. Toujours avec les Xobjets
la structure est la suivante : à l'objet on passe
une méthode et ses arguments entre parenthèses.
Ici il faut indiquer avec la méthode mDo, le numéro
d'identifiant de la ressource ALRT : 128
crapo(mDo, 128)
Apparaît notre belle alerte arborant son icône.
L'utilisateur peut alors faire son choix et fermer par là
même le dialogue.
C'est le Dialog Manager du Mac et non pas notre objet qui
retourne ce choix à l'application appelante, et ce
sous la forme d'un entier numéro du contrôle
activé ou bouton cliqué. Si nous souhaitons
connaître le choix de l'utilisateur, nous saisissons :
put the result
-- 2
Dans un script toutefois, ce résultat retourné
par le Dialog Manager sera plus certainement stocké
dans une variable. Dans un script on procédera ainsi :
set CHOIX to crapo(mDo, 128)
La variable CHOIX reprenant dès lors la valeur retournée,
put CHOIX
-- 2
L'utilisateur a cliqué sur le deuxième bouton.
Essai concluant !!!
Enfin rappelons la méthode permettant de se débarrasser
de l'objet CRAPO et libérer la mémoire :
CRAPO(mDispose)
De fermer le fichier de ressources :
CloseResFile "disque dur:desktop folder:TOUNEUF"
Un vérification n'est jamais inutile. Demandons
si CRAPO n'existe plus.
put crapo
-- Void
L'xobjet choiceAlert est téléchargeable sur
le site ftp Sharedcast : ftp://ftp.sharedcast.com/pub/XObjs/
|