TextFormat.getTextExtent( ) Method | Flash 6 |
returns the pixel dimensions of a string rendered according to a given TextFormat object |
The string to be measured in this character format.
An object with height and width properties.
The getTextExtent( ) method returns an object whose height and width properties tell us the anticipated size of text, formatted according to theFormat. It is used not to measure text already assigned to a text field but to determine the dimensions of any arbitrary string in a particular character format. We make these theoretical measurements when generating dynamic interfaces. For example, a string that is found to be too large in a certain format can be reformatted to fit available space. The following Example truncates text with an ellipsis (...) if the text does not fit in a text field.
The getTextExtent( ) method measures only character formats; it ignores the effect of all paragraph formats (word-wrapping, line breaks, margins, bullets, indent, block indent, etc). For example, the following code with indentation:
f = new TextFormat(); f.indent = 30; // Add indentation. trace(f.getTextExtent("test").width);
yields the same result as this code, with no indentation:
f = new TextFormat(); trace(f.getTextExtent("test").width);
The following code adds a new method, called setEllipsisText( ), to all text fields. Using getTextExtent( ), the method checks the width of a string before assigning it to a text field. If the string is too wide to fit in the field, the method crops the string and adds an ellipsis (...):
/* * Method: TextField.setEllipsisText() * Desc: Truncates text to fit in a text field, and adds * an ellipsis if necessary * Params: theText Text to assign to the text field */ TextField.prototype.setEllipsisText = function (theText) { // Retrieve the format for newly added text var format = this.getNewTextFormat(); // Initialize the substring being assigned to the field var theSubstring = theText; // Check how wide the text display area is. Subtract 8 to account // for the gutter between the text and the text field's border. var textRegion = this._width - 8; // Assume the string is too wide to fit var tooWide = true; // Check if our assumption is correct for (var i = theSubstring.length - 1; tooWide = = true && i > 0; i--) { // If the string is too wide to fit in the field... if (format.getTextExtent(theSubstring).width > textRegion) { // ...remove a character, add an ellipsis, then check again. theSubstring = theText.substr(0, i) + "..."; } else { // ...otherwise, the string will fit, so stop checking. tooWide = false; } } // Assign the corrected string to the text field this.text = theSubstring; } // Sample use of setEllipsisText() this.createTextField("theField_txt", 1, 100, 100, 150, 60); theField_txt.border = true; theField_txt.setEllipsisText("If this text is too long it will be truncated.");
TextField.border, TextField._height, TextField.textHeight, TextField.textWidth, TextField._width, TextFormat.size