timer

jannold2

Membre confirmé
11 Avril 2007
55
0
39
Bonjour
je souhaiterais avoir l'équivalent d'un timer de VB en applescript studio :
en gros, toutes les 1 secondes le script doit afficher un mot, et ca doit s'arreter au clic d'un bouton

j'ai essayé (en réduisant volontairement le code dans ce message)

global continu

on clicked theobject
if theobject is "objet 1" then
set continu to true
repeat while continu
set text field "txt" to random number
delay 1
end repeat
else if the object is "objet 2" then
set continu to false
end if


mais ca ne marche pas. comment faire ? y a t'il un controle qui déclenche un evenement toutes les n secondes ? ou possibilité de lancer un thread ?

merci d'avance de répondre

thomas
 
Salut
As-tu essayé d'incorporer un handler du type on idle ?
Par exemple

On idle
beep (* ou tout autre chose ! comme par exemple ecrire dans un champ de texte un truc sorti d'une liste *)
return 1
end idle


Par défaut (c a d sans le return 1) ca bipe toutes les 30 sec. Return 1 fait biper toutes les secondes
 
oui effectivement c'est ca. je ne connaissais pas ce mot clé (je débute en ass)

pour utiliser on idle :
dans file owner du nib, activer la checkbox "idle"

puis
on idle theObject
...
end idle


le probleme c'est que le on idle s'exécute toujours. (on peut gérer ca bien entendu avec une condition au départ), seulement ca veut dire que idle tourne en boucle derriere continuellement meme s'il n'a l'air de rien faire dans le cas ou il se stoppe en début de procédure.
c'est dommage. N'y aurait t'il pas comme sur vb un timer.enabled = false ?
ou (j'imagine que la réponse est non ^^)
comment faire pour appeler un deuxieme fichier script de notre projet ? (qui pourrait intéragir avec les elements nib du premier)

merci en tout cas pour la réponse

Thomas
 
Bonsoir
Je crois qu'on à affaire à un petit malentendu : le "idle" d' AppleScript tourne effectivement toujours, mais il fait cela qu' on l'invoque ou non. En effet dans tout langage de programmation, le programmeur doit "de temps en temps" rendre la main au système d'exploitation pour que ce dernier fasse son boulot (de la gestion souris au rafraîchissement écran en passant par le garbage mémoire...). Jadis c'était au programmeur de faire ce travail, maintenant c'est le compilateur où l'interpreteur qui s'en charge.
D'ailleurs le " On Idle" laisse bien entendre que le Idle est toujours actif, simplement, on n'est pas obligé de l'utiliser.
Le Timer de VisualBasic, tout comme celui de RealBasic, fonctionne de la même façon, il va relever après chaque interruption système le compteur de Ticks du système, pour savoir où il en est dans le timing.
Maintenant, dans ton problème c'est à toi de placer le trap Idle dans le Handler de ton choix. En fait, tout reviens à créer un Handler équivalent au Timer/on/off de VB.