AS2: получить истинную высоту TextField

Я создаю кучу текстовых полей во время выполнения, содержащих htmlText, проблема в том, что получение высоты TextField крайне неточно.

Если я обращаюсь к свойству TextField._height или TextField.height, оно даже близко не соответствует точности и может варьироваться от 0 до 1,5 высоты строки.

Я попытался поместить TextField в пустой MovieClip и получить высоту MovieClip, однако это возвращает ту же неточность. (Показано в примере)

Соответствующий код:

var format = new TextFormat();
format.size = 14;
format.align = "left";
format.font = "Arial";
format.color = 0x000000;
format.leading = 3;

var textBoxes:Array = new Array();

function createText(htmlString:String, isOption:Boolean, name:String) {
    var textY:Number;
    if(isOption) {
        var textMC:MovieClip = target.attachMovie("option", "txt_" + textBoxes.length, target.getNextHighestDepth());
        textMC.name.text = name;
    } else {
        var textMC:MovieClip = target.createEmptyMovieClip("txt_" + textBoxes.length, target.getNextHighestDepth());
    }
    var fieldContainer:MovieClip = textMC.createEmptyMovieClip("container", textMC.getNextHighestDepth());
    var textBox:TextField = fieldContainer.createTextField("textBox", fieldContainer.getNextHighestDepth(), studySettings.margin, studySettings.margin, target._width - (studySettings.margin * 2),0);
    textBox.autoSize = true;
    textBox.wordWrap = true;
    textBox.html = true;
    textBox.multiline = true;
    textBox.htmlText = htmlString;
    textBox.setTextFormat(format);
    textBox.embedFonts = true;
    textBox.selectable = false;
    textBox.antiAliasType = "advanced";
    if(isOption) {
        textMC.option = currentOption;
        textMC.enabled = false;
        textBox._y += textMC.background._y;
        textBox._width = textMC._width - (studySettings.margin * 3);
        textMC.background._width = target._width - (studySettings.margin * 2);
        textMC.background._height = fieldContainer._height + (studySettings.margin * 2);
        textMC._x = studySettings.margin;
        textMC.onRollOver = function() {
            this.background.gotoAndStop("over");
        }
        textMC.onRollOut = function() {
            this.background.gotoAndStop("up");
        }
        textMC.onRelease = function() {
            showStudy(study.caseIndex, study.choiceIndex, false, this.option);
            clearStudy(study, false);
        }
    }
    if(textBoxes.length) {
        var prebounds:Object = textBoxes[textBoxes.length - 1].getBounds(target);
        textMC._y = (isOption) ? prebounds.yMax + studySettings.margin : prebounds.yMax;
    } else {
        textMC._y = 0;
    }
    textBoxes.push(textMC);

Как я могу надежно получить высоту TextField?


person George Reith    schedule 23.10.2012    source источник


Ответы (1)


TextField.textWidth/TextField.textHeight должны возвращать фактические размеры содержимого поля.

Я считаю, что если вы используете эти измерения для макета, они не идеальны, если вы масштабируете TextField до текстового содержимого, обычно лучше добавить 10-20 к каждому измерению, иначе вы обрежете нечетный символ, но они вернут реалистичное значение, ширина/высота не будут отражать размеры.

Надеюсь это поможет.

person MickMalone1983    schedule 23.10.2012
comment
Я пробовал textMC.background._height = textBox.textHeight + (studySettings.margin * 2), где studySettings.margin = 15 и является постоянным. Тем не менее, textMC.background визуально меньше, чем текст в textBox. - person George Reith; 23.10.2012
comment
На самом деле я говорил об AS3 (моя вина, что не заметил), не использовал AS2 около пяти лет, но думаю, что в этом случае они одинаковы. Я считаю textWidth/textHeight ненадежными, они никогда не бывают такими большими, как само фактическое поле. Другая вещь, которую вы можете сделать, это размер поля, например, TextField.width = TextField.textWidth + A_CONST_AMOUNT (вам нужно будет поэкспериментировать), а затем установить размеры textMC.background из поля. Я делаю это, чтобы изменить размер полей, когда текст содержимого является динамическим, опять же, я обычно считаю, что добавление 10-20 достаточно, чтобы дать тексту место для отображения. - person MickMalone1983; 23.10.2012