Просмотр полной версии : Как разместить данные в 2 колонки в TextField
Подскажите, пожалуйста, возможно ли разместить данные (например, два текстовых блока) в 2 колонки в TextField.
Может есть альтернативный вариант решения задачи: TextField отображает HTML документ. В зависимости от действий пользователя левая часть TextField остается неизменной, а в правой части TextField меняется текст.
Спасибо.
olexandr
30.03.2008, 06:13
вряд ли есть что-то приличное для этой цели
скорее всего придется делать 2 textfield'a
Во Flash 10 пожалуйста, в 9-ом с извращениями
Для обычного текста:
/**
* Метод, заполняющий колонки текстом.
* Метод работает только с обычным (не html) текстом.
*
* @param str - текст, которым необходимо заполнить колонки
* @param array - массив, содержащий ссылки на текстовые поля (колонки)
* @return String - Остаток невместившегося текста. Если помеcтился весь текст, то результатом будет null.
*/
function setText (str:String, array:Array):String {
var arrayText:Array = str.split (" ");
var n:Number = 0;
var dx:Number = 0;
var strTemp:String = "";
var strBuffer:String = "";
for (var i:Number = 0; i < arrayText.length; i += dx++) {
strTemp = array[n].text;
strBuffer = "";
for (var j:Number = i; j < i + dx; j++) {
if (j == arrayText.length) {
break;
}
strBuffer += arrayText[j] + (j < arrayText.length - 1 ? " " : "");
}
array[n].text += strBuffer;
if (array[n].textHeight > array[n]._height - 4 && dx > 1) {
array[n].text = strTemp;
dx = 0;
} else if (array[n].textHeight > array[n]._height - 4) {
array[n++].text = strTemp;
if (array[n]) {
i--;
} else {
return str.substring (array[n - 1].text.length);
}
}
}
return null;
}
var array:Array = new Array ();
for (var i:Number = 0; i < 2; i++) {
var txt:TextField = this.createTextField ("txt" + i, this.getNextHighestDepth (), 10 + i * 110, 10, 100, 200);
txt.border = true;
txt.multiline = true;
txt.wordWrap = true;
array.push (txt);
}
setText ("Подскажите, пожалуйста, возможно ли разместить данные (например, два текстовых блока) в 2 колонки в TextField. Может есть альтернативный вариант решения задачи: TextField отображает HTML документ. В зависимости от действий пользователя левая часть TextField остается неизменной, а в правой части TextField меняется текст. Спасибо.", array);
Однако для html текста такой способ не годится, так как надо предварительно парсить текст и вычислять разрывы тегов при переходе не друго столбец.
В 9-ой версии это еще более менее удобно. В AS3 встроены методы определения положения определенного глифа. Я как то задавался такой же проблемой, выходило примерно так. Сначала определял номер последнего символа нижней строчки первого столбца. Затем просчитывал все открытые теги до этого символа. Запоминал эти теги, после чего создавал второе поле и заново открывал запомненые теги, что бы сохранить форматирование. В принципе ничего тяжелого, но выделять текст в обоих колонках все равно не получится
Пасибо, буду переходить на 9-ый
но выделять текст в обоих колонках все равно не получитсяЧерез BitmapData можно добиться того же эффекта.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.