Mats Leid� <[EMAIL PROTECTED]> wrote:
> I am trying to mimick the phonebook and text scroll behaviour of a cell
> phone... If for example the name and the number is too long for one
> line... my cellular...  shows as many characters as fits in one line,
> then waits, then shows the rest

Hi Mats,

Here's a behavior that will do what you want by setting the scrollTop of the
field or text member that the text appears in.  To change the text, you can
use:

  sendSprite(x, #mSetText, "your new string")

Cheers,

James


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

-- SWAP LINES --
--
-- Simulates the way the LCD display in a cell phone will show a long
-- line of text in short chunks.



-- PROPERTY DECLARATIONS --

property delay

property pMember
property pScroll
property pLineHeight
property pTimeOut



-- EVENT HANDLERS --

on beginSprite(me)
  -- Initialize properties
  pMember = sprite(me.spriteNum).member
  pScroll = 0
  
  -- Set the properties of the member so that the behavior will work
  pMember.boxType   = #fixed
  pMember.wordWrap  = TRUE
  pMember.scrollTop = 0
  
  -- Set the height of the sprite to show only one line of text
  case pMember.type of
    #field:
      pLineHeight  = pMember.lineHeight
      tRect        = pMember.rect
      tRect.bottom = tRect.top + pLineHeight
      pMember.rect = tRect
      
    #text:
      pMember.topSpacing     = 0
      pLineHeight            = pMember.charPosToLoc(1).locV + 1
      pMember.height         = pLineHeight
      pMember.fixedLineSpace = 0
  end case
  
  -- Create a timeOut object to swap the lines on a regular basis
  pTimeOut = timeOut(string(me)).new(delay, #mSwapLine, me)
end beginSprite



on endSprite(me)
  -- Prevent memory leaks
  pTimeOut.target = 0
  pTimeOut.forget()
end endSprite



-- PUBLIC METHODS --

on mSetText(me, aString) ---------------------------------------------
  -- INPUT:  <aString> should be a string
  -- ACTION: Restarts the swap line cycle with a new text string
  --------------------------------------------------------------------
  
  if stringP(aString) then
    -- Reintitialize text display
    pMember.text      = aString
    pMember.scrollTop = 0
    pScroll           = 0
    
    -- Reinitialize timeOut
    pTimeOut.target   = 0
    pTimeOut.forget()
    pTimeOut          = timeOut(string(me)).new(delay, #mSwapLine, me)
  end if
end mSetString



on mSwapLine(me) -----------------------------------------------------
  -- SENT BY: pTimeOut
  -- ACTION:  Shows the next line of text after the chosen delay
  --------------------------------------------------------------------
  
  tHeight = pMember.height - pLineHeight
  
  if not tHeight then
    -- There are no additional lines to swap in
    pTimeOut.period = 0
  else if pScroll < tHeight then
    -- Scroll down to the next line
    pScroll = pScroll + pLineHeight
  else
    -- Scroll back up to the beginning
    pScroll = 0
  end if
  
  pMember.scrollTop = pScroll
end mSwapLine



-- PARAMETERS --

on getPropertyDescriptionList(me)
  tPropertyList = [:]
  
  tPropertyList[ \
#delay] = [ \
 #comment: "Milliseconds during which each line is shown", \
 #format:  #integer, \
 #range:  [#min: 0, #max: 10000], \
 #default: 1000 \
]
  
  return tPropertyList
end getPropertyDescriptionList

[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