FP 10.3.183.5和10.3.183.7中TextField错误的解决方法

时间:2011-09-29 00:28:25

标签: flash actionscript actionscript-2

我的客户在几年前开发的AS2应用程序遇到了很大的问题。

据我所知,这是由最近版本的Flash Player中的一个公认错误造成的(请参阅http://forums.adobe.com/message/3859034https://bugbase.adobe.com/index.cfm?event=bug&id=2941694)。

两个版本的FP受到影响(10.3.183.5和10.3.183.7),并且该错误已在10.3.183.10中修复。

显然,升级Flash Player将解决问题,但我们都知道用户并不总是这样做,而且她一直在收到有关此问题的电子邮件。

我正在考虑更新SWFObject代码以明确检测10.3.183.10并让ExpressInstall“鼓励”用户升级,但我不知道这是否会飞。

我已经尝试了一些搜索已经发现的解决方法,但在我的情况下都没有。

我想知道是否有人找到了解决此问题的可靠方法?

3 个答案:

答案 0 :(得分:2)

我要尝试的第一件事就是使用textField.htmlText而不是textField.text,看看是否有解决方法(尽管如果我这样做会感到惊讶)。

第二种可能的方法我可以看到修复它(这真的不太漂亮)是手动自动换行。以下是在AS3中,因为这是我使用的。我会留给你把它转换成AS2,但我认为这也应该可以在AS2中使用。

var text : String = "some text here";
var textField : TextField = new TextField();
textField.wordwrap  = false;
textField.multiline = false;
textField.autosize  = false;
textField.width     = MAX_TEXT_WIDTH;
//other formatting stuff

var words : Array  = text.split(" ");
var line  : String = words[0];
textField.text     = words[0];

var lines : Array = new Array();//will contain all lines
for(var i : int = 1; i < words.length; ++i)//start at second word
{
    textField.text += " " + words[i];//try adding another word to the line
    if(textField.textWidth > MAX_TEXT_WIDTH)//overflowed line
    {
        lines.push(line);
        line = words[i];
        textField.text = line;
    }
    else//doesn't overflow, line is still valid
    {
        lines += textField.text;
    }
}
lines.push(line);

var text : String = lines[0];
for(i = 1; i < lines.length; ++i)
{
    text += "\n" + lines[i];
}

textField.multiline = true;
textField.height = lines.length * HEIGHT_PER_LINE;//HEIGHT_PER_LINE can be found using getLineMetrics and 
                                                  //adding gutter pixels to the height - might have to 
                                                  //play a little with this
textField.text = text;

不确定这个编译(它很可能不是AS2兼容)但这应该给出一般的想法。做自己的文字,看看是否有效。在检查textWidth时,还要确保格式化应用于文本。我想你每次更改textField.text值时都需要调用setTextFormat(myTextFormat)。

我还看到,显然多行可能在该版本中不起作用。如果是这种情况,您可能必须为每一行创建一个新的TextField对象并偏移它们的y值,使它看起来像是相同的TextField(如果是这样的话,希望你没有在textFields上使用边框或背景) )

答案 1 :(得分:1)

既然问题已经解决,那么任何人都不太可能会想出一个解决方法。可能你建议的SWFObject方法是要走的路。只需检查版本是否在10.3.183.5和10.3.183.7之内,如果是,则显示ExpressInstall。

答案 2 :(得分:1)

我认为最合适的AS版本是

the_textfield.autoSize = false;
the_textfield.multiline = false;
the_textfield.wordWrap = false;

var words : Array  = the_textfield.text.split(" ");
var line  : String = words[0];
the_textfield.text  = words[0];

var lines : Array = new Array();

for (var i : Number = 1; i < words.length; ++i) {
    the_textfield.text += " " + words[i];

    if (the_textfield.textWidth > SOME_WIDTH) {
        lines.push(line);
        line = words[i];
        the_textfield.text = line;
    } else {
        line += " " + words[i];
    }
}
lines.push(line);

var t : String = lines[0];
for (i = 1; i < lines.length; ++i) {
    t += "\n" + lines[i];
}

the_textfield.text = t;

the_textfield.autoSize = true;
the_textfield.multiline = true;
the_textfield.wordWrap = false;

在我的情况下,我不得不使用SOME_WIDTH,但是文本字段是创作的,并且有一些奇怪的缩放事情正在发生,所以我只是根据经验计算出数字。