PDA

Просмотр полной версии : Как разместить данные в 2 колонки в TextField


shtala
30.03.2008, 03:18
Подскажите, пожалуйста, возможно ли разместить данные (например, два текстовых блока) в 2 колонки в TextField.
Может есть альтернативный вариант решения задачи: TextField отображает HTML документ. В зависимости от действий пользователя левая часть TextField остается неизменной, а в правой части TextField меняется текст.
Спасибо.

olexandr
30.03.2008, 06:13
вряд ли есть что-то приличное для этой цели
скорее всего придется делать 2 textfield'a

flash33
30.03.2008, 07:23
Во Flash 10 пожалуйста, в 9-ом с извращениями

iNils
30.03.2008, 09:39
Для обычного текста:
/**
* Метод, заполняющий колонки текстом.
* Метод работает только с обычным (не 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 текста такой способ не годится, так как надо предварительно парсить текст и вычислять разрывы тегов при переходе не друго столбец.

flash33
30.03.2008, 11:51
В 9-ой версии это еще более менее удобно. В AS3 встроены методы определения положения определенного глифа. Я как то задавался такой же проблемой, выходило примерно так. Сначала определял номер последнего символа нижней строчки первого столбца. Затем просчитывал все открытые теги до этого символа. Запоминал эти теги, после чего создавал второе поле и заново открывал запомненые теги, что бы сохранить форматирование. В принципе ничего тяжелого, но выделять текст в обоих колонках все равно не получится

shtala
30.03.2008, 21:06
Пасибо, буду переходить на 9-ый

iNils
31.03.2008, 00:39
но выделять текст в обоих колонках все равно не получитсяЧерез BitmapData можно добиться того же эффекта.