Форум 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)
-   -   Как добавить текст (http://www.flasher.ru/forum/showthread.php?t=128178)

getelse 01.08.2009 05:09

Как добавить текст
 
Здравствуйте, уважаемые знатоки.
Есть задача:
Есть текстовое поле input, и в него грузится текст.
Как сделать, если я хочу выделить какой-нибудь
фрагмент текста, нажать кнопку и этот фрагмент текста
заключался в скобки.

пример:

...равными по модулю...

выделяю "по", нажимаю кнопку

...равными (по) модулю...

Спасибо. :moder:

Wolsh 01.08.2009 11:44

На сцене кнопка braceButton и поле ввода input_txt
Код:

braceButton.onPress = braceIt;
function braceIt():Void
{
        var str:String = input_txt.text;
        //// начало и конец выделения
        var selIn :Number = Selection.getBeginIndex();
        var selEnd:Number = Selection.getEndIndex();
        Selection.setSelection(0,0);
        //// разрезаем строку на три куска
        var s1:String = str.substring(0, selIn);
        var s2:String = str.substring(selIn, selEnd);
        var s3:String = str.substring(selEnd);
        //// вставляем скобки
        var bracedString:String = s1 + "(" + s2 + ")" + s3;
        input_txt.text = bracedString;
}


udaaff 01.08.2009 11:57

Wolsh, у тебя этот код работает?

Wolsh 01.08.2009 12:22

Конечно. Я всегда проверяю. У тебя - нет?))

Добавлено через 5 минут
Вообще то можно было выделение не снимать, а расширить чтобы включало новые скобки или сместить, чтобы остался выделенным тот же текст, теперь внутри скобок... ну это уже как автору захочется.

udaaff 01.08.2009 12:37

Код AS1/AS2:

braceButton.onPress = braceIt;
 
function braceIt():Void
{
        var str:String = input_txt.text;
        //// начало и конец выделения
        var selIn :Number = Selection.getBeginIndex();
        var selEnd:Number = Selection.getEndIndex();
 
        // XXX У меня фокус слетает, при нажатии на кнопку и получаются
        // такие значения
        trace(Selection.getFocus()); // null
        trace(selIn + "  " + selEnd); // -1  -1
 
        ...
}

Не пойму, в чем я туплю. Выложи исходник пожалуйста. (текст мышкой выделяю, перед нажатием на кнопку)

Wolsh 01.08.2009 12:53

Оппа... сохранил под восьмой плеер - точно не работает, скобки в начало строки встают. В девятом же всё как часы...

udaaff 01.08.2009 12:59

Я в восьмерке тестировал, поэтому и не получалось. Понятно теперь. Вымучал такой безумный код =) :
Код AS1/AS2:

// на сцене txt и mc
 
txt.onSetFocus = txt_onSetFocusHandler;
txt.onKillFocus = txt_onKillFocusHandler;
 
mc.onRelease = mc_onReleaseHandler;
 
var beginIndex:Number;
var endIndex:Number;
 
function txt_onSetFocusHandler(oldFocus:Object):Void
{
        onMouseUp = onMouseUpHandler;
}
 
function txt_onKillFocusHandler(newFocus:Object):Void
{
        delete onMouseUp;
}
 
function onMouseUpHandler():Void
{
        beginIndex = Selection.getBeginIndex();
        endIndex = Selection.getEndIndex();
}
 
 
function mc_onReleaseHandler():Void
{
        if (beginIndex == endIndex)
                return;
 
        var newString:String = "[" + txt.text.substring(beginIndex, endIndex) + "]";
        txt.replaceText(beginIndex, endIndex, newString);
 
        delete beginIndex;
        delete endIndex;
}


Wolsh 01.08.2009 13:08

Похоже баг такой в восьмерке((
Вот подсократил код)))
Код AS1/AS2:

braceButton.onPress = braceIt;
 
function braceIt():Void
{
        var str:String = input_txt.text;
        //// начало и конец выделения
        var selIn :Number = Selection.getBeginIndex();
        var selEnd:Number = Selection.getEndIndex();
        //// вставляем скобки
        var bracedString:String = "(" + str.substring(selIn, selEnd) + ")";
        input_txt.replaceSel(bracedString)
}


udaaff 01.08.2009 13:23

Можно еще проверку добавить:
Код AS1/AS2:

braceButton.onPress = braceIt;
 
function braceIt():Void
{
        var str:String = input_txt.text;
        //// начало и конец выделения
        var selIn :Number = Selection.getBeginIndex();
        var selEnd:Number = Selection.getEndIndex();
 
        if (selIn == selEnd)
                return;
 
        //// вставляем скобки
        var bracedString:String = "(" + str.substring(selIn, selEnd) + ")";
        input_txt.replaceSel(bracedString)
}


Wolsh 01.08.2009 13:33

Ну да))
А в твой код я внес косметические изменения, ибо в девятке результат его действия некрасив - выделение то остается, только теперь от первой скобки до предпоследней буквы редактируемого отрывка)))) Сделал чтобы выделение "покрывало" все от первой до последней скобки
Код AS1/AS2:

function mc_onReleaseHandler():Void
{
        if (beginIndex == endIndex)
                return;
 
        var newString:String = "[" + txt.text.substring(beginIndex, endIndex) + "]";
        txt.replaceText(beginIndex, endIndex, newString);
        Selection.setFocus(txt);
        Selection.setSelection(beginIndex, endIndex+2);
 
        delete beginIndex;
        delete endIndex;
}

Ну в общем, ты молодец, нашел выход)))


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

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