PDA

Просмотр полной версии : Как добавить текст


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
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
Я в восьмерке тестировал, поэтому и не получалось. Понятно теперь. Вымучал такой безумный код =) :
// на сцене 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
Похоже баг такой в восьмерке((
Вот подсократил код)))
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
Можно еще проверку добавить:
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
Ну да))
А в твой код я внес косметические изменения, ибо в девятке результат его действия некрасив - выделение то остается, только теперь от первой скобки до предпоследней буквы редактируемого отрывка)))) Сделал чтобы выделение "покрывало" все от первой до последней скобки
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
// на сцене 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 (http://narod.ru/disk/1155679000/tarfet.zip.html)

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
Что-то, так не получается

Selection.setFocus("txt");

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

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

getelse
04.08.2009, 01:54
Код кнопки сохранения
on(release) {
loadVariables("target.php", "_root", "POST");
}

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

Код кнопки изменения (заключение фрагмента текста в скобки)
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
Смотри как все просто:
Код кнопки сохранения

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")))