
Corrections to Example 10-9: Password Entry Field on page 290.
The password example didn't correctly handle the delete key. It would delete the asterisks, but not the underlying password. Also, it wouldn't properly clear the password following an erroneous attempt to log in. Here is a corrected version that addresses these issues:
property pPassword
property pMyMember
on beginSprite me
set pMyMember = the member of sprite (the spriteNum of me)
-- Clear the password field
set pPassword = EMPTY
put EMPTY into member pMyMember
end
on keyDown me
-- Mask the field with asterisks.
set maskChar = "*"
if the key = RETURN or the key = ENTER then
-- Check the password when they hit RETURN or ENTER
if verifyPassword (pPassword) = TRUE then
-- Use this to jump to an appropriate frame in your movie
go frame "Top Secret"
else
alert "Invalid Password"
-- This is NEW to clear the field when the user entered
-- the wrong password
set pPassword = EMPTY
put EMPTY into member pMyMember
end if
else if isArrowOrTabKey() then
-- This is changed from the book. Allow the arrow or tab keys through.
pass
else if isDeleteKey() then
-- Handle the delete and backspace keys specially
if the selStart = 0 and the selEnd = 0 then
-- If the cursor is already at the left edge, there is nothing
-- to delete, so beep at the user.
beep
exit
end if
set insertPoint = max(1, the selStart)
set endPoint = max(1, the selEnd)
-- Delete the hilighted characters or the character to the left
-- of the insertion point
if insertPoint = endPoint then
delete char insertPoint of pPassword
else
delete char insertPoint to endPoint of pPassword
end if
pass
else
-- Determine which portion of the field to replace
set insertPoint = max(1, the selStart + 1)
set endPoint = max(1, the selEnd)
-- Insert the text at the cursor location
if insertPoint = endPoint then
-- In this case, no characters are hilighted.
-- Add the keystroke to the secret password
put the key before char insertPoint of pPassword
-- But display the masking character (asterisk) in its place
put maskChar before char insertPoint of member pMyMember
else
-- In this case, replace all the hilighted characters
put the key into char insertPoint to endPoint of pPassword
put maskChar into char insertPoint to endPoint of member pMyMember
end if
-- Update the cursor insertion point manually
set the selEnd = insertPoint
set the selStart = insertPoint
end if
end keyDown
-- This handler is new. It detects the delete key, backspace key or
-- keypad delete key. It replaces the "isEditingKey" handler from
-- the example which is no longer needed in this context
on isDeleteKey
case (the key) of
BACKSPACE:
return TRUE
end case
case (the keyCode) of
51, 117:
return TRUE
otherwise:
return FALSE
end case
end isDeleteKey
-- This handler is new. It detects the arrow keys and the Tab key
on isArrowOrTabKey
case (the key) of
TAB:
return TRUE
end case
case (the keyCode) of
123, 124, 125, 126:
return TRUE
otherwise:
return FALSE
end case
end isArrowOrTabKey
-- Verify the password
on verifyPassword password
-- Store your password here
if password = "platypus" then
return TRUE
else
return FALSE
end if
end verifyPassword
Zeus Home Page | LIAN TOC | DIAN TOC | Links | E-Mail
Place an Order | Downloads
| FAQ | GuestBook
| Glossary
Copyright © 1996-1999 Bruce A. Epstein. All Rights Reserved.
(The page last revised November 4, 1999)