![]() |
|
||||||||||
|
|||||
|
Регистрация: Aug 2009
Сообщений: 56
|
Здравствуйте, уважаемые знатоки.
Есть задача: Есть текстовое поле input, и в него грузится текст. Как сделать, если я хочу выделить какой-нибудь фрагмент текста, нажать кнопку и этот фрагмент текста заключался в скобки. пример: ...равными по модулю... выделяю "по", нажимаю кнопку ...равными (по) модулю... Спасибо. ![]() |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
На сцене кнопка 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;
}
__________________
Reality.getBounds(this); |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Wolsh, у тебя этот код работает?
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Конечно. Я всегда проверяю. У тебя - нет?))
Добавлено через 5 минут Вообще то можно было выделение не снимать, а расширить чтобы включало новые скобки или сместить, чтобы остался выделенным тот же текст, теперь внутри скобок... ну это уже как автору захочется.
__________________
Reality.getBounds(this); |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
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 ... } Последний раз редактировалось udaaff; 01.08.2009 в 12:41. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Оппа... сохранил под восьмой плеер - точно не работает, скобки в начало строки встают. В девятом же всё как часы...
__________________
Reality.getBounds(this); |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Я в восьмерке тестировал, поэтому и не получалось. Понятно теперь. Вымучал такой безумный код =) :
// на сцене 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; } |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Похоже баг такой в восьмерке((
Вот подсократил код))) 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) }
__________________
Reality.getBounds(this); |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Можно еще проверку добавить:
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) } |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Ну да))
А в твой код я внес косметические изменения, ибо в девятке результат его действия некрасив - выделение то остается, только теперь от первой скобки до предпоследней буквы редактируемого отрывка)))) Сделал чтобы выделение "покрывало" все от первой до последней скобки 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; }
__________________
Reality.getBounds(this); |
![]() |
![]() |
Часовой пояс GMT +4, время: 15:12. |
|
|
« Предыдущая тема | Следующая тема » |
|
|