Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Вопрос по TextField... (http://www.flasher.ru/forum/showthread.php?t=47282)

3D-Noob 27.07.2003 09:05

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

sergwizard 27.07.2003 17:02

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

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

Вложений: 1
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

Вложений: 1
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.


Часовой пояс GMT +4, время: 19:53.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.