Hi .. James I tried it but .. It's very hard code for me. Please, help me to finished this code.. Thanks.
----- Original Message ----- From: "James Newton" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Wednesday, March 20, 2002 5:11 PM Subject: Re: <lingo-l> SMS from Lingo > Chaiya Whangmongkollert <[EMAIL PROTECTED]> wrote: > > > If i have many button .. I can't insert the next character in to the display > > textfield. > > like this .. (button1 contains character ABC,button2 contains character > > DEF,button3 contans GHI) > > 1st click on1st button ...A > > 1st click on2nd button ..AD > > 2nd click on 3rd button .. ADH > > 3rd click on next button....... > > Hi Chaiya, > > You're going to need two behaviors: one on the button sprites and one on the > text display sprite. The behavior on the button sprite will allow you to > define a preset list of letters using the getPropertyDescriptionList() > handler, and then simply cycle through the list of letters on each press. > The behavior on the display sprite will work out where to place the incoming > letter, and reset the last input behavior so that you can place two letters > from the same button in a row. You could use a timeOut object in the > display behavior to differenciate between closely-spaced presses on a button > - "A" no "B" no "C" - and widely-spaced presses - "A"..."AA"..."AAA". > > > Here's a behavior for the input button sprites It assumes that the text > display sprite is in channel 13: > > -- LETTER INPUT ------------------------------------------------------------ > > -- PROPERTY DECLARATIONS -- > > property spriteNum -- channel in which this sprite appears > property letters -- string of letters this button cycles through > property pCounter -- number of letter in string used for input > property pMax -- number of letters in string > > > > -- EVENT HANDLERS -- > > on beginSprite(me) > pCounter = 0 > pMax = letters.char.count > end beginSprite > > > > on mouseUp me > pCounter = (pCounter mod pMax) + 1 > tLetter = letters.char[pCounter] > sendSprite(13, #mKeyPress, spriteNum, tLetter) -- HARDCODED > end > > > > -- PUBLIC METHODS > > on mReset(me) -------------------------------------------------------- > -- SENT BY the mKeyPress() and the mReset() handlers of the > -- Display Input behavior on the display (sprite 13) > -------------------------------------------------------------------- > > pCounter = 0 > end mReset > > > > -- BEHAVIOR PARAMETERS -- > > on getPropertyDescriptionList(me) > tPropertyList = [:] > > tPropertyList[ \ > #letters] = [ \ > #comment: "Letters typed in using this key", \ > #format: #string, \ > #range: ["ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"],\ > #default: "ABC" \ > ] > > return tPropertyList > end getPropertyDescriptionList > > ---------------------------------------------------------------------------- > > > And here's a behavior for the text display sprite: > > > -- DISPLAY INPUT ----------------------------------------------------------- > > -- PROPERTY DECLARATIONS -- > > property delay -- number of milliseconds before a button > -- switches from cycling letters to entering a > -- new letter > property pTimeOut -- timeOut object which uses the delay property > property pMember -- the text or field member of this sprite > property pLastButton -- spriteNum of the last button to input a letter > property pCharCount -- input position in text display > > > > -- SPRITE EVENT -- > > on beginSprite(me) > pMember = sprite(me.spriteNum).member > pMember.text = "" > > pLastButton = 0 > pCharCount = 0 > end beginSprite > > > > -- PUBLIC METHODS -- > > on mKeyPress(me, aSpriteNum, aLetter) -------------------------------- > -- SENT BY one of the Key Input instances > -- INPUT: <aSpriteNum> is the number of the input sprite that the > -- user clicked on > -- <aLetter> is the letter the user wants to input > -- ACTION: Adds <aLetter> to the appropriate place in the string > -------------------------------------------------------------------- > > if aSpriteNum <> pLastButton then > -- The user pressed this input button after a timeOut pause or > -- after a previously pressing a different button > > -- Move on to a new character > pCharCount = pCharCount + 1 > -- Reset the last button pressed so it starts from the beginning > sendSprite(pLastButton, #mReset) > -- Remember this button > pLastButton = aSpriteNum > > else > -- The user has pressed the same input button twice or more in > -- quick succession > if ilk(pTimeOut) <> #timeOut then > pCharCount = pCharCount + 1 > end if > end if > > -- tText = pMember.text > -- put aLetter into char pCharCount of tText > -- pMember.text = tText > pMember.char[pCharCount] = aLetter > > -- Allow a short pause before considering the next input from the > -- same sprite to be a new letter > me.mKillTimeOut() > pTimeOut = timeOut(string(me)).new(delay, #mReset, me) > end mKeyPress > > > > on mBackSpace(me) ---------------------------------------------------- > -- SENT BY the Backspace button > -- ACTION: Erases the last letter typed > -------------------------------------------------------------------- > > pMember.char[pCharCount] = "" > pCharCount = max(0, pCharCount - 1) > pLastButton = 0 > me.mKillTimeOut() > end mBackSpace > > > > on mReset(me) -------------------------------------------------------- > -- SENT BY the pTimeOut object if the user pauses between button > -- presses > -- ACTION: Allows the user to press the same button twice, with a > -- pause to enter another letter from the same button > -------------------------------------------------------------------- > > sendSprite(pLastButton, #mReset) > me.mKillTimeOut() > end mReset > > > > > -- PRIVATE METHODS -- > > on mKillTimeOut(me) -------------------------------------------------- > -- SENT BY mKeyPress(), mReset() > -- ACTION: Destroys pTimeOut cleanly > -------------------------------------------------------------------- > > if ilk(pTimeOut, #timeOut) then > pTimeOut.target = VOID > pTimeOut.forget() > pTimeOut = VOID > end if > end mKillTimeOut > > > > > -- BEHAVIOR PARAMETERS -- > > on getPropertyDescriptionList(me) > tPropertyList = [:] > > tPropertyList[ \ > #delay] = [ \ > #comment: "Milliseconds to wait to input new letter from same button", \ > #format: #integer, \ > #range: [#min: 0, #max: 2000],\ > #default: 500 \ > ] > > return tPropertyList > end getPropertyDescriptionList > > ---------------------------------------------------------------------------- > > > I'll let you work out the behavior for the Backspace button yourself. > > Cheers, > > James > > [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!] > [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!]
