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/