Просмотр полной версии : Вопрос по TextField...
Задача заключается в следущем. Есть 2 текстовых поля и картинка (Смотрите рисунок):
http://blizzard.ru/alex/firesp.gif
Загружается из внешнего текстового файла путь к картнке и текст сообщения. Нужно, что-бы скрипт разбивал подгружаемый текст на 2 части: Первая часть, которая впритык влезала в textfield1, а вторая часть соответственно в textfield2.
Должно получится примерно следущее:
http://blizzard.ru/alex/firesp2.gif
Так вот граждане, хотелось-бы узнать, как расчитать все это?
sergwizard
27.07.2003, 17:02
Примерно так. Это, конечно, черновой вариант, но смысл - я надеюсь -тебе будет понятен.
2 sergwizard Огромное спасибо! Буду разбиратся - если непонятно, буду спрашивать :)... Еще раз огромное спасибо!
... Посмотрел тут исходник :) Тут все програмно сделано - так-что вопросы скорее всего возникнут ... И не один...
Посмотрел я код - не работает он как нужно. Если в тексте появляются несколько запятых, точек - то остается практически целая пустая строка... Неужели нет другого способа узнать, сколько текста вместится полностью в 1 текстфилд?
Знакомая задачка =).
Алгоритм в общем простой: добавляешь в textfield1 нужный текст по одному слову и после каждого добавленного слова проверяешь, не превысила ли высота текста (textfield1.textHeight) высоту текстового поля. Если да, то перекидываешь весь остальной текст включая это слово в поле textfield2.
Вообще, я бы на твоем месте сделал одно текстовое поле и оперировал с leftMargin для того, чтобы "подвинуть" верхнюю часть текста вправо. А то юзверь захочет выделить твой текст для того чтобы скопировать его куда-нибудь, потянет мышой и наткнется на то, что надо копировать отдельно верхнюю и нижнюю часть текста. Хотя, если ты его делаешь не селектабельным, то тада мона и так. =)
sergwizard
30.07.2003, 21:17
Ну о-о-очень интересные советы!!! Только почему бы не показать примеры. Было бы интересно посмотреть. Особенно с leftmargin.
Да, вот leftMargin меня очень заинтересовал :) Побольше-бы во Flash Html тегов, и он рулил-бы сказочно :)
sergwizard
31.07.2003, 11:47
2 Noob,
Ты зря надеешься на Diomas(a) и leftmargin, - в данном случае, это абсолютно не в тему, и тебе не поможет.
2 sergwizard
Почему не в тему???
2 3d Noob
Зачем тебе html-теги в textfield? ИХМО, форматирование с помощью TextFormat гораздо удобнее.
Сейчас мне пример не успеть, жди завтра, наверное, - чего-нибудь накатаю.
sergwizard
03.08.2003, 02:49
Я, может быть, и ошибаюсь, но вот ты и докажи мне это. Реши поставленную Noob(ом) задачу, предложенным тобой способом. И посрами меня простотой решения.
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.
Жду вопросов.
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.
Жду вопросов.
Без прикола, конечно, не обошлось!
Это же надо было эту хрень два раза отсылать...
СПАСИБА моеу провайдеру за "СВЕРХСКОРОСТНОЙ" инет.
sergwizard
04.08.2003, 19:53
2 Diomas
Решение непростое, но красивое. Рад, что ты его показал. Отдельное спасибо за replaceSel. Интересно увидеть, что новый формат может вступать в силу не только посреди строки, но и посреди слова.
Просто, очень часто встречал здесь, на форуме "советчиков", которые советуют, сами не понимая что. Сначала мне показалось, что и ты из таких.
Если я прилюдно усомнился в твоих возможностях, то и извинения свои приношу тоже прилюдно.
My respect.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.