PDA

Просмотр полной версии : Selected text


artcraft
23.08.2005, 01:53
создаю текстовое поле:
createTextField("txt", mc.getNextHighestDepth(), 5, 5, 300, 610);
txt.type = "input";
txt.multiline = true;
txt.wordWrap = true;
txt.border = true;
txt.html = true;
txt.htmlText = "<b>Some</b> text here";
на сцене есть кнопка, после нажатия на которую, нужно узнать какой фрагмент текста в текстовом поле выделен, но при клике на кнопку - фокус с текста слетает и выделение теряется :~(
какие есть идеи? спасибо.

MyXus
23.08.2005, 02:08
всё время помнить выделение и по потере фокуса ставить его на место =)

artcraft
23.08.2005, 02:52
всё время помнить выделение и по потере фокуса ставить его на место =)такой метод не слишком элегантный, но боюсь это действительно единственный способ... :rolleyes:
может есть принципиально другие идеи?

MyXus
23.08.2005, 03:26
по нажатию кнопки фокус слетит полюбас. для того чтобы вернуть его назад нужно знать где он был и ставить обработчик (либо по таймеру либо по ивенту).. По другому - нужен другой текстфилд =)

artcraft
23.08.2005, 03:34
По другому - нужен другой текстфилд =)это уже интереснее

Nox Noctis
23.08.2005, 10:00
если напрямик - можно так.
this.createTextField("TF", 0, 0, 0, 0, 0);
TF.autoSize = true;
TF.text = "Jackdaws love my big sphinx of quartz...";
//
TF.onKillFocus = function()
{
this.enterframe.removeMovieClip();
};
TF.onSetFocus = function()
{
if (!this.enterframe) {
var clip = _root.createEmptyMovieClip.call(this, "enterframe", 0);
} else {
var clip = this.enterframe;
}
this.select = {};
clip.onEnterFrame = function()
{
var tp = this._parent;
if (Selection.getFocus() == String(tp)) {
tp.select.s = Selection.getBeginIndex();
tp.select.e = Selection.getEndIndex();
tp.select.c = Selection.getCaretIndex();
}
};
};
// на кнопке
btn.onPress = function()
{
trace(TF.select.s); // индекс начала выделения
trace(TF.select.e); // индекс окончания выделения
trace(TF.select.c); // индекс каретки
};но я думаю есть способ лучше.

artcraft
23.08.2005, 17:11
заменить this.enterframe на интервал и будет то о чем говорил yXus :~)

silin
23.08.2005, 18:42
можно onMouseMove самого текстфилда использовать:
this.createTextField("tf", 0, 0, 0, 0, 0);
tf.autoSize = true;
tf.text = "Jackdaws love my big sphinx of quartz...";
tf.sel='';
Mouse.addListener(tf)
tf.onSetFocus = function(){
this.onMouseMove=function(){
this.s=Selection.getBeginIndex();
this.e=Selection.getEndIndex();
}
}
tf.onKillFocus=function(){
this.sel=this.text.substring(this.s,this.e);
delete this.onMouseMove;
}

btn.onPress = function(){
trace(tf.sel);
};

Nox Noctis
23.08.2005, 18:49
да, ты прав :))

artcraft
23.08.2005, 20:45
this.createTextField("tf", 0, 0, 0, 0, 0);
tf.autoSize = true;
tf.text = "Jackdaws love my big sphinx of quartz...";

btn.onRollOver = function(){
if(Selection.getFocus() eq tf ){
s=Selection.getBeginIndex();
e=Selection.getEndIndex();
}else{s=e=0;}
}

btn.onRelease = function(){
sel=tf.text.substring(s,e);
trace(sel);
Selection.setFocus(tf);
Selection.setSelection(s,e);
}вот оно :~)