我似乎无法使用fl.findObjectInDocByType()
与fl.getDocumentDOM().selection
返回的信息。
我想使用document.setTextRectangle
重新调整使用fl.findObjectInDocByType()
生成的数组中的某些文本字段的大小。
我可以轻松访问所有textObject属性,但由于document.setTextRectangle
需要当前选择,我不知所措。
设置选择的文档中的示例是:
fl.getDocumentDOM().selection = fl.getDocumentDOM().getTimeline().layers[0].frames[0].elements[0];
fl.findObjectInDocByType()
返回包含以下属性的对象数组:(object.timeline
,object.layer
,object.frame
,object.parent
)
但这些是对象,并且没有fl.getDocumentDOM().selection=
所需的数组索引号的属性...
var doc = fl.getDocumentDOM();
var textFieldArray = fl.findObjectInDocByType("text", doc);
for (var i=0; i < textFieldArray.length; i ++){
fnResizeTheTextField(textFieldArray[i]);
}
function fnResizeTheTextField(theTextField){
//force current selection to be theTextField
//doc.selection MUST be an array, so assign theTextField to an array...
var selectArray = new Array();
selectArray[0] = theTextField.obj;
var theTimeline =theTextField.timeline;
var theLayer =theTextField.layer;
var theFrame =theTextField.frame;
doc.currentTimeline =theTextField.timeline;
doc.selection = doc.getTimeline().theLayer.theFrame.selectArray;//error
//resize the text rectangle
doc.setTextRectangle({left:0, top:0, right:1000, bottom:1000});
}
}
结果:Error:doc.getTimeline().theLayer has no properties
答案 0 :(得分:2)
事实证明,ObjectFindAndSelect.jsfl脚本已经包含一个专门用于此的函数:fl.selectElement()。更优雅:
var doc = fl.getDocumentDOM();
// generate an array of elements of type "text"
var textFieldArray = fl.findObjectInDocByType("text", doc);
for (var i=0; i < textFieldArray.length; i ++){
fnResizeTheTextField(textFieldArray[i]);
}
function fnResizeTheTextField(theTextField){
//force current selection to be theTextField
fl.selectElement(theTextField,false);//enter 'edit mode' =false...
//resize the text rectangle
doc.setTextRectangle({left:0, top:0, right:1000, bottom:1000});
}
}
答案 1 :(得分:0)
我找到了答案。要为文档级操作选择任何内容,您还必须将Flash重点放在该对象的关键帧上。
所以,如果我遍历fl.findObjectInDocByType()创建的对象数组,我会使用这段代码正确地对焦于对象:
function fnMakeFlashLookAt(theObject){
doc.currentTimeline =theObject.timeline;
doc.getTimeline().currentLayer =theObject.layer;
doc.getTimeline().currentFrame =theObject.frame;
}
这可能不适用于嵌套在符号内的对象。
答案 2 :(得分:0)
我最近遇到过类似的问题,显然所有关于setTextRectangle()
的谷歌搜索结果都指示我们。令人难以置信的是,jsfl的文档记录很差:)
如果您需要在不在舞台上的库项目中使用setTextRectangle()
,则需要先打开以编辑该项目。
这是解决我问题的代码:
library.selectItem(libraryItemName);
doc.selection = [tf];//where tf is the reference to textfield we need to edit
doc.library.editItem(libraryItemName);
doc.setTextRectangle({left:l, top:t, right:r, bottom:b});
doc.selectNone();
如果您有更好的工作解决方案,请发布。我希望它节省了一些人的时间。祝你好运!