HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Алгоритм выравнивания текста по ширине
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
marikcool
Житель форума

Дата регистрации: Jul 2011
Проживает: kz
Сообщений: 1522
Возраст: 37

Рейтинг



Алгоритм выравнивания текста по ширине

Интересует субж, как грамотно реализовать алгоритм?
в голову приходит: вычеслить допустимую длину которую можно отрисовать на строку, например длина блока 300 пикселей, длина символов 312,
далее обрезать в меньшую сторону по количеству слов, удалить пробелы заодно подсчитав их, вычтить из 300пикселей пробелы*ширина пробела,
вычеслить оступ = остаток разделить на количество слов-1, рисовать слово оступ и т.д.
Есть попроще вариант?

__________________
vk.com/skullcapstudios

Отредактировано marikcool 06-11-2012 в 15:31

Сообщить модератору | | IP: Записан
Сообщение: 109596

Старое сообщение 06-11-2012 15:20
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Птьхы, странный какой.
Размер текстового поля ВСЕГДА известен заранее, причём он измеряется в тех же величинах, что и ширина буков. Далее мы "рисуем" наши буквы из строки в некую виртуальную функцию, которая только и делает, что считает общую ширину конечной строки. Ну а дальше всё просто:
делим ширину экрана на два, делим ширину строки на два, отнимаем половину ширины строки от половины ширины экрана. Получившееся значение - x, это точка, с которой надо начинать рисование строки.
Будет точно по центру.
Капец молодеж пошла, простейшие алгоритмы рассчитать не могёт.
ну ладно яб понял, если бы скажем реализовать табуляцию. О то чего - строку по ширине выровнять не могут.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 109600

Старое сообщение 06-11-2012 15:39
-
qpAHToMAS
Интернетовское трепло

Дата регистрации: Sep 2007
Проживает: (void)
Сообщений: 1788
Возраст: 32

Рейтинг



Дядя Миша, я боюсь, что ему надо не просто отцентровать текст:
(Ширина поля для текста / 2) - Ширина текста / 2
(действительно, слишком просто)

А аккуратно его растянуть по всей ширине поля. Или сделать перенос на новую строку как в чатике/поле для ввода.

Сообщить модератору | | IP: Записан
Сообщение: 109601

Старое сообщение 06-11-2012 15:42
- За что?
marikcool
Житель форума

Дата регистрации: Jul 2011
Проживает: kz
Сообщений: 1522
Возраст: 37

Рейтинг



Цитата:
Дядя Миша писал:
Птьхы, странный какой.
Размер текстового поля ВСЕГДА известен заранее, причём он измеряется в тех же величинах, что и ширина буков. Далее мы "рисуем" наши буквы из строки в некую виртуальную функцию, которая только и делает, что считает общую ширину конечной строки. Ну а дальше всё просто:
делим ширину экрана на два, делим ширину строки на два, отнимаем половину ширины строки от половины ширины экрана. Получившееся значение - x, это точка, с которой надо начинать рисование строки.
Будет точно по центру.
Капец молодеж пошла, простейшие алгоритмы рассчитать не могёт.
ну ладно яб понял, если бы скажем реализовать табуляцию. О то чего - строку по ширине выровнять не могут.

мне текст по ширине нужно выравнять, а у тебя это центрирование.
в html это align=justify

__________________
vk.com/skullcapstudios

Сообщить модератору | | IP: Записан
Сообщение: 109606

Старое сообщение 06-11-2012 16:35
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
qpAHToMAS писал:
А аккуратно его растянуть по всей ширине поля

Это глупо, просто некрасиво смотрится.
Но в целом тоже достаточно просто реализуется: ширина, которую надо заполнить (в пикселях) равно общая ширина поля минус ширина текста.
Всё в пикселях. Фиксированный промежуток для пробела между буквами равен кол-ву букву минус кол-во пробелов умноженное на два, поскольку нам надо отделять пробелы между словами от пробелов между буквами, призванными создать эффект разрежения. Впрочем данный коэфициент подбирается строго эмпирическим путём, чтобы артёмий татьяныч не сказал про ужасный кёрнинг. Ну и конечно проверить полученный код на проблему неучтённой еденицы.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 109607

Старое сообщение 06-11-2012 16:46
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 08:20. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Алгоритм выравнивания текста по ширине
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024