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
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???