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/
<
Sommaire
|