PDA

Просмотр полной версии : координаты конеца текста


DimZ
25.04.2008, 13:55
есть текствое поле с у него ограничение по ширене, тоесть длинные слова переносятся на седующию строчку. и задача такова что надо в конце этого текста поставить некий мувик.

пробывал TextField.length но из-за переноса слов не получается да и в шрифте буквы разного размера.

у меня больше идей нет, может подскажите куда копнуть?

combo
25.04.2008, 14:20
Для расширения возможностей текстфилда я всегда использую клипы.
Прячь текст в пустой мувик - тогда высота и ширина мувика будет такой же как у текста...

Ведьмак
25.04.2008, 14:22
2 combo. И как таким спопсобом отследить конец последней строки?

combo
25.04.2008, 14:27
Ведьмак, в смысле как отследить? По логике, последняя строка - это и есть конец текста. Разве нет?
Кажется понял, что имелось ввиду. Нужно поставить мувик как-бы в самом тексте, т.е. на той же строке, что и последнее слово?

DimZ
25.04.2008, 15:22
вот как поставить этот квадрат в конец текста при этом извено только то что ширина текстового поля 15 знаков.
НО текст состоят из слов разной длинны!!! и поэтому не извесно как сколько реально знаков будет в посленей строке

combo
25.04.2008, 15:29
Ммм.... А html-текст во флеше вроде поддерживает картинки (<img>). Его разве нельзя юзнуть? Нужен именно муви-клип?

DimZ
25.04.2008, 15:37
Ммм.... А html-текст во флеше вроде поддерживает картинки (<img>). Его разве нельзя юзнуть? Нужен именно муви-клип?
точно как я об этом не подумал, наверно так и буду делать. :yahoo:

но получается что ни как не отследиьт конец текста фо флеше. :(

TanaTiX
25.04.2008, 15:42
DimZ, если вставка с помощью <img> не подходит и если речь только о оси Y - то складываем координаты текста с его высотой. А если нужно определить еще и по ширине, то со стандартными шрифтами это не выйдет, т.к. разные символы имеют разную ширину (возможно только высчитать из общего количества символов при моноширном шрифте и при отсутствии html-форматирования) В противном случае на сколько я помню юзается битмапДата, но я этого уже не шарю и помочь не могу. Все ИМХО.

DimZ
25.04.2008, 16:27
Ммм.... А html-текст во флеше вроде поддерживает картинки (<img>). Его разве нельзя юзнуть? Нужен именно муви-клип?

<img> не получается т.к. картинка вставляется на следующию строчку. а не конец строки

Vertax
25.04.2008, 16:53
Как и сказал TanaTiX, делать нужно через BitmapData. Пример:
import flash.display.BitmapData;

MC.TXT.autoSize = true;
MC.TXT.text = "Hello World Hello World Hello World Hello World Hello World";

var BD:BitmapData = new BitmapData(MC._width, MC._height, true);
MC.attachBitmap(BD, this.getNextHighestDepth());
BD.draw(MC);

for (i = 200; i > 0; i--)
{
currPixel = BD.getPixel(i, MC._height - 10)
if (currPixel != 0 && currPixel != 16777215) break; //Если цвет то прекращаем проверку
}
ENDCLIP._y = MC._height - 20;
ENDCLIP._x = i + 5;
Структура: В клипе MC текстовое поле TXT. ENDCLIP - то что ставим в конец строки.

TanaTiX
25.04.2008, 17:30
DimZ, ну раз там дело в следующей строчке, то достаточно обойтись суммой размеров+ некоторый отступ - проще ничего и не придумать.

combo
25.04.2008, 18:02
Да, пиксельный анализатор для битмапа - это, конечно, вещь... Сам часто юзаю.
Dimz, странно... Должна вставляться и сбоку от слова. Либо html-поддержка во флеше кривая.
На толстый конец, можно попробовать вариант с опять-таки мувиклипами... Смысл такой. Читаем строку, разрубаем её на массив(по строкам), делаем клипы, пихаем в них строки из массива, ищем последний клип-строчку, узнаём её width.

Molecula
25.04.2008, 18:55
http://uvet.com.ua/omg/omg.html - когда-то делал, без Битмапы :wacko:.
Гы) Текстфилд инпутовый, просто пишите в нём.
Только положите маленький квадратик с инстанс_нэйм "о".
Один кадр, в нём пишем:
var w_set:Number = 175;
var h_set:Number = 35;
var __delta:Number = 5;

var tf:TextField = setTf('tf', 0, 0, w_set, h_set);
tf.text = 'LKFDLkfjsldfjslkdfLSJDFLKSFDJlskdflkjsldf';

tf.onChanged = function() {
setMc();
}

function setTf(n:String, __x:Number, __y:Number, w:Number, h:Number):TextField{
var tfl:TextField = this.createTextField(n, getNextHighestDepth(), __x, __y, w, h);
tfl.autoSize = true;
tfl.multiline = true;
tfl.type = 'input';
tfl.wordWrap = true;
return tfl;
}

function setMc(){
var j:Number = 0;
var l:Number = tf.length;
var s:String = tf.text;
var del:Number = 0;
while(j<(l+1)){
var t:TextField = setTf('t', 200, 200, w_set, h_set);
t.text = s.substr(del, (j-del));
j++;
if(t.textWidth == tf.textWidth){
del = j-1;
tf.text = s.substr(del);
}
if(j>=l){
tf.text = s;
var tf2:TextField = setTf('tf2', 300, 0, w_set, h_set);
tf2.text = t.text;
o._x = tf2.textWidth + __delta;
o._y = tf.textHeight - o._height;
tf2.removeTextField();
}
t.removeTextField();
}
}