Ein Button, dessen Grafik
sich bei Rollover und Mousedown ändern soll das ist
scheinbar eine einfache Übung. Allerdings sind doch einige
Eventualitäten zu bedenken: Was soll geschehen, wenn der Anwender
zwar auf den Button klickt, dann die Maus aber wegbewegt
und vielleicht doch wieder zurück auf den Button bewegt? Und
andersherum: wenn er woanders klickt, aber über dem Button
losläßt? Oder wenn sich die Maus über dem Button
befindet, wenn der Frame erreicht wird?
Das folgende Behavior enthält das notwendigste Rüstzeug,
um ein "typisches" Buttonverhalten mit drei Zuständen
(Normal, Gehilitet, Gedrückt) zu erreichen. Folgende Überlegungen
sind umgesetzt:
Wenn der Anwender
außerhalb des Buttons das Mousedown erzeugt, interessiert
das unseren Button nicht (the
stilldown-Abfrage).
Wenn er auf den
Button klickt, dann darf er den Button verlassen und zurückkommen,
und auf mouseup wird dann trotzdem die Buttonaktion (domyStuff)
ausgelöst.
Wenn er den Button
verläßt und außerhalb ein mouseUp
produziert, wird keine Aktion ausgelöst.
Jedes Verlassen
des Buttons setzt seine Grafik in den Nullzustand zurück.
on beginSprite
me
pMousedDown = 0
m_nl = member("nl")
m_hi = member("hi")
m_dn = member("dn")
end
on mouseDown me
pMousedDown = 1
sprite(spritenum).member = m_dn
end
on mouseUp me
-- exit falls kein mouseDown:
if NOT(pMousedDown) then exit
pMousedDown = 0
sprite(spritenum).member = m_hi
updatestage
domyStuff me
end
on mouseUpOutside
me
pMousedDown = 0
sprite(spritenum).member = m_nl
end
on mousewithin
me
if not(the stilldown) then
sprite(spritenum).member = m_hi
end if
end
on mouseEnter
me
if pMousedDown then
sprite(spritenum).member = m_dn
else if not(the stillDown) then
sprite(spritenum).member = m_hi
end if
end
on mouseLeave
me
if not(the stillDown) OR pMousedDown then
sprite(spritenum).member = m_nl
end if
end
on domyStuff
me
beep
end
Anstelle von beep können
Sie natürlich auch eine sinnvollere Button-Aktion einsetzen.
Die Button-Darsteller der Werkzeugpalette (Typ #button)
verhalten sich übrigens standardmäßig etwas anders.
Erst wenn Sie die Systemproperty the
buttonstyle = TRUE setzen, sind auch bei diesem Darstellertyp
die obigen Anforderungen erfüllt. Ein solches Skript erzeugt
einen Button-Darsteller mit Standard-OS-Verhalten: