HowTo:
Hilites
für Textdarsteller
|
|
Home
Workshop-Seite
|
Hilite durch Kolorierung
Der
Befehl hilite
zum Invertieren von einzelnen Textabschnitten ist nur auf Felder,
nicht aber auf Textdarsteller anwendbar. Als Alternative bietet
sich das Setzen der Vordergrundfarbe (color)
für die Zeile unter dem Mauscursor (pointToLine)
an. Das folgende Behavior enthält die grundlegenden Funktionen
und arbeitet mit der in der Prozedur beginSprite
fest voreingestellten Hilite-Farbe grün.
property pmem,
oldml, pHiliteColor property pNonHiliteColor
on beginSprite me
pmem = sprite(me.spritenum).member
pNonHiliteColor = rgb(255, 255, 255) --
weiss
pHiliteColor = rgb(0, 255, 0) -- gruen
oldml = 1
end
on mousewithin me
mloc = the mouseLoc
ml = pointToLine(sprite me.spritenum, mloc)
put ml
if ml <> oldml then
pmem.line[oldml].color = pNonHiliteColor
pmem.line[ml].color = pHiliteColor
oldml = ml
end if
end
on mouseLeave me
pmem.color = pNonHiliteColor
end
|


 |
|
|
Texthilite mit Überleger
Das
oben vorgestellte Kolorieren einzelner Abschnitte eines Textdarstellers
ist insbesondere auf älteren PC sehr langsam. Kommen verzögernde
Faktoren wie von "Kopieren" abweichende Farbeffekte oder
das Ausschalten der Option "Direkt auf der Bühne"
hinzu, ist es leicht möglich, daß auf einem Pentium 200
Reaktionszeiten im Sekundenbereich entstehen, was sicher nur in
wenigen Anwendungsfällen akzeptabel ist.
Eine Alternative ohne diese Performanceprobleme ist die Überlagerung
des Textdarstellers mit einem QuickDraw- oder Bitmapdarsteller,
dessen Höhe und Breite so gewählt wird, daß er genau
eine Zeile des Textdarstellers überlagert.
Wählen Sie als Farbeffekt z. B. "Umkehren", um eine
Invertierung der unter der Fläche liegenden Textzeile zu erreichen.
Das
Behavior des Text-Sprites setzt voraus, daß sich die QuickDraw-Fläche
im unmittelbar folgenden Kanal (me.spritenum+1)
befindet und die Zeilenhöhe innerhalb des Textes konstant bleibt.
In der Prozedur beginSprite
werden die Properties pmem
(mit dem Sprite verbundener Darsteller), oldml
(zuvor ausgewählte Textzeile) und offs
(die Höhe der ersten Textzeile) initialisiert und die QuickDraw-Fläche
in den nicht sichtbaren Bereich außerhalb der Bühne verschoben.
Sobald sich der Mauscursor innerhalb des Textsprites befindet, prüft
die Prozedur mouseWithin
mit Hilfe des Funktion pointToLine(),
ob sich die aktuelle Zeile von der zuvor gewählten unterscheidet.
Ist dies der Fall, wird die vertikale Koordinate der neuen Textzeile
ermittelt (linePosToLocV())
und die QuickDraw-Fläche neu positioniert.
Die Prozedur mouseLeave
sorgt dafür, daß die QuickDraw-Fläche ausgeblendet
wird, sobald der Mauscursor den Textsprite verläßt.
|


 |
|
|
property
pmem, dest, oldml, offs
on beginSprite me
pmem = sprite(me.spritenum).member
olml = 0
offs = linePosToLocV(member pmem, 1)
sprite(me.spritenum+1).locV = -1000
updatestage
end
on mousewithin me
mloc = the mouseLoc
ml = pointToLine(sprite me.spritenum, mloc)
if ml <> oldml then
linelocV = linePosToLocV(member pmem, ml)
- offs
sprite(me.spritenum+1).locV = sprite(me.spritenum).top
+ linelocV
updatestage
end if
end
on mouseLeave me
sprite(me.spritenum+1).locV = -1000
updatestage
end
Gerd Gillmaier
|


 |
|