Форум 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;
}

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

getelse 01.08.2009 16:32

Спасибо Вам

А, если во флешке, добавить еще одну кнопку для отправки текста(php).
измененный текст не отправляется.
(что-то типа фокус уходит, текст не сохраняется)
А, если, я сам напечатаю какой-нибудь текст в текстовом поле, уже после добавления скобок, тогда измененный текст(со скобками) отправляется.

Добавлено через 3 часа 19 минут
Почему, при переходе с одной кнопки(скобки) на другую(запись), скобки в текстовом поле (чтобы они сохранились нужно опять что-нибудь дописать в текстовом поле) не сохраняются?

udaaff 01.08.2009 22:22

Выложите пример.

getelse 01.08.2009 23:02

Создан на основе Вашего кода, udaaff
Код 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;
}

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

udaaff 02.08.2009 14:59

getelse, пример -- в смысле, исходник с примером, а не swf файл.

getelse 02.08.2009 15:04

вот, лови flash8, as2
zip (fla,swf,php)
target

Xero201 02.08.2009 21:46

Вот хороший пример по теме из FAQ http://www.flasher.ru/forum/showthread.php?t=65889

getelse 03.08.2009 15:01

Объясните друзья.
Как сохранить текст, 'после изменения давшей одной кнопкой', другой кнопкой.
В процессе перехода с одной кнопки на др. кнопку, изменения в тексте (которые дала
первая кнопка) не сохраняются, второй кнопкой.
Спасибо.

codfelix 03.08.2009 23:02

Selection.setFocus("txt");

getelse 04.08.2009 00:21

Что-то, так не получается

Код AS1/AS2:

Selection.setFocus("txt");


Xero201 04.08.2009 01:34

Цитата:

Сообщение от getelse (Сообщение 840175)
Объясните друзья.
Как сохранить текст, 'после изменения давшей одной кнопкой', другой кнопкой.
В процессе перехода с одной кнопки на др. кнопку, изменения в тексте (которые дала
первая кнопка) не сохраняются, второй кнопкой.
Спасибо.

Так ты серьезно, или прикалываешься?
Из чего видно, что одна кнопка меняет текст, а "в процессе перехода с одной кнопки на др. кнопку, изменения в тексте (которые дала первая кнопка) не сохраняются"? Попробуй не сохранять, просто выводить текст при нажатии "другой" кнопки с помощью trace(). Если текст выводится измененным, то приведи код сохранения, иначе код изменения.

getelse 04.08.2009 01:54

Код кнопки сохранения
Код AS1/AS2:

on(release) {
        loadVariables("target.php", "_root", "POST");
}

target.php
PHP код:

<?php
$f 
fopen("result.html""w");
fwrite($f'myText='stripslashes ($myText));
fclose($f);
?>

Код кнопки изменения (заключение фрагмента текста в скобки)
Код AS1/AS2:

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

В процессе перехода с одной кнопки на др. кнопку, изменения в тексте (которые дала
первая кнопка) не сохраняются, второй кнопкой.?

Xero201 04.08.2009 22:14

Смотри как все просто:
Код кнопки сохранения
Код AS1/AS2:

on(release) {
php_send = new LoadVars();
php_send.txt = txt.text;
php_send.sendAndLoad("http://site/target.php", php_send, "POST");
}

target.php
Код:

<?php
$myText = $_POST['txt'];
$f = fopen("result.html", "w");
fwrite($f, 'myText='.$myText);
fclose($f);
?>

А не та лабуда, которую ты взял с первой попавшейся ссылки "передача данных из Flash в PHP")))


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

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