Teo Petralia <[EMAIL PROTECTED]> wrote:

> I'm trying to do an exercise where the user click on a word and
> that word and the previous one (usually but not necessarily is
> the previous one) is highlighted, then the user click on another
> word always in the same paragraph and that word+previous is
> highlighted too, I would like that all the clicked words remain
> highlighted and not only the recent one.

Hi Teo,

If you are going to need two separate highlights in the same block of text,
you will not be able to use the hilite or selection keywords (for fields and
text respectively).

Instead, you can use Imaging Lingo, through a 32-bit bitmap member in a
separate sprite.  Make the bitmap member the colour you want the hilite to
appear in, and set its alpha channel to white.  The bitmap sprite will now
be invisible.  If you set chunks of the alpha channel to grey, the hilite
colour will appear at those spots, in a semi-transparent fashion.

You'll find below a behavior that does this for a text member.  It expects
to find a bitmap sprite in the following channel.

Cheers,

James


----------------------------------------------------------------------------

property mySprite     -- sprite(me.spriteNum)
property myMember     -- Text member of mySprite
property myLineHeight -- Assumes fixed line height
--
property myBitmap     -- Bitmap member in sprite in following channel


on beginSprite(me)
  mySprite = sprite(me.spriteNum)
  myMember = mySprite.member
  
  -- Assume fixed line height in myMember
  myLineHeight = myMember.charPosToLoc(1).locV - 1
  
  -- Prepare the bitmap member in the following sprite
  tSprite           = sprite(me.spriteNum + 1)
  tSprite.loc       = point(mySprite.left, mySprite.top)
  myBitmap          = tSprite.member
  tHilite           = image(mySprite.width, mySprite.height, 32)
  tHilite.fill(tHilite.rect, rgb(0, 0, 255)) -- Blue hilite
  tHilite.setAlpha(0)
  tHilite.useAlpha  = TRUE
  myBitmap.image    = tHilite
  myBitmap.regPoint = point(0, 0)
end beginSprite 



on mouseUp(me) -- Permanently hilites the word under the mouse
  tWord  = mySprite.pointToWord(the mouseLoc)
  tChar2 = myMember.text.word[1..tWord].char.count
  tChar1 = tChar2 - myMember.text.word[tWord].char.count
  
  tLoc1  = myMember.charPosToLoc(tChar1 + 1) - [0, myLineHeight]
  tLoc2  = myMember.charPosToLoc(tChar2 + 1)
  
  tRect  = rect(tLoc1, tLoc2)
  
  tHilite = myBitmap.image.extractAlpha()
  if tHilite.getPixel(tLoc1) = paletteIndex(0) then
    -- Hilite the word
    tColor = rgb(128, 128, 128) -- 50% transparency
  else
    -- A subsequent click removes the hilite
    tColor = rgb(255, 255, 255)
  end if
  
  tHilite.fill(tRect, tColor)
  myBitmap.image.setAlpha(tHilite)
end mouseUp

[To remove yourself from this list, or to change to digest mode, go to 
http://www.penworks.com/lingo-l.cgi  To post messages to the list, email 
[EMAIL PROTECTED]  (Problems, email [EMAIL PROTECTED]). Lingo-L is for 
learning and helping with programming Lingo.  Thanks!]

Reply via email to