| Un des problèmes des scripts lancés depuis le menu script dune application, ce sont les allez-retour lorsque le bloc tell application ... end tell est employé pour atteindre lapplication elle-même. Il ne faudrait pas lemployer, puisque par défaut le script est lancé depuis lapplication, il se trouve donc déjà dans lenvironnement de cette application, donc à chaque appel il sappelle lui-même... ce qui cause des dysfonctionnements, souvent bloquant. Mais, me direz-vous, on ne peut pas écrire le script sans ce tell application ... end tell, sinon, à la compilation, les termes employés ne sont pas reconnus ... alors, comment faire ? Il existe un moyen: se sont les Raw Apple Events. Prenons un exemple avec le bout de script suivant : if NCell "Direct" then tell application "AppleWorks" if (document kind of document 1) as text is "SS " then set Aref to a reference to spreadsheet of document 1 else if (document kind of document 1) as text is "WP " then if "§" is in text body of document 1 then set InText to true set Aref to a reference to spreadsheet of spreadsheet frame 1 of drawing area of document 1 else set Aref to a reference to spreadsheet of spreadsheet frame 1 of drawing area of document 1 end if set AtraduirT to (cell ATraduir of Aref) as text end tell else set AtraduirT to ATraduir end if En réalité un mot comme "document kind" est interprété, sa véritable écriture est : «class pDcK». Évidemment «class pDcK» nest connu que de lapplication AppleWorks et ne peut être interprété que sous AppleWorks. Cest pourquoi lors de lécriture dun programme, pour que le mot document kind dise quelque chose au compilateur, il faut spécifier à qui il appartient. Vous avez deviné: cest le rôle du tell application ... end tell qui permet au compilateur de dire que document kind veut dire «class pDcK». Mais rien ne nous empêche décrire directement «class pDcK», mais dans ce cas cest à nous que cela ne veut rien dire. Toutefois lénorme avantage du Raw Apple Event, cest que le compilateur sait ce que cela veut dire et donc accepte une phrase comme : if («class pDcK» of document 1) as text is "SS " then , alors quune phrase comme : if (document kind of document 1) as text is "SS " then , produira un message derreur, il faudra impérativement linclure dans un tell application "AppleWorks" ... end tell. Si on reprend notre bout de script en Raw Apple Events cela nous donne : if NCell "Direct" then if («class pDcK» of document 1) as text is "SS " then set Aref to a reference to «class cSS » of document 1 else if («class pDcK» of document 1) as text is "WP " then if "§" is in «class pTxt» of document 1 then set InText to true set Aref to a reference to «class cSS » of «class cGss» 1 of «class cdrw» of document 1 else set Aref to a reference to «class cSS » of «class cGss» 1 of «class cdrw» of document 1 end if set AtraduirT to («class ccel» ATraduir of Aref) as text else set AtraduirT to ATraduir end if Et là nous constatons dune part que le tell application AppleWorks à disparu et dautre part que le compilateur accepte lintégralité du script. Bien évidemment un tel script ne pourra fonctionner que par lappel de celui-ci depuis AppleWorks. Là, une question de taille reste à résoudre : comment je sais que document kind veut dire «class pDcK» ? cest inscrit nulle part ! Pour réaliser ce tour de passe passe il faut : [ également expliqué dans lAppleScript Language Guide for AppleScript 1.3.7, du 5 mai 1999 page 126. Il faut toutefois remplacer 2. Save the script as text and quit .. par 2. Save the script as script compiled and quit .... ] 1°) Écrire le script normalement (avec les tell application ... end tell), le tester etc.. 2°) Lenregistrer en script compilé. Dupliquer ce script et lui donner un autre nom, par exemple le premier sera nommé : Script avec Tell et le second Script sans Tell. Quitter l Éditeur de script. 3°) Mettre lapplication en question (lapplication seulement suffira) sur une cartouche zip par exemple et supprimer cette application du disque dur. Éjecter le cartouche zip. 5°) Ouvrir Script sans Tell: là l Éditeur de script vous demande où se trouve lapplication (dans notre exemple AppleWorks). Choisir nimporte quelle application, SimpleText etc... 6°) Le passage en Raw Apple Event est fait. Il faut maintenant supprimer tous les tell application (ne pas oublier les end tell), compiler, sauvegarder. 7°) On | |