TextField.setNewTextFormat( ) Method | Flash 6 |
sets the default formatting for the text field |
An instance of the TextFormat class.
The setNewTextFormat( ) method sets the default formatting for theField. After it is invoked, any text added to theField via TextField.text or TextField.replaceSel( ), or by the user, is formatted according to the property values of textFormatObject. However, setNewTextFormat( ) has no effect on characters already in theField. To reformat characters already in theField, use setTextFormat( ).
The setNewTextFormat( ) method is perfect for establishing the default formatting of a text field whose content is likely to change. For example, suppose we want to display a player's score in blue, 10-point Courier New. Each time the player earns points, the score changes and we update our score text field. To ensure that the formatting of the text field is retained for each update, we use setNewTextFormat( ) immediately after the field is created:
// Create the text field. this.createTextField("score_txt", 1, 50, 50, 100, 20); // Assign the default TextFormat. Make sure this comes before any text is assigned! score_txt.setNewTextFormat(new TextFormat("Courier New", 10, 0x0000FF)); // Set score output. score_txt.text = "0000"; // Change score output. Formatting is retained. score_txt.text = "0020";
To examine the existing default format for theField, use getNewTextFormat( ). For a detailed description of TextFormat objects, see the TextFormat class. Note that text can also be formatted with HTML, as described under TextField.html and TextField.htmlText.
When the insertion point is placed in a text field by the user or with Selection.setSelection( ), the field's default text format is set to match the character to the insertion point's right (or left, in the case of the last character). To prevent any subsequent user input from picking up the formatting of existing text, we must manually restore the default text format with an interval, as shown in Example 18-8. The workaround, however, is not perfect�on slower machines, the interval cannot fire fast enough to intercept every keystroke and the occasional character takes on the formatting of existing text.
// Create the text field and set it to accept user input this.createTextField("theField_txt", 1, 0, 0, 150, 40); theField_txt.type = "input"; // Store the original new text format in a property theField_txt.newTextFormat = theField_txt.getNewTextFormat(); // Define a callback to handle setFocus events theField_txt.onSetFocus = function (oldFocus, newFocus) { // If the field is focused, start an interval that // continuously resets the original newTextFormat if (newFocus = = this) { this.restoreInterval = setInterval(this, "restoreNewTextFormat", 1); } else if (oldFocus = = this) { // Stop resetting if the field is unfocused clearInterval(this.restoreInterval); } } // Create the interval function to reset the newTextFormat theField_txt.restoreNewTextFormat = function () { this.setNewTextFormat(this.newTextFormat); } // Register the text field to receive setFocus events Selection.addListener(theField_txt); // Assign the field some text for display theField_txt.text = "What time is it?" // Create a TextFormat object with a font property of "Arial" sansFormat = new TextFormat("Arial"); // Apply the format to the word 'What', characters 0 to 3 (inclusive) theField_txt.setTextFormat(0, 4, sansFormat);
When text is inserted with the replaceSel( ) method, it's easy to force the appropriate new text format�simply invoke setNewTextFormat( ) after the call to Selection.setSelection( ), as shown in Example 18-9.
// Focus the field we're going to update Selection.setFocus(theField_txt); // Position the insertion point at the first character Selection.setSelection(1,1); // *Now* set the newTextFormat theField_txt.setNewTextFormat(theField_txt.newTextFormat); // Proceed with replaceSel() call theField_txt.replaceSel("this is the new text");
The Selection class, TextField.getTextFormat( ), TextField.getNewTextFormat( ), TextField.replaceSel( ), TextField.setTextFormat( ), the TextFormat class