Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 04.08.2003, 14:14
Diomas вне форума Посмотреть профиль Отправить личное сообщение для Diomas Найти все сообщения от Diomas
  № 1  
Diomas
 
Аватар для Diomas

Регистрация: Nov 2001
Адрес: spb.ru
Сообщений: 177
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.

Жду вопросов.
Вложения
Тип файла: zip text flow.zip (6.5 Кб, 317 просмотров)

Старый 04.08.2003, 14:20
Diomas вне форума Посмотреть профиль Отправить личное сообщение для Diomas Найти все сообщения от Diomas
  № 2  
Diomas
 
Аватар для Diomas

Регистрация: Nov 2001
Адрес: spb.ru
Сообщений: 177
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.

Жду вопросов.
Вложения
Тип файла: zip text flow.zip (6.5 Кб, 265 просмотров)

Старый 04.08.2003, 19:22
Diomas вне форума Посмотреть профиль Отправить личное сообщение для Diomas Найти все сообщения от Diomas
  № 3  
Diomas
 
Аватар для Diomas

Регистрация: Nov 2001
Адрес: spb.ru
Сообщений: 177
Без прикола, конечно, не обошлось!
Это же надо было эту хрень два раза отсылать...
СПАСИБА моеу провайдеру за "СВЕРХСКОРОСТНОЙ" инет.

Старый 04.08.2003, 19:53
sergwizard вне форума Посмотреть профиль Отправить личное сообщение для sergwizard Посетить домашнюю страницу sergwizard Найти все сообщения от sergwizard
  № 4  
sergwizard
 
Аватар для sergwizard

Регистрация: Jan 2002
Адрес: СПб-Denver-Лермонтов
Сообщений: 1,525
2 Diomas
Решение непростое, но красивое. Рад, что ты его показал. Отдельное спасибо за replaceSel. Интересно увидеть, что новый формат может вступать в силу не только посреди строки, но и посреди слова.
Просто, очень часто встречал здесь, на форуме "советчиков", которые советуют, сами не понимая что. Сначала мне показалось, что и ты из таких.
Если я прилюдно усомнился в твоих возможностях, то и извинения свои приношу тоже прилюдно.
My respect.
__________________
Для того чтобы узнавать, есть два способа: - задавать вопросы и пытаться самому на них ответить. Второй способ более продуктивный.
(S.Wizard)

Создать новую тему   Часовой пояс GMT +4, время: 03:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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