D7WS HOMEPAGE WORKSHOP NEUE XTRAS GALERIE WORKSHOP Automatic Translation LESERSERVICE BUCH NEWS

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

 




 


Directorworkshop.de ist © Joachim Gola & Gerd Gillmaier 1998-2002. Alle Rechte vorbehalten.