home *** CD-ROM | disk | FTP | other *** search
/ CD-ROM Magazin 1995 July/August / CDROMMAG.ISO / asym / prg / mtb30 / advanced.ats next >
Encoding:
Text File  |  1994-10-03  |  64.3 KB  |  2,036 lines

  1. ACTION    "╓ffnen einer Datei mit dem Standard-Dialogfeld ╓ffnen"
  2. BEHAVIOR    "╓ffnet eine vom Benutzer ausgewΣhlte Datei."
  3. CATEGORY    Dateien
  4. HANDLERS    buttonClick, buttonUp, buttonDown, buttonDoubleClick, rightButtonDown, rightButtonUp, rightButtonDoubleClick
  5. ARG    Beschrift    is    "╓ffnen"
  6. ARG    Hilfetext    is    "Zu ÷ffnende Datei auswΣhlen"
  7. ARG    Erweit    is    "*.txt"
  8. ARG    Verzeich    is    "."
  9. {
  10.     linkDll sysToolBookDirectory & "tb30dlg.dll"
  11.         string openDlg(string,string,string,string)
  12.     end    linkDLL
  13.     
  14.     get openDlg("$$Verzeich","$$Erweit","$$Hilfetext","$$Beschrift")
  15.     if it <> null    
  16.         clear sysError
  17.         openfile it
  18.         if sysError <> null
  19.             request "Die Datei "&&it&&"konnte nicht ge÷ffnet werden"
  20.         end if
  21.     end if
  22.     unlinkDLL sysToolBookDirectory & "tb30dlg.dll"
  23. }
  24.  
  25. SCRIPT "Einfⁿgen einer Textzeile"
  26. BEHAVIOR "Fⁿgt eine einzelne Textzeile ein und behΣlt die Sortierreihenfolge des Felds bei."
  27. CATEGORY Text
  28. {
  29. to get ZeileEinfⁿgen txt,neueZeile
  30.     if txt is null
  31.         return neueZeile
  32.     end
  33.     set Anfang to 1  -- erste Textzeile
  34.     set tlc to textlinecount(txt)
  35.     set Ende to tlc -- letzte Textzeile
  36.     local Einfⁿgestelle
  37.     while Anfang <= Ende 
  38.         set Mittelpunkt to (Anfang+Ende) div 2 
  39.         set ZeileMitte to textline Mittelpunkt of txt
  40.         conditions
  41.             when neueZeile < ZeileMitte as text
  42.                 -- untersucht Werte, die niedriger als der aktuelle Mittelpunkt 
  43.                 --sind
  44.                 set Ende to Mittelpunkt-1
  45.                 set Einfⁿgestelle to Mittelpunkt
  46.             when neueZeile > ZeileMitte as text
  47.                 -- untersucht Werte, die gr÷▀er als der aktuelle Mittelpunkt 
  48.                 --sind
  49.                 set Anfang to Mittelpunkt+1
  50.                 set Einfⁿgestelle to Mittelpunkt+1
  51.             else
  52.                 -- das Element existiert bereits
  53.                 set Einfⁿgestelle to Mittelpunkt
  54.                 break while
  55.         end
  56.     end
  57.     if Einfⁿgestelle > tlc
  58.         put neueZeile before textline Einfⁿgestelle of txt
  59.     else
  60.         put neueZeile&crlf before textline Einfⁿgestelle of txt
  61.     end
  62.     return txt
  63. end
  64. }
  65.  
  66. SCRIPT "Abrufen einer zuletzt verwendeten Datei"
  67. BEHAVIOR "Ruft den Namen einer zuletzt verwendeten Datei. Diese Dateien werden unten im Menⁿ Datei auf Autorenebene aufgelistet."
  68. CATEGORIES Dateien
  69. {
  70. to handle loadFile mAlias      -- evtl. benutzerdefinierte Botschaft
  71. -- mAlias wird von menuItemSelected ⁿbergeben. 
  72. -- Siehe Kapitel 13 des ToolBook-Benutzerhandbuchs fⁿr ein Beispiel
  73.         linkDLL sysToolBookDirectory & "tb30WIN.DLL"
  74.             STRING     getIniVar(STRING,STRING,STRING)
  75.                            -- Abschnitt, Element, Datei
  76.         end linkDLL
  77.         
  78.         get getIniVar("files", mAlias, "toolbook.ini") 
  79.         request it
  80. --        go to page 1 of book it    -- Standardverhalten
  81.         unlinkDLL sysToolBookDirectory & "tb30WIN.DLL"
  82. end loadFile
  83. }
  84.  
  85. ACTION    "Anzeigen oder Verbergen von Objekten mit ▄bergang"
  86. BEHAVIOR    "Zeigt ein Objekt mit einem ▄bergangseffekt an"
  87. CATEGORIES    Effekte
  88. ARG Geschw  oneOf  "slow,normal,fast" is "normal"
  89. ARG Effekt oneOf     "blinds,dissolve,drip,fade,iris,push,puzzle,rain,slide,spiral,split,tear,turnPage,wipe,zoom"  is "fade"
  90. ARG myObjekte is     "objects of this page"     help "Legt eine Referenz ($$myObjekte) auf ein Objekt oder Objekte fest."
  91. ARG Show oneOf "show,hide" is "show"    help "Zeigt verborgene Objekte an oder verbirgt angezeigte Objekte."
  92.  
  93. {
  94. -- Dieses Skript funktioniert einwandfrei, es gibt aber so viele Variationen, vielleicht wollen Sie ein bi▀chen experimentieren.
  95.       set sysSuspendMessages to TRUE
  96.     linkDLL "USER"
  97.         int LockWindowUpdate(WORD)
  98.     end    linkDLL
  99.     set pObjListe to $$myObjekte
  100.     if pObjListe is Null and object of self is not in "page,background,book"
  101.         set pObjListe to self
  102.     end if
  103.     set sysLockScreen to true
  104.     while (pObjListe is not NULL)
  105.         pop pObjListe
  106.         $$Show it
  107.     end
  108.  
  109.  -- Setzt sysLockScreen zurⁿck, Windows Paint-Botschaft ausschalten:
  110.      get LockWindowUpdate(sysClientHandle)
  111.     sysLockScreen = false
  112.     get lockWindowUpdate(0)
  113.  
  114.     transition "$$Effekt $$Geschw" to this page
  115.     unlinkDLL "USER"
  116. }
  117.  
  118. SCRIPT    "Umwandeln von Textzeilen in eine Liste"
  119. BEHAVIOR    "Diese Behandlungsroutine wandelt eine durch CRLF-getrennte Zeichenfolge in eine durch Kommas getrennte Liste."
  120. CATEGORIES    Text
  121. {
  122. to get TextzeilenInListe txt
  123.     local STACK Lst
  124.     step i from textlinecount(txt) to 1 by - 1
  125.         push textline i of txt onto Lst
  126.     end
  127.     return Lst
  128. end TextzeilenInListe
  129. }
  130.  
  131. SCRIPT "Anzeigen von Werten aus einer 1D-Matrix"
  132. BEHAVIOR "Zeigt den Inhalt einer eindimensionalen Matrix an."
  133. CATEGORY Daten
  134. {
  135. to handle Abfragen1DMatrix x[]
  136.     local RⁿckWert
  137.     set d to dimensions(x)
  138.     step i from 1 to d
  139.         put x[i] after RⁿckWert
  140.         if i < d
  141.             put crlf after RⁿckWert
  142.         end    if
  143.     end    step
  144.     request RⁿckWert
  145. end    Abfragen1DMatrix
  146. }
  147.  
  148. SCRIPT "Anzeigen von Werten aus einer 2D-Matrix"
  149. BEHAVIOR "Zeigt den Inhalt einer zweidimensionalen Matrix an."
  150. CATEGORY Daten
  151. {
  152.   to handle Abfragen2DMatrix x[][]
  153.     local RⁿckWert
  154.     set d to dimensions(x)
  155.     step i from 1 to item 1 of d
  156.         step j from 1 to item 2 of d
  157.             put x[i][j] after RⁿckWert
  158.             if j < item 2 of d
  159.                 put tab after RⁿckWert
  160.             end    if
  161.         end    step
  162.         if i < item 1 of d
  163.             put crlf after RⁿckWert
  164.         end    if
  165.     end    step
  166.     request RⁿckWert
  167.  end Abfragen2DMatrix
  168. }
  169.  
  170. SCRIPT "Sortieren einer 1D-Matrix"
  171. BEHAVIOR "Dies ist die OpenScript-Version der standarmΣ▀igen QuickSort-Operation."
  172. CATEGORIES Daten
  173. {
  174. -- Die nΣchsten drei Behandlungsroutinen 
  175. -- fⁿhren eine standardmΣ▀igen QuickSort-
  176. -- Operation durch.
  177. to handle QuickSort fMatrix[] by reference
  178.     system s_nichtVertauschen
  179.     set s_nichtVertauschen to 0
  180.     send Quicksrt fMatrix, 1, dimensions ( fMatrix )
  181. end    QuickSort
  182.  
  183. to handle Quicksrt fMatrix[] by reference, Min, Max
  184.     system  s_nichtVertauschen
  185.     if Max > Min 
  186.         send Vertauschen  fMatrix, Min, ((Min+Max) div 2)
  187.         set Lst to Min
  188.         step i from (Min+1) to Max
  189.             if fMatrix[i] < fMatrix[Min] as text
  190.                 increment Lst
  191.                 send Vertauschen fMatrix, Lst, i
  192.             else
  193.                 increment s_nichtVertauschen
  194.             end
  195.         end 
  196.         send Vertauschen fMatrix,Min,Lst 
  197.            send Quicksrt fMatrix, Min, Lst-1
  198.         send Quicksrt fMatrix, Lst+1,Max
  199.        end
  200. end    Quicksrt
  201.  
  202. to handle Vertauschen fMatrix[] by reference, x, y
  203.     local Temp
  204.     set Temp to fMatrix[x]
  205.     set fMatrix[x] to fMatrix[y]
  206.     set fMatrix[y] to Temp
  207. end    Vertauschen
  208. }
  209.  
  210. SCRIPT "Sortieren einer 2D-Matrix"
  211. BEHAVIOR "Dies OpenScript-Version der standardmΣ▀igen QuickSort-Operation wurde fⁿr zwei Dimensionen angepa▀t."
  212. CATEGORIES Daten
  213. {
  214. -- Nicht vergessen, da▀ Matrizen nach Referenz nicht nach Wert ⁿbergeben werden
  215. --
  216. to handle QuickSort2D fMatrix[][] by reference,SortSpalte,DTyp
  217.     system stbk_nichtVertauschen
  218.  
  219.     set stbk_nichtVertauschen to 0
  220.     send QuickSrt2D fMatrix, 1, item 1 of dimensions(fMatrix),SortSpalte,DTyp
  221. end
  222.  
  223. to handle QuickSrt2D fMatrix[][] by reference, Min, Max,SortSpalte,DTyp
  224.     system  stbk_nichtVertauschen
  225.     if Max > Min 
  226.         send Vertauschen  fMatrix, Min, ((Min+Max) div 2)
  227.         set Lst to Min
  228.         step i from (Min+1) to Max
  229.             conditions
  230.                 when DTyp is "text"
  231.                     set test to fMatrix[i][SortSpalte] < fMatrix[Min][SortSpalte] as text
  232.                 when DTyp is "date"
  233.                     set Test to fMatrix[i][SortSpalte] < fMatrix[Min][SortSpalte] as date
  234.                 else
  235.                     set Test to fMatrix[i][SortSpalte] < fMatrix[Min][SortSpalte] as number
  236.             end
  237.             if Test
  238.                 increment Lst
  239.                 send Vertauschen fMatrix, Lst, i
  240.             else
  241.                 increment stbk_nichtVertauschen
  242.             end if
  243.         end step
  244.         send Vertauschen fMatrix,Min,Lst 
  245.            
  246.            send QuickSrt2D fMatrix, Min, Lst-1,SortSpalte,DTyp
  247.         send QuickSrt2D fMatrix, Lst+1,Max,SortSpalte,DTyp
  248.        end
  249. end
  250.  
  251. to handle Vertauschen fMatrix[][] by reference, a, b
  252.     local Temp
  253.     step i from 1 to item 2 of dimensions (fMatrix)
  254.         set Temp to fMatrix[a][i]
  255.         set fMatrix[a][i] to fMatrix[b][i]
  256.         set fMatrix[b][i] to Temp
  257.     end
  258. end
  259. }
  260.  
  261. SCRIPT "Verwenden einer RECT-Struktur"
  262. BEHAVIOR  "Die nachfolgenden Funktionen sind nⁿtzlich zum Arbeiten mit Windows-Funktionen, die eine RECT-Struktur erfordern oder liefern."
  263. CATEGORIES Daten
  264. {
  265. -- Lst ist eine Liste von 4 ganzen Zahlen
  266. -- pRect ist ein gesperrter Zeiger auf 8 Byte
  267. to handle setRect Lst,pRect
  268.     step i from 0 to 6 by 2
  269.         pop Lst
  270.         get pointerInt(i,pRect,it)
  271.     end
  272. end
  273.  
  274. -- pRect ist ein gesperrter Zeiger auf 8 Byte
  275. to get getRect pRect
  276.     local RⁿckWert
  277.     step i from 6 to 0 by -2
  278.         push pointerInt(i,pRect) onto RⁿckWert
  279.     end
  280.     return RⁿckWert
  281. end
  282. }
  283.  
  284. SCRIPT "Verwenden von Windows-Zeigern"
  285. BEHAVIOR "Die folgenden Funktionen sind nutzlich, wenn Sie einen Zeiger zum Aufrufen einer Windows-Funktion zuordnen mⁿssen."
  286. CATEGORIES Windows
  287. {
  288. -- die link-Anwendungen fⁿr die nachfolgenden Funktionen
  289. to handle linkMemFunctions
  290.     linkDLL "KERNEL"
  291.         WORD     GlobalAlloc(WORD,DWORD)
  292.         WORD     GlobalFree(WORD)
  293.         WORD     GlobalHandle(WORD)
  294.         POINTER GlobalLock(WORD)    
  295.         WORD     GlobalUnlock(WORD)
  296.     end linkDLL
  297. end    linkMemFunctions
  298.  
  299. to get getWinPointer nGr÷▀e
  300.     local word hMem
  301.     local RⁿckWert
  302.     hMem = GlobalAlloc(66,nGr÷▀e)
  303.     return GlobalLock(hMem)
  304. end getWinPointer
  305.  
  306. to get freeWinPointer pMem
  307.     local word hMem, RⁿckWert
  308.     hMem = GlobalHandle(item 1 of pMem)
  309.     RⁿckWert = GlobalUnlock(hMem)
  310.     return GlobalFree(hMem)
  311. end    freeWinPointer
  312. }
  313.  
  314. ACTION    "Erstellen einer Matrix und Mischen der Werte"
  315. BEHAVIOR    "Erstellt eine Matrix, deren Elemente 1 bis $$Num (Num) per Zufall gemischt werden."
  316. CATEGORIES     Daten
  317. ARG    Num is    "52"    help    "Anzahl der zu mischenden Elemente angeben."
  318. {
  319.     local INT Ergebnis[$$Num]
  320.     local LOGICAL Tabelle[$$Num]
  321.  
  322.     set i to 1
  323.     while i <= $$Num
  324.         set x to random($$Num)
  325.         if Tabelle[x] is not true
  326.             set Tabelle[x] to true
  327.             set Ergebnis[i] to x
  328.             increment i
  329.         end    if
  330.     end while
  331. }
  332.  
  333. ACTION    "Suchen nach Text in einem Listenfeld"
  334. BEHAVIOR    "Durchsucht ein Listenfeld (Einzel- oder Mehrfachauswahl) nach einem angegebenen Suchtext und wΣhlt die Zeile mit dem Suchtext aus."
  335. CATEGORIES    Text
  336. ARG    Suchtext    is "Nach welchem Text soll gesucht werden?" help "Geben Sie den Text hier an oder Σndern Sie das Skript entsprechend."
  337. ARG Feldname is "searchField" help "Name des zu durchsuchenden Listenfelds angegeben."
  338. {
  339.     set Suchtext to "$$Suchtext"
  340. --     Alternative:
  341. --     ask "Nach welchem Text soll gesucht werden" with \
  342. --    "$$Suchtext"
  343. --     if it is null or it is "cancel"
  344. --        break
  345. --    else
  346. --         set Suchtext to it
  347. --    end if        
  348.     set sysLockScreen to TRUE
  349.     set AltFT to fieldType of field "$$Feldname"
  350.     set fieldType of field "$$Feldname" to wordWrap
  351.     search for Suchtext
  352.     get item 3 of selectedTextState
  353.     set fieldType of field "$$Feldname" to AltFT
  354.      if it <> NULL
  355.         set selectedTextLines of field "$$Feldname" to it 
  356.         set scroll of field "$$Feldname" to it - 1 
  357.     else
  358.         request QUOTE & Suchtext & QUOTE && "wurde nicht gefunden."
  359.     end if
  360. }
  361.  
  362. SCRIPT "BeschrΣnken der LΣnge einer Eingabe"
  363. BEHAVIOR "Beim Drⁿcken einer Taste bestΣtigt diese Routine, da▀ die charCount des Feldtexts innerhalb der im Skript angegebenen Grenzen liegt."
  364. CATEGORY Daten
  365. {
  366. -- unterbindet die Eingabe einer Zeichenanzahl, die ⁿber das 
  367. -- Maximum liegt. Legen Sie diese Routine im Feld ab.
  368. to handle keyChar Taste
  369.     local INT MaxZeichenanzahl
  370.     local INT aktuelleAnzahl
  371.     MaxZeichenanzahl = 10
  372.     aktuelleAnzahl = charCount(my text)
  373.     if (aktuelleAnzahl >= MaxZeichenanzahl) \
  374.      or (keyPressed = keyEnter and aktuelleAnzahl >= \
  375.      MaxZeichenanzahl - 1)
  376.         beep 1
  377.     else
  378.         forward
  379.     end    if
  380. end    keyChar
  381. }
  382.  
  383.  
  384. SCRIPT "Aktivieren des ▄berschreibmodus fⁿr Feldtext"
  385. BEHAVIOR "Aktiviert das Umschalten zwischen Einfⁿge- und ▄berschreibmodus, wie bei vielen Textverarbeitungsprogrammen."
  386. CATEGORY Text
  387. {
  388. to handle keyDown Taste
  389.     system LOGICAL ▄berschreibFlag
  390.     if key is keyInsert
  391.         set ▄berschreibFlag to not ▄berschreibFlag 
  392.     end if
  393.     forward
  394. end    keyDown
  395.  
  396. to handle keyChar Taste
  397.     system LOGICAL ▄berschreibFlag
  398.     set sysLockScreen to true
  399.  
  400.     if ▄berschreibFlag and (key <> keyBack)
  401.         send clear
  402.     end if
  403.     forward
  404. end    keyChar
  405. }
  406.  
  407. ACTION    "Summe der Textzeilen in einem Textfeld"
  408. BEHAVIOR    "Dieses Skript addiert die Zahlen auf jeder Zeile im Textfeld $$Zahlen und legt das Ergebnis im Feld $$Summe ab."
  409. CATEGORIES    Mathe
  410. ARG    Zahlen    is    "Zahlen"    help "Der Name des Felds mit den zu addierenden Zahlen."
  411. ARG    Summe    is    "Summe"    help "Der Name des Felds, in dem die Summe angezeigt wird."
  412. {
  413.     set Summe to 0
  414.     step i from 1 to textLineCount(text of field "$$Zahlen")
  415.         set Temp to (textline i of text of field "$$Zahlen")
  416.         set Summe to Summe + Temp
  417.     end
  418.     put Summe into text of field "$$Summe"  
  419. }
  420.  
  421. SCRIPT "Berechnen des Sinus anhand von Punkten"
  422. BEHAVIOR "Berechnet den Sinus eines Winkels anhand von zwei Punkten und dem Standard-Koordinatensystem."
  423. CATEGORY Mathe
  424. {
  425. to get SinusVonPunkten x1,x2,y1,y2
  426.     x = abs(x2 - x1)
  427.     y = abs(y2 - y1)
  428.     conditions
  429.     when x = 0
  430.         r = 1 
  431.     when y = 0
  432.         r = 0
  433.     else
  434.     -- Formel fⁿr Sinus
  435.         r = y/sqrt(x^2 + y^2)
  436.     end conditions
  437.     if y2 < y1
  438.         r = -r
  439.     end if
  440.     return r
  441. end SinusVonPunkten
  442. }
  443.  
  444. SCRIPT "Berechnen den Kosinus anhand von Punkten"
  445. BEHAVIOR "Berechnet den Kosinus eines Winkels anhand von zwei Punkten und dem Standard-Koordinatensystem."
  446. CATEGORY Mathe
  447. {
  448. to get KosinusVonPunkten x1,x2,y1,y2
  449.     x = abs(x2 - x1)
  450.     y = abs(y2 - y1)
  451.     conditions
  452.     when x = 0
  453.         r = 0 
  454.     when y = 0
  455.         r = 1
  456.     else
  457.     -- Formel fⁿr Kosinus
  458.         r = x/sqrt(x^2 + y^2)
  459.     end conditions
  460.     if x2 < x1
  461.         r = -r
  462.     end if
  463.     return r
  464. end KosinusVonPunkten
  465. }
  466.  
  467. SCRIPT "Berechnen des Winkels zwischen Punkten" 
  468. BEHAVIOR "Liefert den Winkel zwischen einen Punkt eines Vektors (z.B. in einer Animation) und einem anderen Punkt (z.B. einem Mausklick)." 
  469. CATEGORY  Mathe
  470. to get Winkel Pos, Obj, Vektor 
  471.     -- Pos ist evtl. die Position des Mausklicks
  472.     -- Obj ist eine Objektreferenz auf einen Punkt eines Vektors (z.B. ein sich 
  473.     -- bewegendes Objekt), d.h. eine durch einen Punkt definierte Richtung
  474.     
  475.     -- . Vektor
  476.     --  \      . Pos
  477.      --   \    /    
  478.     --    \  /
  479.     --       . Obj
  480.     
  481.     -- Liefert den Winkel im Bogenma▀
  482.     system s_2PI,s_PIdiv2 
  483.     -- nur einmal berechnen
  484.     if s_2PI is null 
  485.         set s_2PI to 2 * PI
  486.     end if 
  487.  
  488.     if s_PIdiv2 is null 
  489.         set s_PIdiv2 to PI/2 
  490.     end if
  491.      
  492.     -- siehe "Ermitteln des Mittelpunkts eines Objekts"
  493.     set yMitte to objectCenter (Obj) 
  494.     pop yMitte into xMitte     
  495.     set yOffset to Pos 
  496.     pop yOffset into xOffset
  497.     -- Die nΣchsten zwei als Systemvariablen, weil 
  498.     -- sie wahrscheinlich geΣndert werden
  499.     set yVek to Vektor
  500.     pop yVek into xVek 
  501.     --     siehe  "Berechnen des Kosinus von Punkten" und 
  502.     --     "Berechnen des Sinus von Punkten"
  503.     set MausSin to (SinusVonPunkten(xMitte,yMitte,xOffset,yOffset)) 
  504.     set MausKos to (KosinusVonPunkten(xMitte,yMitte,xOffset,yOffset))
  505.     set vecSin to (SinusVonPunkten(xMitte,yMitte,xVek,yVek)) 
  506.     set vecCos to (KosinusVonPunkten(xMitte,yMitte,xVek,yVek))
  507.     
  508. --    angle between them is: arctan(x2/y2) - arctan(x1/y1)
  509.     set Winkel to ((aTan2(vecCos,vecSin)) - (aTan2(MausKos,MausSin)) + s_PIdiv2) -- adjust quadrant
  510.  
  511.  -- Quadrant ermitteln        
  512.     if Winkel > PI
  513.         if Winkel > s_2PI
  514.             set Winkel to Winkel mod s_2PI
  515.         else
  516.             set Winkel to (Winkel mod PI) - PI
  517.         end if
  518.     end if
  519.     return Winkel
  520. end Winkel
  521. }
  522.  
  523. SCRIPT "Suchen und Ersetzen von Text"
  524. BEHAVIOR "Durchsucht 'txt' nach 'Suchtext und ersetzt es durch 'Ersatztext'."
  525. CATEGORIES Werkzeuge
  526. {
  527. -- Durchsucht 'txt' nach 'Suchtext und ersetzt es durch 'Ersatztext'.
  528. -- Wenn asWord den Wert true hat, wird Suchtext nur durch Ersatztext 
  529. -- ersetzt, wenn er als ganzes Wort vorkommt. 
  530. -- (Ein Wort ist eine Zeichenfolge, der entweder ein im "Trennzeichen" 
  531. -- aufgefⁿhrtes Zeichen oder der Anfang oder das Ende von 'txt' 
  532. -- voransteht und nachsteht. Die Trennzeichen-Zeichenfolge enthΣlt 
  533. -- space, tab, crlf und allgemeine Interpunktionszeichen und 
  534. -- mathematische Operatoren.)
  535.  
  536. to get SuchenErsetzen txt,SuchenNach,ErsetzenDurch,asWord
  537.     if asWord is null
  538.         set asWord to "false"
  539.     end if
  540.     Laufsumme = 1
  541.     ZeichenGesamt=charcount(txt)
  542.     SuchLΣnge=charcount(SuchenNach)
  543.     ErsetzLΣnge=charcount(ErsetzenDurch)
  544.     -- diese Zeichenfolge enthΣlt alle Zeichen, die neben einem 
  545.     -- Wort stehen k÷nnen, ohne es von der benachbarten 
  546.     -- Zeichenfolge zu trennen.
  547.     WortTrennen = " " & tab & crlf & "-+*/<>,()[];^=&.?':" & quote 
  548.     while Laufsumme <= ZeichenGesamt
  549.         set AktText to chars Laufsumme to ZeichenGesamt of txt
  550.         AktOffset = offset(SuchenNach,AktText)
  551.         if AktOffset = 0
  552.             break while
  553.         else
  554.             PosAnfang = (Laufsumme+AktOffset-1)
  555.             PosEnde = (Laufsumme+AktOffset+SuchLΣnge-2)
  556.             if asWord is true
  557.                 -- Prⁿft, ob es sich um ein einzelnes Wort handelt:
  558.                 if not ((PosAnfang = 1 or char (PosAnfang - 1) \
  559.                  of txt is in WortTrennen) and\
  560.                  (PosEnde = ZeichenGesamt or char PosEnde + 1 \
  561.                  of txt is in WortTrennen))
  562.                      increment Laufsumme by AktOffset+SuchLΣnge-1
  563.                     continue while
  564.                 end if
  565.             end    if
  566.             set chars PosAnfang to PosEnde of txt to ErsetzenDurch
  567.             increment Laufsumme by AktOffset+ErsetzLΣnge-1
  568.             increment ZeichenGesamt by ErsetzLΣnge - SuchLΣnge
  569.         end    if    
  570.     end    while
  571.     return txt
  572. end    SuchenErsetzen
  573. }
  574.  
  575. SCRIPT "─ndert das Verhalten des back-Befehls"
  576. BEHAVIOR "Bietet eine Alternative zum Standardverhalten des back-Befehls in ToolBook"
  577. CATEGORY Seitenwechsel
  578. {
  579. to handle enterApplication
  580.     system s_backBotschaft
  581.     -- initialize system variable
  582.     s_backBotschaft = false
  583.     -- schaltet syshistory aus
  584.     syshistoryrecord = false
  585.     clear syshistory
  586.     forward
  587. end enterApplication
  588.  
  589. to handle leavePage
  590.     system s_backBotschaft
  591.     -- fⁿgt die Seite in syshistory ein, nur wenn der 
  592.     -- Seitenwechsel *nicht* mit BACK eingeleitet wurde
  593.     if targetWindow is mainWindow
  594.         if s_backBotschaft is false
  595.             push this page onto syshistory
  596.         else
  597.             s_backBotschaft = false
  598.         end
  599.     end if
  600.     forward
  601. end leavePage
  602.  
  603. to handle back
  604.     system s_backBotschaft
  605.     if itemcount(syshistory) > 0
  606.         s_backBotschaft = true
  607.         pop syshistory
  608.         in mainwindow
  609.             go to it
  610.         end in
  611.     else
  612.         request "Es ist nicht m÷glich, weiter zurⁿckzugehen."
  613.     end if
  614. end back
  615. }
  616.  
  617. SCRIPT "Erweitern der Auswahl in einem Mehrfachauswahl-Feld"
  618. BEHAVIOR "Dieses Skript erweitert die FunktionalitΣt eines Mehrfachauswahl-Felds auf Einzelauswahl und Auswahlerweiterung"
  619. CATEGORIES Werkzeuge
  620. {
  621. to handle buttonDown Pos,istUmschalt,istStrg
  622.     -- Script in field to be ExtendSelect
  623.     -- Klicken ohne Umschalt, dann mit Umschalt, 
  624.     -- um die Auswahl zu erweitern
  625.     -- Strg gedrⁿckt halten fⁿr normale Mehrfahrauswahl
  626.     -- Ohne Umschalt oder Strg fⁿr normale Einfachauswahl
  627.     system WORD s_UmschaltStart
  628.      -- funktioniert nur mit multiSelect-Feldern
  629.     if fieldType of self <> "multiSelect"
  630.         fieldType of self = multiSelect
  631.     end if
  632.      sysLockScreen = TRUE
  633.     conditions
  634.     when istUmschalt
  635.         if s_UmschaltStart is not null
  636.             UmschaltEnde = item 1 of textFromPoint(Pos)
  637.             if UmschaltEnde < s_UmschaltStart
  638.                 ZΣhler = -1
  639.             else
  640.                 ZΣhler = 1
  641.             end if
  642.             clear my selectedTextlines
  643.             step i from s_UmschaltStart to UmschaltEnde by ZΣhler
  644.                 push i onto my selectedTextlines
  645.             end step
  646.         end if
  647.         break buttonDown
  648.     when not istStrg
  649.         clear my selectedTextlines
  650.         my selectedTextlines = item 1 of textFromPoint(Pos)
  651.         sysLockScreen = FALSE
  652.     end conditions
  653.     s_UmschaltStart = item 1 of textFromPoint(Pos)
  654.     forward
  655. end buttonDown
  656. }
  657.  
  658. SCRIPT "Ziehen von Objekten"
  659. BEHAVIOR "Leichte Methode zum Ziehen von Objekten auf Leserebene."
  660. CATEGORY Werkzeuge
  661. {
  662. to handle buttonDown Pos
  663.     local STACK bnds,MausOffset
  664.     linkDLL "user"
  665.         int getsystemmetrics(int)
  666.     end    linkDLL
  667.  
  668.     -- Prⁿft, ob der Benutzer die Maustasten vertauscht hat
  669.     if getsystemmetrics(23) >0
  670.         set leftMouseButton to keyRightButton
  671.     else
  672.         set leftMouseButton to keyLeftButton
  673.     end    if
  674.  
  675.     unlinkDLL "user"
  676.     set bnds to bounds of target
  677.     set MausOffset to item 1 of Pos - item 1 of Bnds,\
  678.       item 2 of Pos - item 2 of Bnds
  679.     
  680.     while keystate(leftMouseButton)is down
  681.         neuePos = sysMousePosition
  682.         if neuePos <> Pos
  683.             set position of target to \
  684.               item 1 of neuePos-item 1 of MausOffset,\
  685.               item 2 of neuePos-item 2 of MausOffset
  686.             set Pos to neuePos
  687.         end    if
  688.     end while
  689. end    buttonDown
  690. }
  691.  
  692. SCRIPT    "Zeichnen eines Auswahlrechtecks"
  693. BEHAVIOR    "Zeichnet ein Auswahlrechteck zum AuswΣhlen und L÷schen von Objekten auf Leserebene."
  694. CATEGORIES    Zeichnen
  695. {
  696. to handle buttonDown Pos
  697.     system xy
  698.     set myObj to objectFromPoint (Pos)
  699.     if myObj = NULL or object of parent of myObj = background
  700.         draw rectangle from Pos to Pos
  701.         set name of selection to "selectionRectangle"
  702.         set transparent of selection to TRUE
  703.         set lineStyle of selection to dotted
  704.         set xy to position of selection
  705.     end if
  706.     
  707. end buttonDown
  708.  
  709.  
  710. to handle buttonStillDown    
  711.     send AuswahlrechteckZeichnen        
  712. end buttonStillDown
  713.  
  714. to handle buttonUp
  715.     if AuswahlrechteckGezeichnet of this page <> TRUE
  716.         break
  717.     end if
  718.     set x to item 1 of bounds of selection
  719.     set y to item 2 of bounds of selection
  720.     set MitX to item 3 of bounds of selection
  721.     set MitY to item 4 of bounds of selection
  722.     step i from 1 to itemCount (objects of this page)
  723.         if x < item 1 of bounds of item i of objects of this page and \
  724.             y < item 2 of bounds of item i of objects of this page and \
  725.             MitX > item 3 of bounds of item i of objects of this page and \
  726.             MitY > item 4 of bounds of item i of objects of this page
  727.             
  728.             extend select item i of objects of this page
  729.         end if            
  730.     end step
  731.     if itemCount (selection) >= 2 -- 1 = selectionRectangle
  732.         -- diesen Abschnitt Σndern, um das Verhalten anzupassen
  733.         request "Alle eingeschlossenen Objekte l÷schen?" with "Ja" or "Nein"
  734.         if it = "Ja"
  735.             send clear
  736.         else
  737.             set selection to rectangle "selectionRectangle"
  738.             send clear
  739.         end if
  740.     else
  741.         set selection to rectangle "selectionRectangle"
  742.         send clear
  743.     end if
  744. end buttonUp
  745.     
  746. to handle AuswahlrechteckZeichnen
  747.     system xy
  748.     set AuswahlrechteckGezeichnet of this page to TRUE    
  749.     if item 1 of sysMousePosition < item 1 of xy and \
  750.         item 2 of sysMousePosition > item 2 of xy            
  751.         set Quadrant3 to TRUE
  752.     else
  753.         set Quadrant3 to FALSE
  754.     end if
  755.         
  756.     if item 1 of sysMousePosition > item 1 of xy and \
  757.         item 2 of sysMousePosition < item 2 of xy            
  758.         set Quadrant1 to TRUE
  759.     else
  760.         set Quadrant1 to FALSE
  761.     end if
  762.                 
  763.     conditions        
  764.       when not Quadrant3 and not Quadrant1    
  765.           set Temp to xy
  766.          set item 3 of Temp to item 1 of sysMousePosition
  767.          set item 4 of Temp to item 2 of sysMousePosition
  768.             
  769.       when Quadrant3 and not Quadrant1
  770.           set Temp to sysMousePosition
  771.           set item 2 of Temp to item 2 of xy
  772.           set item 3 of Temp to item 1 of xy
  773.           set item 4 of Temp to item 2 of sysMousePosition
  774.                 
  775.      when not Quadrant3 and Quadrant1
  776.          set Temp to sysMousePosition
  777.          set item 1 of Temp to item 1 of xy
  778.          set item 3 of Temp to item 1 of sysMousePosition
  779.          set item 4 of Temp to item 2 of xy
  780.                 
  781.     end conditions        
  782.     set bounds of selection to Temp                
  783. end AuswahlrechteckZeichnen  
  784. }
  785.  
  786. SCRIPT    "─ndern der Gr÷▀e eines Objekts mit mehreren Scheitelpunkten"
  787. BEHAVIOR    "Diese Behandlungsroutine Σndert die Gr÷▀e der folgenden Objekttypen:polygon, irregularPolygon, line, angledLine oder curve."
  788. CATEGORIES    Zeichnen
  789. {
  790. -- ─ndert die Gr÷▀e des aktuellen Objekts proportional nach Prozent:
  791. -- Beispiel: Um ein Vieleck auf 90% seiner Originalgr÷▀e zu bringen,
  792. -- rufen Sie diese Funktion wie folgt auf:
  793. -- send Gr÷▀e─ndern polygon "foo",.9
  794.  
  795. to handle Gr÷▀e─ndern AktObj,Betrag
  796.     set b to bounds of AktObj
  797.     -- ermittelt den Mittelpunkt des Objekts
  798.     set MitX to item 1 of b + (item 3 of b - item 1 of b) /2
  799.     set MitY to item 2 of b + (item 4 of b - item 2 of b) /2
  800.     -- prⁿft, ob die Scheitelpunkte geΣndert werden k÷nnen
  801.     set AktObjTyp to object of AktObj
  802.     if AktObjTyp is not in \
  803.      "polygon,irregularPolygon,line,angledLine,curve"
  804.         break
  805.     end    if
  806.     set v to vertices of AktObj
  807.     -- Scheitelpunkte durchlaufen, in Polma▀e umwandeln, Vektoren anpassen, 
  808.     -- dann in x,y zurⁿckΣndern
  809.     step i from 1 to itemCount(v) by 2
  810.         set x to item i of v
  811.         set y to item i+1 of v
  812.         -- x,y Abstand der Punkte vom Mittelpunkt
  813.         set dx to x-MitX
  814.         set dy to y-MitY
  815.         -- LΣnge und Winkel von Vektor ermitteln:
  816.         -- atan2 ist bei x=0,y=0 nicht definiert:
  817.         if dx=0 and dy=0
  818.             set radians to 0
  819.             set h to 0
  820.         else
  821.             -- Gr÷▀e wird hier geΣndert
  822.             set h to hypotenuse(dx,dy)*Betrag
  823.             set radians to atan2(dy,dx)
  824.         end    if
  825.         set item i of v to MitX+cos(radians)*h
  826.         set item i+1 of v to MitY+sin(radians)*h
  827.     end    step
  828.     set vertices of AktObj to v
  829. end Gr÷▀e─ndern
  830. }
  831.  
  832. SCRIPT    "Suchen und Ersetzen in allen Skripten eines Buchs"
  833. BEHAVIOR    "Durchsucht alle Skripten eines Buchs nach einer Zeichenfolge und ersetzt sie."
  834. CATEGORIES    Testen
  835. {
  836. to handle SuchenUErsetzen
  837.     set sysTimeFormat to "seconds"
  838.     local szHintergrundname
  839.     clear sysError
  840.     ask "Geben Sie den zu ersetzenden Text ein:"
  841.     if sysError <> "cancel" and it is not null
  842.         set Suchtext to it
  843.     else
  844.         break buttonUp
  845.     end    if
  846.     ask "Geben Sie den Text, durch den " && Suchtext && "ersetzt werden soll:"
  847.     if sysError <> "cancel" and it is not null
  848.         set Ersatztext to it
  849.     else
  850.         break buttonUp
  851.     end    if
  852.     set Startzeit to sysTime
  853.     set sysCursor to 4
  854.     if script of this book contains Suchtext
  855.         step i from 1 to wordCount(script of this book)
  856.             if word i of script of this book = Suchtext as text
  857.                 put Ersatztext into word i of script of this book
  858.             end    if
  859.         end    step
  860.     end    if
  861.     step n from 1 to pageCount of this book
  862.         go to page n
  863.         step i from 1 to itemCount(objects of this page)
  864.             if script of item i of objects of this page contains Suchtext
  865.                 step j from 1 to wordCount(script of item i of objects of this page)
  866.                     if word j of script of item i of objects of this page = Suchtext as text
  867.                         put Ersatztext into word j of script of item i of objects of this page
  868.                     end    if
  869.                 end    step
  870.             end if
  871.             if object of item i of objects of this page is group
  872.                 get GruppeErsetzen(item i of objects of this page, \
  873.                         Suchtext,Ersatztext)
  874.             end    if
  875.         end    step
  876.         if uniqueName of this background <> szHintergrundname as text
  877.             set szHintergrundname to uniqueName of this background
  878.             step i from 1 to itemCount(objects of this background)
  879.                 if script of item i of objects of this background contains Suchtext
  880.                     step j from 1 to wordCount(script of item i of objects of this background)
  881.                         if word j of script of item i of objects of this background = Suchtext as text
  882.                             put Ersatztext into word j of script of item i of objects of this background
  883.                         end    if
  884.                     end    step
  885.                 end if 
  886.                 if object of item i of objects of this background is group
  887.                     get GruppeErsetzen(item i of objects of this background, \
  888.                             Suchtext,Ersatztext)
  889.                 end    if
  890.             end
  891.             if script of this background contains Suchtext
  892.                 step i from 1 to wordCount(script of this background)
  893.                     if word i of script of this background = Suchtext as text
  894.                         put Ersatztext into word i of script of this background
  895.                     end    if
  896.                 end    step
  897.             end    if
  898.         end    if
  899.         if script of this page contains Suchtext
  900.             step i from 1 to wordCount(script of this page)
  901.                 if word i of script of this page = Suchtext as text
  902.                     put Ersatztext into word i of script of this page
  903.                 end    if
  904.             end    step
  905.         end    if
  906.     end    step
  907.     request "Verstrichene Zeit: " && sysTime - Startzeit && "Sekunden."
  908.     set sysCursor to default
  909. end    SuchenUErsetzen
  910.  
  911. to get GruppeErsetzen groupID,Suchtext,Ersatztext
  912.     step i from 1 to itemCount(objects of groupID)
  913.         if script of item i of objects of groupID contains Suchtext
  914.             step n from 1 to wordCount(script of item i of objects of groupID)
  915.                 if word n of script of item i of objects of groupID = Suchtext as text
  916.                     put Ersatztext into word n of script of item i of objects \
  917.                             of groupID
  918.                 end    if
  919.             end    step
  920.         end    if
  921.         if object of item i of objects of groupID is group
  922.             get GruppeErsetzen(item i of objects of groupID,Suchtext, \
  923.                     Ersatztext)
  924.         end    if
  925.     end    step
  926.     return true
  927. end    GruppeErsetzen
  928. }
  929.  
  930. SCRIPT "Packen einer ToolBook-Datei"
  931. BEHAVIOR "Automatisiert das Entfernen von ⁿberflⁿssigen Informationen aus einem Buch."
  932. CATEGORY Testen
  933. {
  934. -- Aus dem Skript-Album
  935. to handle BuchPacken
  936.     LOCAL lpMem, TempDatei
  937.     LOCAL INT status
  938.  
  939.     send linkDlls
  940.     lpMem = getWinPointer(192)
  941.     if lpMem = NULL
  942.         break to system
  943.     end
  944.  
  945.     sysCursor = 4
  946.     status = GetTempFileName(0,"tbk",0,lpMem)
  947.     TempDatei = pointerString(0,lpMem)
  948.     fileName = name of this book
  949.     save as TempDatei,TRUE
  950.     save as fileName,TRUE
  951.     get freeWinPointer(lpMem)
  952.     get DateiEntfernen(TempDatei)
  953.     syscursor = default
  954. end    BuchPacken
  955.  
  956.  
  957. to handle linkDlls
  958.     linkDLL "kernel"
  959.         WORD    globalAlloc         (WORD,DWORD)
  960.         WORD    globalFree           (WORD)
  961.         POINTER globalLock           (WORD)
  962.         WORD    globalUnlock         (WORD)
  963.         WORD    globalReAlloc       (WORD,DWORD,WORD)
  964.         WORD     globalHandle        (INT)
  965.         INT     getTempFileName        (INT,STRING,WORD,POINTER)
  966.     end    linkDLL
  967.  
  968.     linkDLL sysToolBookDirectory & "tb30dos.dll"
  969.         INT     DateiEntfernen             (STRING)
  970.     end linkDLL
  971. end    linkDLLs
  972.  
  973.  
  974. to get getWinPointer memChunk
  975.     LOCAL memHandle, lPointer
  976.     
  977.     memHandle = globalAlloc(66, MemChunk)    -- FIXED,ZEROINIT
  978.     if memHandle = NULL
  979.         return NULL
  980.     end    if
  981.     
  982.     lPointer = globalLock(memHandle)
  983.     if lPointer = NULL
  984.         return NULL
  985.     end    if
  986.     
  987.     return lPointer
  988. end    getWinPointer
  989.  
  990.  
  991. to get freeWinPointer lPointer
  992.     LOCAL WORD memHandle
  993.     LOCAL INT status
  994.     LOCAL LOGICAL passFlag
  995.     
  996.     passFlag = TRUE
  997.  
  998.     if lPointer = NULL or item 1 of lPointer < 0
  999.         return FALSE
  1000.     end    if
  1001.     
  1002.     memHandle = globalHandle(item 1 of lPointer)
  1003.     
  1004.     status = globalUnlock(memHandle)
  1005.     if status <> 0
  1006.         passFlag = FALSE
  1007.     else
  1008.         status = globalFree(memHandle)
  1009.         if status <> 0
  1010.             passFlag = FALSE
  1011.         end    if
  1012.     end    if
  1013.     return passFlag
  1014. end    freeWinPointer
  1015. }
  1016.  
  1017. SCRIPT "Entpacken eines DWord auf drei Byte"
  1018. BEHAVIOR    "Entpackt ein DWord auf drei Byte. Nⁿtzlich zum Abrufen von Farben und MIDI-Botschaften von Windows."
  1019. CATEGORIES    Werkzeuge
  1020. {
  1021. to get ExplizitByte gepacktDWord    
  1022.     r = (gepacktDWord mod 256)
  1023.     g = (gepacktDWord mod 65536) bitShiftRight 8
  1024.     b = gepacktDWord bitShiftRight 16
  1025.     push b onto it
  1026.     push g onto it
  1027.     push r onto it
  1028.     return it
  1029. end    ExplizitByte
  1030. }
  1031.  
  1032. SCRIPT "Packen von drei Byte in ein DWord"
  1033. BEHAVIOR    "Packt drei Byte in ein DWort. Nⁿtzlich zum Senden von Farben und MIDI-Botschaften an Windows."
  1034. CATEGORIES    Werkzeuge
  1035. {
  1036. to get packenDWord rgb
  1037.     set r to item 1 of rgb
  1038.     set g to item 2 of rgb
  1039.     set b to item 3 of rgb
  1040.     set it to r + (g bitShiftLeft 8) + (b bitshiftLeft 16)
  1041.     return it
  1042. end    packenDWord
  1043. }
  1044. ACTION    "Verknⁿpfen mit timeGetTime()"
  1045. BEHAVIOR    "Stellt eine Verknⁿpfung mit timeGetTime() fⁿr Zeitereignisse. Dies ist ein besserer Zeitgeber als getTickCount."
  1046. CATEGORY    Windows
  1047. {
  1048.     linkdll "mmSystem"
  1049.         DWORD timeGetTime()
  1050.     end
  1051. }
  1052.  
  1053. ACTION    "Bildschirm aufleuchten lassen"
  1054. BEHAVIOR    "Veranla▀t das ToolBook-Fenster, $$mal bei einer Rate von ca. $$Geschw/Sekunde."
  1055. CATEGORIES    Effekte
  1056. ARG mal is "5"  help "Wie viele Male der Bildschirm aufleuchten soll."
  1057. ARG    Geschw is "100"    help "Je h÷her die Zahl, desto schneller das Blinken."
  1058. {
  1059. --to handle Blinken  -- empfohlene benutzerdefinierte Botschaft
  1060.     linkDLL "kernel"
  1061.           word     globalAlloc(word,dword)
  1062.         pointer globalLock(word)
  1063.         word     globalUnlock(word)
  1064.         word     globalFree(word)
  1065.     end    linkDLL
  1066.    
  1067.    linkDLL "user"
  1068.         word     invertRect(word,pointer)
  1069.         word     getClientRect(word,pointer)
  1070.         word     getDC(word)
  1071.         int     releaseDC(word,word)
  1072.     end    linkDLL
  1073.     
  1074.     set vHmem to globalAlloc(66, 8)
  1075.     set vPtrMem to globalLock(vHmem)
  1076.     get getClientRect(sysClientHandle,vPtrMem)
  1077.     set vHDC to getDC(sysClientHandle)
  1078.     set neueGeschw to 1000/$$Geschw
  1079.  
  1080.     step i from 1 to $$mal
  1081.         get invertRect(vHDC,vPtrMem)
  1082.         pause neueGeschw ticks         
  1083.         get invertRect(vHDC,vPtrMem)
  1084.         pause neueGeschw ticks
  1085.     end step
  1086.     
  1087.     get releaseDC (sysClientHandle,vHDC)
  1088.     get GlobalUnlock(vHmem)
  1089.     get GlobalFree(vHmem)
  1090.     unlinkDLL "kernel"
  1091.     unlinkDLL "user"
  1092. --end
  1093. }
  1094.  
  1095. SCRIPT    "Ermitten der Ausfⁿhrungszeit"
  1096. BEHAVIOR    "Mit diesen zwei Behandlungsroutinen k÷nnen Sie Zeit-Tests durchfⁿhren. Sie vergleichen automatisch zwei Tests, die nacheinander durchgefⁿhrt werden."
  1097. CATEGORIES    Testen
  1098. {
  1099. to handle Startzeit
  1100.     system s_TestZeit
  1101.     linkDLL "mmSystem"
  1102.         DWORD timeGetTime()
  1103.     end    linkDLL
  1104.     set s_TestZeit to timeGetTime()
  1105. end    Startzeit
  1106.  
  1107. to handle showElapsedTime
  1108.     system s_TestZeit, s_LetzteTestZeit
  1109.     
  1110.     set AktTestZeit to (timeGetTime() - s_TestZeit) / 1000
  1111.     format number AktTestZeit as "#.0"
  1112.     
  1113.     set Hilfetext to "Dieser Test hat" && AktTestZeit && "Sekunden gedauert."
  1114.     if s_LetzteTestZeit <> 0 and s_LetzteTestZeit is not null
  1115.         get (AktTestZeit - s_LetzteTestZeit)
  1116.         set DeltaZeit to (it / Min(s_LetzteTestZeit,AktTestZeit)) * 100
  1117.         format number DeltaZeit as "#.0"
  1118.         if DeltaZeit <> 0
  1119.             
  1120.             conditions
  1121.             when DeltaZeit < 0
  1122.                 set Relation to "schneller"
  1123.             when DeltaZeit > 0
  1124.                 set Relation to "langsamer"
  1125.             end    conditions
  1126.  
  1127.             get abs(DeltaZeit)
  1128.             format number it as "#.0"
  1129.             put " Er war" && it & "%" && Relation &&\
  1130.               "als der vorherige Test." after Hilfetext
  1131.         end    if
  1132.     end    if
  1133.     request Hilfetext
  1134.     set s_LetzteTestZeit to AktTestZeit
  1135.     unlinkDLL "mmSystem" -- refCount dekrementieren
  1136. end    showElapsedTime
  1137. }
  1138.  
  1139. SCRIPT "Initialisieren eines Excel-GesprΣchs"
  1140. BEHAVIOR "Diese Funktion startet Excel, falls es noch nicht ausgefⁿhrt wird. Bei ▄bergabe eines Dateinamens wird Excel veranla▀t, die Datei zu laden, falls sie noch nicht ge÷ffnet ist."
  1141. CATEGORY Windows
  1142. {
  1143. to get ExcelInitialisieren Dateiname
  1144.     
  1145.     -- Ermitteln den aktuellen Status von Excel
  1146.     getRemote "Status" application "Excel" topic "System"
  1147.     
  1148.     -- Falls fehlgeschlagen, weil kein Server vorhanden ist, 
  1149.     -- wird Excel gestartet
  1150.     if item 1 of sysError = "Fehlgeschlagen: Kein Server"
  1151.         linkDLL sysToolBookDirectory & "tb30win.dll"
  1152.             INT yieldApp()
  1153.         end linkDLL 
  1154.         run "excel.exe" && Dateiname
  1155.         -- Deaktiviert Excel
  1156.         get yieldApp()
  1157.         getRemote "Status" application "Excel" topic "System"
  1158.         unlinkDLL sysToolBookDirectory & "tb30win.dll"
  1159.       end    if
  1160.       
  1161.       -- getRemote-Status soll Bereit liefern
  1162.     if it <> "Bereit" 
  1163.         return FALSE
  1164.     end if
  1165.    
  1166.        -- Stellt sicher, da▀ Excel nicht minimiert ist
  1167.     executeRemote "[App.Restore()]" application "excel"
  1168.     
  1169.     -- Falls keine Datei angegeben wurde, wird TRUE geleifert
  1170.     if Dateiname = NULL 
  1171.         return TRUE
  1172.     end if
  1173.     
  1174.     -- Prⁿft, ob fDateiname ge÷ffnet ist, falls ja, wird 
  1175.     -- die Datei aktiviert
  1176.     executeRemote "[Activate(""" & Dateiname & """)]" \
  1177.      application "excel" topic Dateiname
  1178.     
  1179.     -- Falls fehlgeschlagen, weil kein Server vorhanden ist, 
  1180.     -- wird versucht, die Datei zu ÷ffnen
  1181.     if item 1 of sysError = "Fehlgeschlaten: Kein Server" 
  1182.         executeRemote "[Open(""" & Dateiname & """)]" \
  1183.          application "excel"
  1184.     end if
  1185.     
  1186.     -- Falls sysError OK ist, ist die Operation erfolgreich
  1187.     if item 1 of sysError = "OK" 
  1188.         return TRUE
  1189.     end if
  1190.     return FALSE
  1191. end    ExcelInitialisieren
  1192. }
  1193.  
  1194. SCRIPT "Anzeigen eines ToolBook-Fensters im Desktop-Vordergrund"
  1195. BEHAVIOR "Bringt ein ToolBook-Fenster dynamisch in den Desktop-Vordergrund. Dies ist nⁿtzlich, wenn Sie verschiedene ToolBook-Anwendungen von einem Hauptbuch ausfⁿhren."
  1196. CATEGORY Windows
  1197. {
  1198. to handle FensterInVordergrund Anwendung
  1199.     
  1200.     linkDLL "user"  
  1201.         --bringWindowToTop ist eine Windows-Funktion, die 
  1202.         --das Fenster, dessen Zugriffsnummer ⁿbergeben wird, 
  1203.         --vor allen anderen Fenstern anzeigt.
  1204.         INT bringWindowToTop(WORD)
  1205.     end linkDLL
  1206.     
  1207.     --getRemote liefert 9 separate Elemente in sysError  
  1208.     --item 1 ist der Status der Fernanfrage
  1209.        getRemote "sysWindowHandle" application  toolBook topic Anwendung
  1210.     if (item 1 of sysError) is "OK"
  1211.         get bringWindowToTop(it)
  1212.         --bringWindowToTop pa▀t die Seitengr÷▀e nicht an 
  1213.         --und stellt das Fenster nicht wiederher
  1214.         executeRemote "send SizeToPage" application toolbook \
  1215.          topic Anwendung
  1216.     else
  1217.         --die Anwendung lΣuft nicht, also wird sie gestartet
  1218.         run Anwendung
  1219.     end if
  1220.     
  1221.     unlinkDLL "user"
  1222. end FensterInVordergrund
  1223. }
  1224.  
  1225. SCRIPT    "Ermittelt die Bildschirmaufl÷sung"
  1226. BEHAVIOR    "Legt die Variable Bildschirmaufl÷sung auf die aktuelle Bildschirmaufl÷sung fest."
  1227. CATEGORY    Windows
  1228. {
  1229. to get Aufl÷sung
  1230.     local hAufl, vAufl, Bildschirmaufl÷sung
  1231.  
  1232.     linkDLL sysToolBookDirectory & "tb30win.dll"
  1233.         INT horizontalAnzeigeAufl()
  1234.         INT verticalAnzeigeAufl()
  1235.     end    linkDLL
  1236.     set hAufl to horizontalAnzeigeAufl()
  1237.     set vAufl to verticalAnzeigeAufl()
  1238.  
  1239.     push vAufl onto Bildschirmaufl÷sung  -- item 2 ist die vertikale Aufl÷sung
  1240.     push hAufl onto Bildschirmaufl÷sung  -- item 1 ist die horizontale Aufl÷sung
  1241.  
  1242.     unlinkDLL sysToolBookDirectory & "tb30win.dll"
  1243.     return Bildschirmaufl÷sung
  1244. end Aufl÷sung
  1245. }
  1246.  
  1247. SCRIPT "Ermitteln der Druckeraufl÷sung"
  1248. BEHAVIOR "Liefert die Druckaufl÷sung des Druckers in dpi (Punkte pro Zoll)"
  1249. CATEGORY Windows
  1250. {
  1251. to get DruckerAufl
  1252.     linkDll "GDI"
  1253.         WORD     createIC    (STRING,STRING,STRING,STRING)
  1254.         INT    getDeviceCaps    (WORD,INT)
  1255.         INT     deleteDC     (WORD)
  1256.     end linkDLL
  1257.     
  1258.     linkDLL sysToolBookDirectory & "tb30win.dll"
  1259.         STRING GetWinIniVar     (STRING, STRING)
  1260.     end linkDLL
  1261.     
  1262.     LOGPIXELSX = 88 -- Windows-Konstanten
  1263.     LOGPIXELSY = 90 
  1264.     
  1265.     TreiberInfo = getWinIniVar("windows", "device")
  1266.     GerΣteInfo = item 1 of TreiberInfo
  1267.     
  1268.     if GerΣteInfo is NULL
  1269.         set sysError to "Es ist kein Drucker angeschlossen."
  1270.         unlinkDLL "GDI"
  1271.         unlinkDLL sysToolBookDirectory & "tb30win.dll"
  1272.         return NULL
  1273.     end if
  1274.     
  1275.     GerΣteDatei = item 2 of TreiberInfo
  1276.     GerΣteAnschlu▀ = item 3 of TreiberInfo
  1277.     
  1278.     hDC = createIC(GerΣteDatei,GerΣteInfo,GerΣteAnschlu▀,NULL)
  1279.     DrXAufl = getDeviceCaps(hDC,LOGPIXELSX)
  1280.     DrYAufl = getDeviceCaps(hDC,LOGPIXELSY)
  1281.     get deleteDC(hDC)
  1282.     
  1283.     unlinkDLL "GDI"
  1284.     unlinkDLL sysToolBookDirectory & "tb30win.dll"
  1285.     return DrXAufl & "," & DrYAufl
  1286. end DruckerAufl
  1287. }
  1288.  
  1289. SCRIPT "Ermitteln der Anzeigeaufl÷sung"
  1290. BEHAVIOR "Ermittelt die Aufl÷sung des Monitors in Pixeln pro Zoll"
  1291. CATEGORY Windows
  1292. {
  1293. to get AnzeigeAufl
  1294.     
  1295.     linkDLL sysToolBookDirectory & "tb30win.dll"
  1296.         INT    displayLogPixelsX()
  1297.         INT displayLogPixelsY()
  1298.     end linkDLL
  1299.     
  1300.     AnzeigePixX = displayLogPixelsX()
  1301.     AnzeigePixY = displayLogPixelsY()    
  1302.  
  1303.     unlinkDLL sysToolBookDirectory & "tb30win.dll"
  1304.     return AnzeigePixX & "," & AnzeigePixY
  1305. end AnzeigeAufl
  1306. }
  1307.  
  1308. SCRIPT    "Ermittelt die Farben der Anzeige"
  1309. BEHAVIOR    "Liefert die Farbanzahl der Anzeige"
  1310. CATEGORIES    Windows
  1311. {
  1312. to get AnzahlFarben
  1313.     linkDLL "gdi"
  1314.         INT getDeviceCaps(WORD,INT)
  1315.     end linkDLL
  1316.  
  1317.     linkDLL "user"
  1318.         WORD getDC(WORD)
  1319.         INT  releaseDC(WORD,WORD)
  1320.     end linkDLL
  1321.     
  1322.     hDC = getDC(windowHandle of mainWindow)
  1323.     RⁿckWert = getDeviceCaps(hDC,24) -- 24 ist die Zauberzahl fⁿr Farben
  1324.     get ReleaseDC(windowHandle of mainWindow, hDC)
  1325.     unlinkDLL "gdi"
  1326.     unlinkDLL "user"
  1327.     return RⁿckWert
  1328. end    AnzahlFarben
  1329. }
  1330.  
  1331. SCRIPT    "Ermitteln der Farbe eines Pixels"
  1332. BEHAVIOR    "Ermittelt die Farbe eines beliebigen Pixels auf dem Bildschirm."
  1333. CATEGORIES    Windows
  1334. {
  1335. to handle buttonClick Pos
  1336.     linkDLL "user"
  1337.         WORD getDC(WORD)
  1338.         INT releaseDC(WORD,WORD)
  1339.     end    linkDLL
  1340.     
  1341.     linkDLL "gdi"
  1342.         DWORD getPixel(WORD,INT,INT)
  1343.     end    linkDLL
  1344.     
  1345.     linkDLL sysToolBookDirectory & "tb30WIN.DLL"
  1346.         STRING RGBtoHLS(DOUBLE,DOUBLE,DOUBLE)
  1347.      end    linkDLL
  1348.     
  1349.     get pageUnitsToClient(Pos)
  1350.     set XKoord to item 1 of it
  1351.     set YKoord to item 2 of it
  1352.     set hDC to getDC(sysClientHandle)
  1353.     get getPixel(hDC, XKoord, YKoord)
  1354.     if it <> -1     -- unwahrscheinlich
  1355.         Rotwert = it mod 256 -- holt das lobyte im loword
  1356.         it = it bitShiftRight 8
  1357.         Grⁿnwert = it mod 256 -- holt das lobyte im loword
  1358.         Blauwert = it bitShiftRight 8
  1359.         
  1360.         set HLSWert to RGBtoHLS(Rotwert, Grⁿnwert, Blauwert)
  1361.         if HLSWert = -20     -- sehr unwahrscheinlich
  1362.             request "Umwandlung von RGB in HLS ist fehlgeschlagen."
  1363.             unlinkDLL "gdi"
  1364.             unlinkDLL "user"
  1365.             unlinkDLL sysToolBookDirectory & "tb30win.dll"
  1366.             break buttonUp
  1367.         end    if
  1368.         
  1369. --        set text of field "RGB" to Rotwert&","&Grⁿnwert&","&Blauwert
  1370. --        set text of field "HLS" to HLSWert
  1371. --        set fillColor of rectangle "color" to HLSWert
  1372.         request "RGB ist" && Rotwert&","&Grⁿnwert&","&Blauwert
  1373.         request "HLS ist" && HLSWert
  1374.     else 
  1375.         request "Fehler beim Abrufen der Pixelfarbe."
  1376.     end    if
  1377.     get ReleaseDC(sysWindowHandle, hDC)
  1378.     unlinkDLL "gdi"
  1379.     unlinkDLL "user"
  1380.     unlinkDLL sysToolBookDirectory & "tb30win.dll"
  1381. end buttonClick
  1382. }
  1383.  
  1384. SCRIPT    "Get the running version of Windows"
  1385. BEHAVIOR    "Returns the running version of Windows."
  1386. CATEGORIES    Windows
  1387. {
  1388. to get winVersion
  1389.     linkDLL "kernel"
  1390.         DWORD GetVersion()
  1391.     end
  1392.     set verNum to GetVersion()
  1393.     set WverNum to verNum mod 65536
  1394.     set majorNumber to WverNum mod 256
  1395.     set minorNumber to WverNum div 256
  1396.     unlinkDLL "kernel"
  1397.     return majorNumber &"." & minorNumber
  1398.  end winVersion    
  1399. }
  1400.  
  1401. SCRIPT    "Ermitteln der aktuellen DOS-Version"
  1402. BEHAVIOR    "Liefert die laufende DOS-Version"
  1403. CATEGORIES    DOS
  1404. {
  1405. to get DOSVersion
  1406.     linkDLL "kernel"
  1407.         DWORD GetVersion()
  1408.     end
  1409.     set verNum to GetVersion()
  1410.     set DverNum to verNum div 65536
  1411.      set dNummer1 to DverNum div 256
  1412.     set dNummer2 to DverNum mod 256
  1413.     unlinkDLL "kernel"
  1414.     return dNummer1 & "." & dNummer2
  1415. end DOSVersion
  1416. }
  1417.  
  1418. SCRIPT "Beenden und Neustart von Windows"
  1419. BEHAVIOR "Diese Behandlungsroutine demonstriert eine Methode zu Beenden und Neustarten von Windows."
  1420. CATEGORY Windows
  1421. {
  1422. --Wenn Neustart true ist, wird Windows beendet und erneut gestartet.  
  1423. --Wenn Neustart null oder false ist, wird Windows nur beendet.
  1424. to handle exitWindows Neustart
  1425.     linkDLL "user"
  1426.         INT ExitWindows (DWORD, INT)
  1427.     end linkDLL
  1428.     if Neustart is true
  1429.         get ExitWindows (66, 0)
  1430.     else
  1431.         get ExitWindows (0, 0)
  1432.     end if
  1433.     -- Abtrennen der Verknⁿpfung nicht n÷tig.
  1434. end    exitWindows
  1435. }
  1436.  
  1437. ACTION "Abrufen von Systeminformationen"
  1438. BEHAVIOR "Liefert Informationen ⁿber die auf dem System installierten Multimedia-Treiber"
  1439. CATEGORIES    Multimedia
  1440. ARG MediaTyp oneOf "all,animation,bitmap,cdAudio,digitalVideo,overlay,sequencer,vcr,videodisc,waveAudio" is "all" help "Choose a device type."
  1441. ARG Info oneOf "installname, quantity, quantity open, name 1, name 1 open" is "installname" help "Ermittelt Informationen ⁿber das GerΣt."
  1442. {
  1443.       sMS = sysMediaSuspend
  1444.     sysMediaSuspend = FALSE
  1445.     clear sysError
  1446.     GerΣtetyp = "$$MediaTyp"
  1447.     Info = "$$Info"
  1448.  
  1449.     get callMCI("sysInfo" && GerΣtetyp && Info)
  1450.     if sysError is NULL
  1451.         request it 
  1452.     else
  1453.         if sMS = TRUE -- Fehlerbehandlung, falls der Benutzer dies erwartet
  1454.             request "Wird vom GerΣt" && QUOTE & GerΣtetyp & QUOTE && "nicht erkannt:" \
  1455.                 && QUOTE & Info & QUOTE & ":" & CRLF & CRLF & sysError
  1456.         end if
  1457.     end if
  1458.     sysMediaSuspend = sMS
  1459. }
  1460.  
  1461. ACTION "Abrufen von GerΣteinformationen"
  1462. BEHAVIOR "Liefert Informationen ⁿber die FΣhigkeiten des Multimedia-Treibers"
  1463. CATEGORIES    Multimedia
  1464. ARG MediaTyp oneOf "all,animation,bitmap,cdAudio,digitalVideo,overlay,sequencer,vcr,videodisc,waveAudio" is "all" help "WΣhlen Sie einen GerΣtetyp aus."
  1465. ARG Info oneOf "can eject,can freeze,can play,can record,can reverse,can save,can stretch,compound device,device type,fast play rate,has audio,has video,inputs,normal play rate,outputs,slow play rate,uses files,uses palettes,windows" is "device type" help "Angegebene Info zum GerΣt abrufen."
  1466. {
  1467.     -- Wenn das Verhalten nicht vom Treiber unterstⁿtzt 
  1468.     -- wird, jedoch in der Spezifikation unterstⁿtzt wird, 
  1469.     -- liefert diese Funktion FALSE. Wenn das Verhalten 
  1470.     -- nicht in der Spezifikation unterstⁿtzt wird, wird NULL 
  1471.     --geliefert und einen Bericht eingerichtet, der angezeigt 
  1472.     -- wird, wenn sysMediaSuspend TRUE ist. 
  1473.     sMS = sysMediaSuspend
  1474.     sysMediaSuspend = FALSE
  1475.     clear sysError
  1476.     GerΣtetyp = "$$MediaTyp"
  1477.     cap = "$$Info"
  1478.     get callMCI("capability" && GerΣtetyp && cap)
  1479.     if sysError is NULL
  1480.         request it 
  1481.     else
  1482.         if sMS = TRUE -- Fehlerbehandlung, falls der Benutzer dies erwartet
  1483.             request "Wird vom GerΣt nicht erkannt:" && QUOTE & GerΣtetyp & QUOTE && "" \
  1484.                 && QUOTE & cap & QUOTE & ":" & CRLF & CRLF & sysError
  1485.         end if
  1486.     end if
  1487.     sysMediaSuspend = sMS    
  1488. }
  1489.  
  1490.  
  1491. ACTION "Festlegen von Mischpult-Werten"
  1492. BEHAVIOR "Legt die LautstΣrke des virtuellen Audio-Mischpults fest"
  1493. CATEGORIES Multimedia
  1494. ARG EATyp oneOf "device_in,device_out" is "device_in" help "Eingabe oder Ausgabe auswΣhlen"
  1495. ARG GerΣtetyp oneOf "AMP,AUX,CDA,MIC,MUS,WAV" is "WAV" help "Gewⁿnschten GerΣtetyp auswΣhlen"
  1496. ARG Kanal oneOf "LEFT,RIGHT,BOTH" is "BOTH" help "Kanal auswΣhlen"
  1497. ARG Wert oneOf "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100" is "99" help "Prozent der maximalen LautstΣrke auswΣhlen"
  1498. {
  1499.     -- Das virtuelle Mischpult arbeitet so gut wie m÷glich 
  1500.     -- mit der auf dem ZielgerΣt installierten Soundkarte. Da 
  1501.     -- es keinen wirklichen Standard gibt, ist das Ergebnis 
  1502.     -- je nach Soundkarte verschieden
  1503.     clear sysError
  1504.     get mixerCommand("set tbkmixer $$EATyp $$GerΣtetyp control volume $$Kanal Wert")
  1505.     if it = 0
  1506.         if $$Kanal <> "both"
  1507.             request "LautstΣrke des $$Kanal Kanals des GerΣts $$GerΣtetyp ist auf $$Wert festgelegt"
  1508.         else
  1509.             request "Die LautstΣrke beider KanΣle des GerΣts $$GerΣtetyp ist auf $$Wert festgelegt"
  1510.         end if
  1511.     else
  1512.         request sysError
  1513.     end if
  1514. }
  1515.  
  1516. ACTION "Festlegen von Mischpult-Werten fⁿr ein GerΣt auf Leserebene"
  1517. BEHAVIOR "Erm÷glicht dem Benutzer, die LautstΣrke des virtuellen Audio-Mischpults festulegen"
  1518. CATEGORIES Multimedia
  1519. ARG EATyp oneOf "device_in,device_out" is "device_in" help "Eingabe oder Ausgabe auswΣhlen"
  1520. ARG GerΣtetyp oneOf "AMP,AUX,CDA,MIC,MUS,WAV" is "WAV" help "Gewⁿnshtes MCI-GerΣt zum Abfragen auswΣhlen"
  1521. {
  1522.     -- Das virtuelle Mischpult arbeitet so gut wie m÷glich 
  1523.     -- mit der auf dem ZielgerΣt installierten Soundkarte. Da 
  1524.     -- es keinen wirklichen Standard gibt, ist das Ergebnis 
  1525.     -- je nach Soundkarte verschieden
  1526.     -- Dieses Skript ⁿberlΣ▀t dem Autoren die Auswahl des 
  1527.     -- GerΣts, ⁿberlΣ▀t dem Benutzer jedoch die Auswahl des Werts
  1528.     local l_Abbrechen,l_Kanal,l_Wert
  1529.     request "Fⁿr welchen Kanal wollen Sie die LautstΣrke einstellen: Links Rechts oder Beides?" \
  1530.         with "Links" or "Rechts" or "Beides"
  1531.     if it <> null -- Null, falls it der System-SchaltflΣche oder alt+F4 abgebrochen wurde
  1532.         set l_Kanal to it
  1533.     else
  1534.         set l_Abbrechen to TRUE,"vom Benutzer abgebrochen."
  1535.     end if
  1536.     
  1537.     if item 1 of l_Abbrechen <> TRUE
  1538.         ask "Auf welchen Prozent des maximalen Werts soll die LautstΣrke eingestellt werden?" with "50"
  1539.         if isType(INT,it) and it >= 0  and it <=100
  1540.             set l_Wert to it
  1541.         else
  1542.             set l_Abbrechen to TRUE,"Ungⁿltiger Wert fⁿr LautstΣrke."
  1543.         end if
  1544.     end if
  1545.     clear sysError
  1546.     if item 1 of l_Abbrechen <> TRUE
  1547.         get mixerCommand("set tbkmixer $$EATyp $$GerΣtetyp control volume" && l_Kanal && l_Wert)
  1548.         if it = 0
  1549.             if l_Kanal <> "both"
  1550.                 request "Kanal: "&& l_Kanal && " des GerΣtetyps $$GerΣtetyp device wurde auf folgenden Wert festgelegt:" && l_Wert
  1551.             else
  1552.                 request "Die LautstΣrke beider KanΣle des GerΣts $$GerΣtetyp wurde auf folgenden Wert festgelegt" && l_Wert
  1553.             end if
  1554.         else
  1555.             request sysError
  1556.         end if
  1557.     else
  1558.         request "Der Befehl wurde nicht ausgefⁿhrt. Ursache:" && item 2 of l_Abbrechen
  1559.     end if
  1560. }
  1561.  
  1562. ACTION "Abrufen der Mischpult-Werte"
  1563. BEHAVIOR "Ermittelt die LautstΣrke des virtuellen Audio-Mischpults"
  1564. CATEGORIES Multimedia
  1565. ARG EATyp oneOf "device_in,device_out" is "device_in" help "Eingabe oder Ausgabe wΣhlen"
  1566. ARG GerΣtetyp oneOf "AMP,AUX,CDA,MIC,MUS,WAV" is "WAV" help "Das gewⁿnschte MCI-GerΣt zum Abfragen auswΣhlen"
  1567. ARG Kanal oneOf "LEFT,RIGHT,BOTH" is "BOTH" help "Kanal auswΣhlen"
  1568. {
  1569.     -- Das virtuelle Mischpult arbeitet so gut wie m÷glich 
  1570.     -- mit der auf dem ZielgerΣt installierten Soundkarte. Da 
  1571.     -- es keinen wirklichen Standard gibt, ist das Ergebnis 
  1572.     -- je nach Soundkarte verschieden
  1573.     clear sysError
  1574.     get mixerCommand("get tbkmixer $$EATyp $$GerΣtetyp control volume $$Kanal")
  1575.     if sysError is NULL
  1576.         if $$Kanal <> "both"
  1577.             request "LautstΣrke des Kanals: $$Kanal des GerΣts $$GerΣtetyp ist auf folgenden Wert festgelegt:" && it
  1578.         else
  1579.             request "LautstΣrke fⁿr beide KanΣle des GerΣts $$GerΣtetyp ist auf folgenden Wert festgelegt" && it
  1580.         end if
  1581.     else
  1582.         request sysError
  1583.     end if
  1584. }
  1585.  
  1586. ACTION "Image-Befehl - FunktionalitΣt"
  1587. BEHAVIOR "Ruft Informationen ⁿber die FunktionalitΣt des Bitmap-Anzeigemoduls ab."
  1588. CATEGORIES Bilder
  1589. ARG Argumente oneOf "compound device,device type,has files,has video,static,uses palettes" is "device type" help "FunktionalitΣt auswΣhlen."
  1590. {
  1591.     get imageCommand("capability placeHolder $$Argumente")
  1592.     request it
  1593. }
  1594.  
  1595. ACTION "Image-Befehl - Close"
  1596. BEHAVIOR "Schlie▀t das Fenster und die mit dem Alias verbundene Datei"
  1597. CATEGORIES Bilder
  1598. ARG Alias is "myAlias" help "Der Dateiname bzw. der Alias, den Sie schlie▀en wollen, oder 'alle', um alle ge÷ffneten Bitmaps zu schlie▀en."
  1599. {
  1600.     get imageCommand("close $$Alias")
  1601. }
  1602.  
  1603. ACTION "Image-Befehl - Info"
  1604. BEHAVIOR "Ruft Informationen ⁿber das Fenster oder die mit dem Alias verbundene Datei auf"
  1605. CATEGORIES Bilder
  1606. ARG Alias is "myAlias" help "Der Dateiname oder der Alias, dessen Informationen Sie abrufen wollen."
  1607. ARG Argumente oneOf "product,text,file" is "file" help "Die Art der gewⁿnschten Informationen."
  1608. {
  1609.     get imageCommand("Info $$Alias $$Argumente")
  1610.     request it
  1611. }
  1612.  
  1613. ACTION "Image-Befehl - ╓ffnen"
  1614. BEHAVIOR "Initialisiert das Anzeigemodus und verbindet die Datei mit dem Alias"
  1615. CATEGORIES Bilder
  1616. ARG myBitmap FILE "Bitmap-Dateien(*.BMP),*.bmp,(*.DIB),*.dib" is "Cars.bmp" help "Die Bitmap-Datei, die angezeigt werden soll."
  1617. ARG Alias is "myAlias" help "Der Alias, der mit dieser Datei verbunden werden soll."
  1618. ARG Stil oneOf "overlapped,popup,child" is "overlapped" help "Choose the Stil of the window."
  1619. {
  1620.     get imageCommand("open $$myBitmap Alias $$Alias style $$Stil")
  1621. }
  1622.  
  1623. ACTION "Image-Befehl - Anzeigen"
  1624. BEHAVIOR "Zeigt die Datei im Fenster an, das mit dem Alias verbunden ist"
  1625. CATEGORIES Bilder
  1626. ARG Alias is "myAlias" help "Der Dateiname oder der Alias, der angezeigt werden soll!"
  1627. {
  1628.     get imageCommand("play $$Alias")
  1629. }
  1630.  
  1631.  
  1632. ACTION "Image-Befehl - Positionieren"
  1633. BEHAVIOR "Zeigt die Datei im Fenster an, das mit dem Alias verbunden ist"
  1634. CATEGORIES Bilder
  1635. ARG Alias is "myAlias" help "Der Dateiname oder der Alias, der angezeigt werden soll"
  1636. ARG Position oneOf "source,destination" is "destination" help "Offset und Position der Quelle oder des Ziels."
  1637. ARG x1 is "0" help "Offset horizontal."
  1638. ARG y1 is "0" help "Offset vetikal."
  1639. ARG x2 is "100" help "Position horizontal."
  1640. ARG y2 is "100" help "Position vertikal."
  1641. {
  1642.     get imageCommand("put $$Alias $$Position at $$x1 $$y1 $$x2 $$y2")
  1643. }
  1644.  
  1645.  
  1646. ACTION "Image-Befehl  - Status"
  1647. BEHAVIOR "Ermittelt den Status des Fensters und der Datei, das bzw. der mit dem Alias verbunden ist"
  1648. CATEGORIES Bilder
  1649. ARG Alias is "myAlias" help "Der Dateiname oder der Alias, dessen Status Sie abrufen wollen!"
  1650. ARG Argumente oneOf "window,position,extent,size,visible,style,palette" is "position" help "Das Element, dessen Status Sie abrufen wollen."
  1651. {
  1652.     get imageCommand("status $$Alias $$Argumente")
  1653.     request it
  1654. }
  1655.  
  1656. ACTION "Image Command - Bereich"
  1657. BEHAVIOR "Ermitteln das Rechteck, das den Quell- bzw. Zielbereich des Bilds bestimmt."
  1658. CATEGORIES Bilder
  1659. ARG Position oneOf "source,destination" is "destination" help "Offset und Position der Quelle bzw. des Ziels bestimmen."
  1660. ARG Alias is "myAlias" help "Der Dateiname bzw. des Alias, dessen Bereich bestimmt werden soll!"
  1661. {
  1662.     get imageCommand("where $$Alias $$Position")
  1663.     request it
  1664. }
  1665.  
  1666. ACTION "Image-Befehl - Fenster"
  1667. BEHAVIOR "Parameter des mit dem Alias verbundenen Fensters Σndern"
  1668. CATEGORIES Bilder
  1669. ARG Alias is "myAlias" help "Der Dateiname bzw. der Alias, der geschlossen werden soll, oder 'Alle, um alle ge÷ffneten Bitmaps zu schlie▀en!"
  1670. ARG Argumente oneOf "text,position,size" is "position" help "Den zu Σndernden Akspekt des Fenster auswΣhlen."
  1671. ARG Wert help "Unter 'Text' die Beschrift des Fensters, oder 'Default' fⁿr den Namen der Bitmap. Fⁿr 'Position' und 'Gr÷▀e' verwenden Sie zwei Pixelwerte, z.B. '100,100'."
  1672. {
  1673.     get imageCommand("window $$Alias $$Argumente $$Wert")
  1674. }
  1675.  
  1676. ACTION "Image Command - Fensterzustand"
  1677. BEHAVIOR "─ndert den Zustand des mit dem Alias verbundenen Fensters"
  1678. CATEGORIES Bilder
  1679. ARG Alias is "myAlias" help "Der zu schlie▀ende Dateiname bzw. Alias, oder 'Alle, um alle ge÷ffneten Bitmaps zu schlie▀en"
  1680. ARG Wert oneOf "hide,minimize,minimized,show,maximize,iconic,asIs,asWas,normal" is "show" help "Mit diesen Konstanten k÷nnen Sie die Fensteranzeige genauer steuern."
  1681. {
  1682.     get imageCommand("window $$Alias state $$Wert")
  1683. }
  1684.  
  1685. ACTION    "Abspielen einer Klangdatei als neuen Clip"
  1686. BEHAVIOR "Erstellt einen Clip von einer Klangdatei unter Verwendung von 'Klangdatei' ($$Klangdatei) und spielt den Clip ab."
  1687. CATEGORY    Clips,Audio
  1688. ARG     Klangdatei FILE "Klangdateien (*.WAV),*.wav" is "Akkord.Wav" help "╓ffnet die gewⁿnschte Klangdatei."
  1689. ARG clipName is "myClip" help "Dem neuen Clip einen Namen zuweisen."
  1690. ARG Startzeit is "0:00:00" help "Legt eine Zeitdauer in 'Minuten:Sekunden:Millisekunden-Format; Voreinstellung ist der Anfang der Datei."
  1691. ARG EndZeit is "0:10:00" help "Legt eine Zeitdauer in 'Minuten:Sekunden:Millisekunden-Format; Voreinstellung ist 10 Sekunden nach dem Anfang der Datei."
  1692.  
  1693. {
  1694.      -- Der neue Clip wird erstellt, wenn das Skript 
  1695.     -- aktiviert wird (nicht wenn es geschrieben 
  1696.     -- wird), also mⁿssen Sie sicherstellen, da▀ 
  1697.     -- sich die Klangdatei im richtigen Verzeichnis 
  1698.     -- befindet, bevor das Skript aktiviert wird
  1699.       new clip from "$$Klangdatei"
  1700.       name of it = "$$clipName"
  1701.       mediaRef = clip "$$clipName"
  1702.       mmTimeFormat of mediaRef = "MSms"
  1703.       mmBeginPoint of mediaRef = "$$Startzeit"
  1704.       mmEndPoint of mediaRef = "$$Endzeit"
  1705.       mmPlay mediaRef autoclose
  1706. }
  1707.  
  1708.  
  1709.  
  1710. ACTION    "Abspielen einer AVI-Datei als Clip"
  1711. BEHAVIOR "Erstellt einen Clip von einer AVI-Datei unter Verwendung von 'AVIDatei' ($$AVIDatei) und spielt ihn ab."
  1712. CATEGORY    Clips,Video
  1713. ARG     AVIDatei FILE "AVI-Dateien (*.avi),*.avi" is "windmⁿhle.avi" help "╓ffnet die AVI-Datei."
  1714. ARG clipName is "myClip" help "Dem neuen Clip einen Namen zuweisen."
  1715. ARG Startzeit is "0" help "Einzelbildnummer festlegen, Voreinstellung ist der Anfang der Datei."
  1716. ARG Endzeit is "300" help "Einzelbildnummer festlegen, Voreinstellung ist Einzelbild 300."
  1717. ARG ClipRahmen OBJTYP "Stage" is "stage myStage" help "Clip-Rahmen-Objekt fⁿr die Wiedergabe auswΣhlen"
  1718. {
  1719.      -- Der neue Clip wird erstellt, wenn das Skript 
  1720.     -- aktiviert wird (nicht wenn es geschrieben 
  1721.     -- wird), also mⁿssen Sie sicherstellen, da▀ 
  1722.     -- sich die AVI-Datei im richtigen Verzeichnis 
  1723.     -- befindet, bevor das Skript aktiviert wird
  1724.       new clip from "$$AVIDatei"
  1725.       name of it = "$$clipName"
  1726.       mediaRef = clip "$$clipName"
  1727.       mmTimeFormat of mediaRef = "frames"
  1728.       mmBeginPoint of mediaRef = "$$Startzeit"
  1729.       mmEndPoint of mediaRef = "$$Endzeit"
  1730.       mmPlay mediaRef in $$ClipRahmen autoclose
  1731. }
  1732.  
  1733.  
  1734. ACTION    "Erstellen und Abspielen eines AVI-Clips ohne Clip-Manager"
  1735. BEHAVIOR "Erm÷glicht dem Benutzer, einen AVI-Clip zu erstellen und diesen abzuspielen."
  1736. CATEGORY    Clips,Video
  1737. ARG ClipName is "Namen des neuen Clips eingeben" help "Dies ist der Standardtext, den der Benutzer sehen wird, Sie k÷nnen ihn auch nach Bedarf anpassen."
  1738. ARG ClipRahmen OBJTYP "Stage" is "stage myStage" help "Clip-Rahmen-Objekt fⁿr die Wiedergabe auswΣhlen"
  1739. ARG AnfPunkt is "Anfangspunkt fⁿr den Clip in Einzelbildern eingeben" help "Dies ist der Standardtext, den der Benutzer sehen wird, Sie k÷nnen ihn auch nach Bedarf anpassen."
  1740. ARG Endpunkt is "Geben Sie einen Endpunkt fⁿr den Clip in Einzelbildern ein" help "Dies ist der Standardtext, den der Benutzer sehen wird, Sie k÷nnen ihn auch nach Bedarf anpassen."
  1741. ARG    Beschrift    is    "╓ffnen einer AVI-Datei"    help "Dies ist der Standardtext, den der Benutzer sehen wird, Sie k÷nnen ihn auch nach Bedarf anpassen."
  1742. ARG    Hilfetext    is    "Zu ÷ffnende AVI-Datei auswΣhlen" help "Dies ist der Standardtext, den der Benutzer sehen wird, Sie k÷nnen ihn auch nach Bedarf anpassen."
  1743. {
  1744.      -- Der neue Clip wird vom Benutzer erstellt, also ist dies 
  1745.     -- flexibler als das Skript fⁿr 'Abspielen einer Klangdatei als Clip'.
  1746.      -- Dies ist ein gutes Beispielskript, da Voreinstellungen und Fehler
  1747.     --  behandelt werden.
  1748.     while not (sysSupportedMedia contains "digitalVideo")
  1749.         request  "Fehler: Skriptausfⁿhrung abgebrochen." & CRLF \
  1750.           & "Multimedia ToolBook kann auf digitales Video nicht zugreifen." & CRLF \
  1751.           & "M÷glicherweise fehlen die ben÷tigten Treiber."
  1752.         break to system
  1753.     end while
  1754.     linkDll sysToolBookDirectory & "tb30dlg.dll"
  1755.         string openDlg(string,string,string,string)
  1756.     end    linkDLL
  1757.     
  1758.     get openDlg(".","*.avi","$$Hilfetext","$$Beschrift")
  1759.     if it <> null    
  1760.         newAVI = it
  1761.         
  1762.         do
  1763.             ask "$$ClipName" with "newClip"
  1764.             if it is null
  1765.                 request "Wollen Sie die Clip-Erstellung wirklich abbrechen?" \
  1766.                   with "Ja, abbrechen" or "Nein, erneut versuchen"
  1767.                 if it contains "Ja"
  1768.                     break to system
  1769.                 else
  1770.                     clear it
  1771.                   end if
  1772.             end if
  1773.         until it <> null
  1774.         clipName = it
  1775.         
  1776.         new clip from newAVI
  1777.         name of it = clipName
  1778.         mediaRef = clip clipName
  1779.         while not (mmPlayable of mediaRef)
  1780.             request "Dieser Clip kann nicht abgespielt werden"
  1781.             break to system
  1782.         end while
  1783.         mmTimeFormat of mediaRef = "frames"
  1784.         
  1785.          sS = sysSuspend
  1786.         sMS = sysMediaSuspend
  1787.         sysSuspend = FALSE
  1788.         sysMediaSuspend = FALSE
  1789.                 
  1790.         ask  "$$AnfPunkt" with "0"
  1791.         clear sysError
  1792.         mmBeginPoint of mediaRef = it
  1793.         if sysError <> null
  1794.             request "Fehler: der Anfangspunkt des Clips ist auf die Voreinstellung festgelegt: ""0"""
  1795.             mmBeginPoint of mediaRef = "0"
  1796.         end if
  1797.         
  1798.         ask "$$Endpunkt" with "300"
  1799.         clear sysError
  1800.          mmEndPoint of mediaRef = it
  1801.         if sysError <> null
  1802.             request "Fehler: der Endpunkt des Clips ist auf die Voreinstellung festgelegt: ""300"""
  1803.             mmEndPoint of mediaRef = "300"
  1804.         end if
  1805.         
  1806.         sysSuspend = sS
  1807.         sysMediaSuspend = sMS
  1808.         if mmPlayable of mediaRef
  1809.             mmPlay mediaRef in $$ClipRahmen autoclose 
  1810.         end if
  1811.     end if
  1812.     
  1813.     unlinkDLL sysToolBookDirectory & "tb30dlg.dll"
  1814. }
  1815.  
  1816. ACTION    "Erstellen und Abspielen eines Klang-Clips"
  1817. BEHAVIOR "Erm÷glicht dem Benutzer, einen Clip von einer Klangdatei zu erstellen, und spielt ihn ab."
  1818. CATEGORY    Clips,Audio
  1819. ARG ClipName is "Namen des neuen Clips eingeben" help "Voreinstellung ⁿbernehmen oder nach Bedarf anpassen."
  1820. ARG AnfPunkt is "AnfPunkt fⁿr den Clip im 'Minuten:Sekunden:Millisekunden'-Format eineben" help "Voreinstellung ⁿbernehmen oder nach Bedarf anpassen."
  1821. ARG Endpunkt is "Endpunkt fⁿr den Clip im 'Minuten:Sekunden:Millisekunden'-Format eineben" help "Voreinstellung ⁿbernehmen oder nach Bedarf anpassen."
  1822. ARG    Beschrift    is    "Klangdatei ÷ffnen"    help "Voreinstellung ⁿbernehmen oder nach Bedarf anpassen."
  1823. ARG    Hilfetext    is    "Zu ÷ffnende Klangdatei auswΣhlen" help "Voreinstellung ⁿbernehmen oder nach Bedarf anpassen."
  1824. {
  1825.      -- Der neue Clip wird vom Benutzer erstellt, also ist dies 
  1826.     -- flexibler als das Skript fⁿr 'Abspielen einer Klangdatei als Clip'.
  1827.      -- Dies ist ein gutes Beispielskript, da Voreinstellungen und Fehler
  1828.     --  behandelt werden.
  1829.  
  1830.     -- Diese Struktur korrigiert die Tendenz der Auto-Skript-Funktion, 
  1831.     -- die break-Anweisung in einer if-Struktur nicht richtig zu verarbeiten
  1832.     while not (sysSupportedMedia contains "waveAudio")
  1833.         request  "Fehler: Skriptausfⁿhrung wird abgebrochen." & CRLF \
  1834.           & "Der Multimedia-Treiber kann das waveAudio-GerΣt nicht finden." & CRLF \
  1835.           & "M÷glicherweise sind die erforderlichen Treiber nicht verfⁿgbar."
  1836.         break to system
  1837.     end while
  1838.     linkDll sysToolBookDirectory & "tb30dlg.dll"
  1839.         string openDlg(string,string,string,string)
  1840.     end    linkDLL
  1841.     
  1842.     get openDlg(".","*.wav","$$Hilfetext","$$Beschrift")
  1843.     if it <> null    
  1844.         newWave = it
  1845.         
  1846.         do
  1847.             ask "$$ClipName" with "newClip"
  1848.             if it is null
  1849.                 request "Wollen Sie die Clip-Erstellung wirklich abbrechen?" \
  1850.                   with "Ja, abbrechen" or "Nein, erneut versuchen"
  1851.                 if it contains "Ja"
  1852.                     break to system
  1853.                 else
  1854.                     clear it
  1855.                   end if
  1856.             end if
  1857.         until it <> null
  1858.         clipName = it
  1859.         
  1860.         new clip from newWave
  1861.         name of it = clipName
  1862.         mediaRef = clip clipName
  1863.         mmTimeFormat of mediaRef = "MSms"
  1864.         
  1865.          sS = sysSuspend
  1866.         sMS = sysMediaSuspend
  1867.         sysSuspend = FALSE
  1868.         sysMediaSuspend = FALSE    
  1869.         
  1870.         ask  "$$AnfPunkt" with "0:00:00"
  1871.         clear sysError
  1872.         mmBeginPoint of mediaRef = it
  1873.         if sysError <> null
  1874.             request "Fehler: der Anfangspunkt des Clips ist auf die Voreinstellung festgelegt: ""0:00:00"""
  1875.             mmBeginPoint of mediaRef = "0:00:00"
  1876.         end if
  1877.         
  1878.         ask "$$Endpunkt" with "0:05:00"
  1879.         clear sysError
  1880.          mmEndPoint of mediaRef = it
  1881.         if sysError <> null
  1882.             request "Fehler: der Endpunkt des Clips ist auf die Voreinstellung festgelegt: ""0:05:00"""
  1883.             mmEndPoint of mediaRef = "0:05:00"
  1884.         end if
  1885.         
  1886.         sysSuspend = sS
  1887.         sysMediaSuspend = sMS
  1888.         if mmPlayable of mediaRef
  1889.             mmPlay mediaRef autoclose
  1890.         end if
  1891.     end if
  1892.     
  1893.     unlinkDLL sysToolBookDirectory & "tb30dlg.dll"
  1894. }
  1895.  
  1896. ACTION    "Automatisches Starten und Ausfⁿhren eines Buchs"
  1897. BEHAVIOR    "Beispielprogramm fⁿr ein fortlaufendes Buch."
  1898. HANDLERS    enterApplication, enterBook, enterBackground, buttonClick, buttonUp, buttonDown
  1899. CATEGORIES Seitenwechsel
  1900. ARG    Effekt    oneOf    "blinds,dissolve,drip,fade,iris,puzzle,tear"  is "fade"
  1901. ARG    Geschw    oneOf    "Normal,Fast,Slow"    is    "Normal"    
  1902. ARG PauseZeit    oneof    "1,2,3,4,5,6,7,8,9,10" is "5" help "Die Zeitdauer in Sekunden, die jede Seite angezeigt werden soll."
  1903. {
  1904.      send reader
  1905.     send sizeToPage
  1906.     set caption of mainWindow to name of this page
  1907.     forward
  1908.      
  1909.     -- unterbindet die Bildschirmaktualisierung
  1910.     set sysLockScreen to TRUE
  1911.     set sysLockScreen to FALSE
  1912.     
  1913.     show statusBar
  1914.     set caption of statusBar to "Leertaste gedrⁿckt halten, um die Demo abzubrechen"    
  1915.     
  1916.     while keyState(keySpace) <> down
  1917.         transition    "$$Effekt $$Geschw" to next page
  1918.         set caption of mainWindow to name of this page
  1919.         pause $$PauseZeit
  1920.     end while
  1921.     set caption of statusBar to " "
  1922. }
  1923.  
  1924. ACTION "Schrittweises Durchlaufen eines Clips"
  1925. BEHAVIOR "Zeigt ein Video oder eine Animation schrittweise an"
  1926. CATEGORIES Clips, Video
  1927. ARG ClipRef  Clip is "clip id 100" help "Zu spielenden Clip auswΣhlen."
  1928. ARG Schritt is "1" help "Eine ganze Zahl von 1 bis zur Anzahl der Einzelbilder im Clip."
  1929. ARG ClipRahmen OBJTYP "Stage" is "stage myStage" help "Clip-Rahmen fⁿr die Clip-Wiedergabe auswΣhlen"
  1930. ARG Verz÷g is "100" help "Verz÷gerung in ticks (1/100 Sekunde), also ist '100' = 1 Sekunde, '50' = 1/2 Sekunde."
  1931. {
  1932.     if mmIsOpen of $$ClipRef
  1933.         mmClose $$ClipRef wait
  1934.     end if
  1935.     mmOpen $$ClipRef  wait
  1936.  
  1937.     altZeitFor = mmTimeFormat of $$ClipRef 
  1938.     mmTimeFormat of $$ClipRef  = "frames"
  1939.     BildVar = $$Schritt
  1940.     
  1941.     maxFrame = mmLength of $$ClipRef 
  1942.     conditions
  1943.     when BildVar < 1
  1944.         BildVar = 1
  1945.     when BildVar > maxFrame
  1946.         BildVar = maxFrame
  1947.     end conditions
  1948.  
  1949.     mmCue $$ClipRef
  1950.  
  1951.     conditions
  1952.     when $$Verz÷g < 1
  1953.         myDelay = 1
  1954.     when $$Verz÷g > 231
  1955.         myDelay = 231
  1956.     else
  1957.         myDelay = $$Verz÷g
  1958.     end conditions
  1959.     step i from 1 to (floor(maxframe/BildVar))-1
  1960.         mmShow $$ClipRef  in $$ClipRahmen  wait
  1961.         pause myDelay
  1962.         mmStep $$ClipRef by BildVar
  1963.     end step
  1964.     mmShow clip "windmⁿhle"  in $$ClipRahmen  wait
  1965.     mmSeek clip "windmⁿhle" to maxFrame
  1966.     mmShow clip "windmⁿhle"  in $$ClipRahmen  wait
  1967.     mmTimeFormat of $$ClipRef  = altZeitFor
  1968. }
  1969.  
  1970. SCRIPT "Fortlaufendes Abspielen eines visuellen Clips"
  1971. BEHAVIOR "Mit der mmNotify-Botschaft k÷nnen Sie einen Animations- bzw. Video-Clips fortlaufend abspielen. Dieses Skript wird im Seitenskript implementiert."
  1972. CATEGORIES Clips,Video
  1973. ARG ClipRef CLIP is "clip id 100" help "Zu spielenden Clip auswΣhlen."
  1974. ARG ClipRahmen OBJTYP "Stage" is "stage myStage" help "Clip-Rahmen-Objekt fⁿr die Wiedergabe auswΣhlen"
  1975. {
  1976. to handle enterPage
  1977.     forward
  1978.     --Bei enterPage den Clip kennzeichnen und abspielen
  1979.     mmOpen $$ClipRef
  1980.     send playScore
  1981. end enterPage
  1982.  
  1983. to handle playScore
  1984.     mmPlay $$ClipRef in $$ClipRahmen notify self
  1985. end playScore
  1986.  
  1987. to handle mmNotify mediaRef, commandName, cErgebnis
  1988.     if (mediaRef = $$ClipRef) and (cErgebnis = "successful")
  1989.         send playScore
  1990.     end if
  1991. end mmNotify
  1992. }
  1993.  
  1994. SCRIPT "Fortlaufendes Abspielen eines beliebigen Clips"
  1995. BEHAVIOR "Mit der mmNotify-Botschaft k÷nnen Sie einen Clip fortlaufend abspielen. Dieses Skript wird im Seitenskript implementiert."
  1996. CATEGORIES Clips
  1997. ARG ClipRef CLIP is "clip id 100" help "Den abzuspielenden Clip auswΣhlen."
  1998. {
  1999. to handle enterPage
  2000.     forward
  2001.     --Clip bei enterPage kennzeichnen und abspielen
  2002.     mmOpen $$ClipRef
  2003.     send playScore
  2004. end enterPage
  2005.  
  2006. to handle playScore
  2007.     mmPlay $$ClipRef notify self
  2008. end playScore
  2009.  
  2010. to handle mmNotify mediaRef, commandName, cErgebnis
  2011.     if (mediaRef = $$ClipRef) and (cErgebnis = "successful")
  2012.         send playScore
  2013.     end if
  2014. end mmNotify
  2015. }
  2016.  
  2017. SCRIPT "Festlegen des Text eines Felds auf die Clip-Position"
  2018. BEHAVIOR "Zeigt die aktuelle Position eines Clips in einem Feld wΣhrend des Clip-Ablaufs an"
  2019. CATEGORIES Werkzeuge
  2020. ARG ClipRef CLIP is "clip id 100" help "Clip auswΣhlen, der ⁿberwacht werden soll."
  2021. {
  2022. -- Dieses Skript wird im Skript des Felds implementiert, das die Position anzeigen soll
  2023. notifyBefore idle
  2024.     cName = $$ClipRef
  2025.     if (mmIsOpen of cName)
  2026.         oldPos = my text
  2027.         newPos = mmPosition of cName
  2028.         if oldPos <> newPos
  2029.             my text = newPos
  2030.         end if
  2031.     end if
  2032. end idle
  2033. }
  2034.  
  2035.