PDA

Просмотр полной версии : Вопрос по TextField...


3D-Noob
27.07.2003, 09:05
Задача заключается в следущем. Есть 2 текстовых поля и картинка (Смотрите рисунок):
http://blizzard.ru/alex/firesp.gif
Загружается из внешнего текстового файла путь к картнке и текст сообщения. Нужно, что-бы скрипт разбивал подгружаемый текст на 2 части: Первая часть, которая впритык влезала в textfield1, а вторая часть соответственно в textfield2.
Должно получится примерно следущее:
http://blizzard.ru/alex/firesp2.gif
Так вот граждане, хотелось-бы узнать, как расчитать все это?

sergwizard
27.07.2003, 17:02
Примерно так. Это, конечно, черновой вариант, но смысл - я надеюсь -тебе будет понятен.

3D-Noob
28.07.2003, 02:16
2 sergwizard Огромное спасибо! Буду разбиратся - если непонятно, буду спрашивать :)... Еще раз огромное спасибо!
... Посмотрел тут исходник :) Тут все програмно сделано - так-что вопросы скорее всего возникнут ... И не один...

3D-Noob
29.07.2003, 06:41
Посмотрел я код - не работает он как нужно. Если в тексте появляются несколько запятых, точек - то остается практически целая пустая строка... Неужели нет другого способа узнать, сколько текста вместится полностью в 1 текстфилд?

Diomas
30.07.2003, 03:34
Знакомая задачка =).
Алгоритм в общем простой: добавляешь в textfield1 нужный текст по одному слову и после каждого добавленного слова проверяешь, не превысила ли высота текста (textfield1.textHeight) высоту текстового поля. Если да, то перекидываешь весь остальной текст включая это слово в поле textfield2.

Вообще, я бы на твоем месте сделал одно текстовое поле и оперировал с leftMargin для того, чтобы "подвинуть" верхнюю часть текста вправо. А то юзверь захочет выделить твой текст для того чтобы скопировать его куда-нибудь, потянет мышой и наткнется на то, что надо копировать отдельно верхнюю и нижнюю часть текста. Хотя, если ты его делаешь не селектабельным, то тада мона и так. =)

sergwizard
30.07.2003, 21:17
Ну о-о-очень интересные советы!!! Только почему бы не показать примеры. Было бы интересно посмотреть. Особенно с leftmargin.

3D-Noob
31.07.2003, 02:46
Да, вот leftMargin меня очень заинтересовал :) Побольше-бы во Flash Html тегов, и он рулил-бы сказочно :)

sergwizard
31.07.2003, 11:47
2 Noob,
Ты зря надеешься на Diomas(a) и leftmargin, - в данном случае, это абсолютно не в тему, и тебе не поможет.

Diomas
03.08.2003, 01:56
2 sergwizard
Почему не в тему???

2 3d Noob
Зачем тебе html-теги в textfield? ИХМО, форматирование с помощью TextFormat гораздо удобнее.
Сейчас мне пример не успеть, жди завтра, наверное, - чего-нибудь накатаю.

sergwizard
03.08.2003, 02:49
Я, может быть, и ошибаюсь, но вот ты и докажи мне это. Реши поставленную Noob(ом) задачу, предложенным тобой способом. И посрами меня простотой решения.

Diomas
04.08.2003, 14:14
2sergwizard
Я не собираюсь никого срамить просто написал то, что сам проверял.

Прошу прощения за задержку. Народ, не трите свои наработки, даже если они, как вам кажется, больше не нужны. Я весь комп перерыл - нихрена... Пришлось заново писать. Такчта вот, применительно к твоей задаче подойдет такое решение:

Пускай TxtField - текстовое поле, Picture - мувик, содержащий картинку, которую надо "обтекать".
Оба этих мувика лежат в каком-то третьем мувике. Тогда в этом третьем пишем:
TxtField.text = "";

// Собственно сам текст
text = "Text text text....";

PicWidth = Picture._width; // Ширина картинки
PicHeight = Picture._height; // Высота картинки

// Стиль первой части текста (отступ равен ширине картинки)
firstblock = new TextFormat();
firstblock.leftMargin = PicWidth;

// Стиль второй части текста (отступ равен нулю, т.е. в полную ширину текстового поля)
// для наглядности - другой цвет
secondblock = new TextFormat();
secondblock.leftMargin = 0;
secondblock.color = 0x0000cc;

Selection.setFocus("TxtField"); // необходимо, чтобы Selection работал именно с этим полем, а не с другим
var char = 0;

// Заполнение текстового поля до высоты картинки
// (пока нижняя граница текста не перевалит за грницу картинки)
TxtField.setNewTextFormat(firstblock);
while ((char < text.length)&&(TxtField.textHeight < PicHeight)) {
Selection.setSelection(TxtField.text.length, TxtField.text.length);
TxtField.replaceSel(text.charAt(char));
// можно было просто сделать TxtField.text += text.charAt(char),
// но НЕЛЬЗЯ, т.к. это "ломает" все форматирование ранее введенного в поле текста
trace ("\"" + text.charAt(char) + "\" - " + TxtField.textHeight);
char ++;
}

// Заполнение поля остальным текстом
TxtField.setNewTextFormat(secondblock);
while (char < text.length) {
Selection.setSelection(TxtField.text.length, TxtField.text.length);
TxtField.replaceSel(text.charAt(char));
trace ("\"" + text.charAt(char) + "\" - " + TxtField.textHeight);
char ++;
}
Прошу заметить одну приятную вещь: когда обнаруживается, что нижняя граница текста пересекла нижнюю границу картинки, то у нас уже имеется по крайней мере один символ, выходящий за пределы картинки (посмотрите, я для этого и выделил части текста цветами). Так вот, строка, на которой мы обнаруживаем вылезание текста за пределы картинки, является последней строкой с урезанной leftMargin шириной. Тот символ, на котором мы это обнаруживаем отформатирован еще как предыдущие. Но ведь в этой строке все последующие символы имеют форматирование в полную ширину! Тем не менее все отображается правильно (и освобождает нас от недушного гемора).
Вывод: на форматирование строки влияет тоько формат ее первого символа (имеется в виду форматирование типа отступов и т.д., а не цвет или размер шрифта).

Игрушка прилагается =P.

Жду вопросов.

Diomas
04.08.2003, 14:20
2sergwizard
Я не собираюсь никого срамить просто написал то, что сам проверял.

Прошу прощения за задержку. Народ, не трите свои наработки, даже если они, как вам кажется, больше не нужны. Я весь комп перерыл - нихрена... Пришлось заново писать. Такчта вот, применительно к твоей задаче подойдет такое решение:

Пускай TxtField - текстовое поле, Picture - мувик, содержащий картинку, которую надо "обтекать".
Оба этих мувика лежат в каком-то третьем мувике. Тогда в этом третьем пишем:
TxtField.text = "";

// Собственно сам текст
text = "Text text text....";

PicWidth = Picture._width; // Ширина картинки
PicHeight = Picture._height; // Высота картинки

// Стиль первой части текста (отступ равен ширине картинки)
firstblock = new TextFormat();
firstblock.leftMargin = PicWidth;

// Стиль второй части текста (отступ равен нулю, т.е. в полную ширину текстового поля)
// для наглядности - другой цвет
secondblock = new TextFormat();
secondblock.leftMargin = 0;
secondblock.color = 0x0000cc;

Selection.setFocus("TxtField"); // необходимо, чтобы Selection работал именно с этим полем, а не с другим
var char = 0;

// Заполнение текстового поля до высоты картинки
// (пока нижняя граница текста не перевалит за грницу картинки)
TxtField.setNewTextFormat(firstblock);
while ((char < text.length)&&(TxtField.textHeight < PicHeight)) {
Selection.setSelection(TxtField.text.length, TxtField.text.length);
TxtField.replaceSel(text.charAt(char));
// можно было просто сделать TxtField.text += text.charAt(char),
// но НЕЛЬЗЯ, т.к. это "ломает" все форматирование ранее введенного в поле текста
trace ("\"" + text.charAt(char) + "\" - " + TxtField.textHeight);
char ++;
}

// Заполнение поля остальным текстом
TxtField.setNewTextFormat(secondblock);
while (char < text.length) {
Selection.setSelection(TxtField.text.length, TxtField.text.length);
TxtField.replaceSel(text.charAt(char));
trace ("\"" + text.charAt(char) + "\" - " + TxtField.textHeight);
char ++;
}
Прошу заметить одну приятную вещь: когда обнаруживается, что нижняя граница текста пересекла нижнюю границу картинки, то у нас уже имеется по крайней мере один символ, выходящий за пределы картинки (посмотрите, я для этого и выделил части текста цветами). Так вот, строка, на которой мы обнаруживаем вылезание текста за пределы картинки, является последней строкой с урезанной leftMargin шириной. Тот символ, на котором мы это обнаруживаем отформатирован еще как предыдущие. Но ведь в этой строке все последующие символы имеют форматирование в полную ширину! Тем не менее все отображается правильно (и освобождает нас от недушного гемора).
Вывод: на форматирование строки влияет тоько формат ее первого символа (имеется в виду форматирование типа отступов и т.д., а не цвет или размер шрифта).

Игрушка прилагается =P.

Жду вопросов.

Diomas
04.08.2003, 19:22
Без прикола, конечно, не обошлось!
Это же надо было эту хрень два раза отсылать...
СПАСИБА моеу провайдеру за "СВЕРХСКОРОСТНОЙ" инет.

sergwizard
04.08.2003, 19:53
2 Diomas
Решение непростое, но красивое. Рад, что ты его показал. Отдельное спасибо за replaceSel. Интересно увидеть, что новый формат может вступать в силу не только посреди строки, но и посреди слова.
Просто, очень часто встречал здесь, на форуме "советчиков", которые советуют, сами не понимая что. Сначала мне показалось, что и ты из таких.
Если я прилюдно усомнился в твоих возможностях, то и извинения свои приношу тоже прилюдно.
My respect.