Handler


Handler aehneln den eben besprochenen Routinen. Der Unterschied liegt im Aufruf. Ein Handler wird von einem anderen Programm aufgerufen. Man kann also auf Befehle von aussen reagieren. Man nennt diesen Vorgang, bei welchem Handler fuer eine bestimmte Befehle aus anderen Applikationen eingerichtet werden, das Anhaengen von Skripten an eine Applikation.


Syntax


( on | to ) BefehlsName ¬
[ [ of ] DirekteParameterVariable ] ¬
[ given Titel:ParameterVariable ¬
[, given Titel:ParameterVariable ] ... ] ¬
[ global Variable [, Variable ] ... ]
[ local Variable [, Variable ] ... ]
[ Anweisung ] ...
end [ BefehlsName ]


Idle-Handler


Man kann ein Skriptprogramm mit der Option "Nicht automatisch beenden" absichern. Nach Ausfuehrung aller Anweisungen bekommt ein solches Programm einen Idle-Handler. In dem Idle-Handler koennen also Aktionen angewiesen werden, die im Ruhezustand eines Skriptprogramms ausgeführt werden sollen.


Beispiel:

property theFolder : 0
property theDate : 0

if theFolder = 0 then
   set theFolder to choose folder
   set theData to modification date of ¬
     (info for theFolder)
end if

on idle
   set theNewDate to modification date of ¬
     (info for theFolder)
   if theNewDate ­ theDate then
     set theDate to theNewDate
     tell me
     activate
     display dialog ¬
       ("Der Ordner " & (theFolder as string) & ¬
        " wurde geaendert!")
     end tell
   end if
  
   return 5

  end idle


Ein Idle-Handler wird vom Finder immer wieder aufgerufen. Die Zahl die returniert wird, ist die Anzahl der Sekunden nach denen der Handler wieder aufgerufen wird...


Open-Handler


Hiermit macht man sein Skriptprogramm zu einem Droplet. Droplets sind Applikationen, auf die im Finder Gegenstaende gezogen werden koennen und die damit die Applikation oeffnen. Das was auf das Skript gezogen wurde, wird dem Skript als direkter Parameter zugeteilt. Dies ist immer eine Liste.


Beispiel:

property theFolder : 0
property theDate : 0

if theFolder = 0 then
   set theFolder to choose folder
  set theDate to modification date of ¬
     (info for theFolder)
end if

on open theFileList
   set theItem to item 1 of theFileList
   if folder of (info for theItem) then
     set theFolder to theItem
     set theDate to modification date of ¬
       (info for theFolder)
   else
     display dialog ¬
       ¬
       "Bitte ziehen Sie nur einen Ordner auf das Symbol" buttons {"OK"} ¬
     default button 1
   end if
end open

on idle
   set theNewDate to modification date of ¬
   (info for theFolder)
   if theNewDate ­ theDate then
   set theDate to theNewDate
   tell me
     activate
     display dialog ("Der Ordner " & ¬
     (theFolder as string) & ¬
     " wurde geändert!")
     end tell
   end if
   return 5
end idle


Run-Handler



Beim Run-Handler unterscheidet man zwischen zwei Arten: dem ausdruecklichen und dem indirekten Run-Handler. Jedes Skript hat einen Run-Handler. Indirekt ist dieser, wenn nicht im Skript explizit ein Run-Handler angegeben wird.


Beispiel:

property theFolder : 0
property theDate : 0

on run
  if theFolder = 0 then
     set theFolder to choose folder
     set theDate to modification date ¬
       of (info for theFolder)
  end if
end run

on open theFileList
   set theItem to item 1 of theFileList
   if folder of (info for theItem) then
     set theFolder to theItem
     set theDate to modification date of ¬
       (info for theFolder)
   else
     display dialog ¬
       "Bitte ziehen Sie nur " & ¬
       "einen Ordner auf das " & ¬
       ¬
       "Symbol" buttons {"OK"} ¬
     default button 1
   end if
end open

on idle
   set theNewDate to modification date of ¬
   (info for theFolder)
   if theNewDate ­ theDate then
     set theDate to theNewDate
     tell me
     activate
     display dialog ¬
       ("Der Ordner " & ¬          (theFolder as string) &¬
         " wurde geändert!")
       end tell
     end if
     return 5
end idle