Opfriscursus Hypertalk / Zelfstudiehandleiding

    BEKNOPTE ZELF-STUDIEHANDLEIDNG HYPERTALK VOOR TO EN TCW STUDENTEN

    Door Frans Houweling, Ben Reimerink en Rik Min

    1e versie okt. 1996.

    2e versie okt. 1997.

    Deze handleiding is bij een aantal vakken goed te gebruiken en bevat stof zoals bij praktica regelmatig aan de orde komt.

    Dit is een samenvatting van de sheets van de colleges multimedia-programmeren. Zie voor details en andere zaken die aan de orde komen ook het boek van Shafer.

    De taal

    'HyperTalk' is een scripttaal (een object georienteerde programmeertaal) binnen HyperCard. Elk object van of in HyperCard kan geprogrammeerd worden met kleine of grote scriptje.

    De programmeertaal bestaat uit:

    • actie elementen
      deze zorgen ervoor dat er iets in de omgeving waarin je werkt gebeurt.
    • passieve elementen
      controle structuren (if then else etc.)
      variabelen
      eigenschappen - globale properties en properties die bij een of meerder objecten horen. Zie pagina 291 van Shafer.
      chunks
    • objecten, zoals button, card, stack, field, window etc.

    Variabelen en actie elementen hebben een naam die uit een woord bestaat. Deze mag wel lang zijn.

    Objecten

    Objecten mogen namen hebben die uit meerder woorden bestaan. Begin met een letter.
    Het eerste karakter is belangrijk bijv go 1234nogwat gaat mis, want hypercard ziet de het eerste karakter en ziet dus een cijfer, en neemt aan dat het wel een cardID zal zijn.

    Actie elementen

    Aktie elementen zijn:
    • messages - boodschappen
    • handlers
    • scripts

    Alle commando's die je geeft in hypertalk zijn messages.
    Er zijn gewone en system messages. System messages worden gegenereerd door Hypercard kom ik later op.

    Als programmeur verstuur je gewone messages (genereer) je door een aanroep Bijv VISUAL. Bijv. visual effect barn door close (visual is de message-naam de rest zijn parameters.

    De gebruiker van de stack kan ook boodschappen laten versturen. De drie M's: Mouse, Menu en MessageBox. + Keyboard. Hieraan kun je dan acties verbinden.

    De gestuurde messages volgen een object hierarchie en je kunt deze doorbreken door send en pass te gebruiken.

    Op blz. 58 van het boek van Shafer staat de message hierarchie.

    3 M's

    • menu en messageBox messages gaan direct naar het kaartscript
    • mouse messages worden afgevangen door handlers in het object waarop geklikt wordt.
    • Heeft het desbetreffende object een handler voor de gestuurde message dan wordt de message daar afgehandeld. Zo niet dan wordt de message doorgestuurd naar het naasthoger gelegen object

    Diversen

    • FIELD en BUTTON
    • CARD
    • BACKGROUND
    • STACK
    • EXTERNALS
    • LIBRARY STACKS
    • LIBRARY EXTERNALS
    • HOME STACK
    • HOME STACK EXTERNALS
    • HYPERCARD EXTERNALS
    • RESOURCES bijv. de stack dieren. Zie laatste kaart.
    • HYPERCARD

    Je kunt de hierarchie uitbreiden met libraries d.m.v. start using "stackname" (stop using "stackname" als niet meer nodig). In de hierarchie zitten dus externals van jezelf, van de home stack en van hypercard

    Pas op: heb je op een kaart en op je stack geen on Opencar, maar een van de lybraries heeft deze wel in het stackscript, dan wordt die wel uitgevoerd terwijl je dit misschien niet wilt.

    Messages

    Alle messages kun je afvangen d.m.v. Event handlers

    Handlers

    Er zijn twee soorten handlers Event Handlers en function handlers.

    Je kunt ook zelf een handler schrijven om een door jezelf gedefieerde message af te vangen.

    Een of meerdere Handlers vormen een script. Alle Objecten hebben een script.

    Variables

    Variabelen zijn opslagplaatsen van waarden.

    met put zet je iets in een variabele of in een veld.

    gebruik je alleen put dan komt het in de message Box.

    Speciale waarden

    Speciale variabelen zijn
      IT. Alles van GET komt in IT. Het antwoord van answer, ask en read from file komt in IT.

    Global tegenover Local

    Global betekent dat de scope van de variabele groter is dan in de handler alleen. Elke keer dat je wilt refereren aan een globale variabele moet je het woordje "global" gebruiken.

    Containers

    Containers zijn plaatsen die iets kunnen bevatten. Een Variabele is dus een container.

      IT, ME, the TARGET en TARGET ....

      the Selection (de gehighlighte text in een veld)....

      Messagebox, Field.....

    Targets

    • extra aandacht voor target
    • The target verwijst naar het object dat de message ontvangt
    • Me is het object in wiens script de handler staat dit wordt uitgevoerd
    • Target is de inhoud van the target

    Chunks

    Chunks zijn delen van containers

    • The selection
    • Deze is leeg als er niets geselecteerd is.
    • Lines, Words, characters, Items
    • Itemdelimeter is meestal een komma maar kan ook iets anders zijn.
    • Set itemdelimeter to ":"

    put werkt ook met velden en met chunks. Bijv. Put "something" after the selection

    put "anything" before item 3 of line 5 of card field .......

    System messages

      Send to
      pass message (een hoger in de hierarchie)
      Mouse Messages
      Keyboard messages
      On openstack
      On CloseField
      etc.
      Menu Messages
      On Domenu
      Help message
      Window Messages
      De idle message

      Kaart en stack management

      Navigeren door je stack gaat met het 'go' menu of vanuit het script met een 'go' message.

      • Je kunt ook navigeren met het navigator palette.
      • Je kunt m.b.v. find ook springen naar een kaart waarop speciale tekst (in een veld) staat. Je gaat dan zoeken naar die bepaalde tekst.
      • Je kunt op vijf verschillende manieren zoeken: normaal met find : zoekt naar woorden die beginnen met tekst.
      • find whole : zoekt op exacte tekst in een veld
      • find word : zoekt op exacte tekst als gehele woorden eventueel in meerdere velden
      • find string (meerdere woorden in een veld) en find chars (meerdere woorden in meerdere velden)
      • het gaat hier om het opgeven waarnaar gezocht moet worden niet om wat er gevonden wordt
      • je kunt ook zoeken in een bepaald veld
        find "......" in field "fieldname"

      Als find niets vindt dan is the result empty.

      Na het find commando zijn er speciale variabelen van Hypercard gevuld

      • The FoundText
      • The FoundLine
      • The FoundField
      • The FoundChunk

      Markeren

      Je kunt kaarten ook markeren bijv door te kijken of in een bepaald veld een bepaald woord staat.
      Mark cards where field 'mood' contains 'upbeat'
      mark gaat na het vinden van de eerste kaart gewoon door met zoeken naar de volgende. etc.
      je kunt dan zeggen: go to next marked card.

      Push card

      Met push card kun je een kaart op een speciale stapel zetten (eigenlijk is dit markeren) je blijft na push waar je bent, zodat je later naar deze kaart kan springen zonder te weten waar hij zich in de stack bevindt of hoe hij heet. Dit gaat met pop card.

      Poppen

      Je kunt ook poppen naar een container. De naam van kaart komt dan in de container, de kaart wordt van de stapel afgehaald.
      Later kun je dan m.b.v. go to card naar die kaart gaan.

      Show all cards

      Met show all cards kun je alle kaartpresenteren.

      Text en data management

      Velden kunnen uitgelezen worden d.m.v. get
      en worden gevuld d.m.v. put

      je kunt get doen op chunks

      get line 1 of card field test of card een
      opvragen van het aantal karakters van een chunk

      zetten van de cursor in een veld met select

      selecteren van alle tekst met

      • select text of card field ......
      • en deselecteren met select empty

      Offset van een woord in een veld geeft de eerste positie aan. Daarmee kun je andere woorden aangeven t.o.v. de offset.

      Het type commando stuurt karakters naar de kaart (bitmapped tekst) of naar een actief veld op de plaats van de cursor (niet met into, after of before).

      Met de message delete kun je woorden, karakters etc. i.h.a. chunks verwijderen uit containers.

      Strings voeg je samen met & of && (laatste geeft een spatie erbij).

      Speciale karakters

      Retrun etc.
      clicktext, clickline,clickchunk

      Denk eraan dat het veld gelockt is (set locktext to true)

      Tekenen

      tekenen met het tools palette
      draw multiple (met multispace property om meerdere imaages te "draggen"
      draw centered
      draw filled (verandering in de tools box
      vertel iets over choose met plaatje.

      Sound

      sound = muziek en spraak
      beepÕs
      play 'boing' of 'harpsichord' uit veld bijvoorbeeld
      tonen en noten.

      Iaff_geluid is xcmd uit hyplib. Gebruiken om een als iaff gesavede soundedit file geef de lange filenaam mee.

      Spraak

      Dit zijn ook XCMDÕs en tevens moet de speakmanager op de PC geinstalleerd zijn. Dit kan alleen op de AV-MAcÕs
      SpeakThis 'string', waarbij 'string' bestaat uit een combinatie van tekst en
      pitch, rate, nmbr (NORM of LTRL)

      SpeakLikeThis index, tekst --- index is nummer van de stem
      Er zijn iets van 22 stemmen.

      Kijk naar de stack SpeakThis in de algemeen/PracticumVoorbeelden folder

      Muisklikken

      Muisklik Kwdranten en op de rand
      Mouse locatie opvangen.
      Bij muisklik in veld moet je ervoor zorgen dat het veld gelokt is en doe de menubalk weg, dan heb je het hele scherm.

      Lineaire bestanden

      • Playmovie: voor het afspelen van MM-dir bestanden. Vergeet de Player niet!!!! (staat op inlmedia voor TCW gebied)

      • QtMovie: zie het bestand The QuickTime XCMDs in de folder QuickTime XCMDs in de folder QuickTime in de folder MultiMedia in de folder MACPROG van TO1.sys

      Animatie

      • met kaarten en visual effect
      • met plaatjes en lock screen en unlock screen with visual effect
      • met het picture xcmd

      Klikken voor de gebruiker

      • klikken voor de gebruiker : click at.
      • gebruik van field als database.

      Speciale data types

        date, time, etc.

        ask
        answer
        ask file om te saven
        answer file om te openen

        alle antwoorden komen in IT

        Start hypercard about met domenu
        het Userlevel

      Rekenen

      In hypercard kun je ook rekenen
      met value(3+4)

      Er is een ordening in de manier van uitrekenen van expressies. Met haakjes kun je deze door breken
      De ordening is:
      • Machtverheffing komt eerst
      • verm en delen komen dan
      • optellen en aftrekken komen laatst

      Bij gelijke operatoren gaan we van links naar rechts.

      • put 3 + 4 into
      • add to
      • multiply by
      • divide by
      • subtract from

        Mod : Is de modulo functie Bijv 10 mod 8 = 2
        Div : is integer deling bijv. 10 div 3 = 3

        Standaard functies

        • average, max, min
        • abs, round, trunc
        • RandInt XCMD
        • sqrt, exp, exp1, exp2, ^
        • ln, ln1, log2
        • pi
        • trigoniometrische functies

        dial

        we kunnen hier niet bellen om te laten zien beep aantal keren.

        do

        do met een stukje hypertalk in een veld

        Wait

        • wait (for) 30
        • wait until of while
        • pauze (in hyplib)

        Open

        open applicatie (met de task button van hypercard, denk om de home stack of copieer).

        open bestand with word

        properties

        De cursor van hypercard heeft diverse shapes. (Set cursor to nr)

        Naam van de stack in drie uitvoeringen

        Script zetten

        Gebruik van een veld als lijst om uit te kiezen.
        Eventueel meerder keuzen.

        Buttons

        De diverse soorten buttons
        • Speciaal
        • de popup button.
        • De familie van radio-button

        Debuggen van je programma

        Als je niet meer op een kaart kan komen hoe moet je dan het kaartscript editten???

        Succes, Frans Houweling, 5 nov. 1997

          In HTML herschreven 2004. Gerestaureerd in 2020