Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Selected text (http://www.flasher.ru/forum/showthread.php?t=68239)

artcraft 23.08.2005 01:53

Selected text
 
создаю текстовое поле:
Код:

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

Цитата:

Сообщение от MyXus
всё время помнить выделение и по потере фокуса ставить его на место =)

такой метод не слишком элегантный, но боюсь это действительно единственный способ... :rolleyes:
может есть принципиально другие идеи?

MyXus 23.08.2005 03:26

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

artcraft 23.08.2005 03:34

Цитата:

Сообщение от MyXus
По другому - нужен другой текстфилд =)

это уже интереснее

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);
}

вот оно :~)


Часовой пояс GMT +4, время: 14:34.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.