Вверх ↑
Этот топик читают: Гость
Гость
Ответов: 17029
Рейтинг: 0
#1: 2009-07-27 00:59:01 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2017-03-03 06:43:00
карма: 0

0
Ответов: 5446
Рейтинг: 323
#2: 2009-07-27 03:24:14 ЛС | профиль | цитата
Можно.
Простой путь - "забыть" о правилах переноса и переносить по словам. Это несложно (но зато почти вся вкладка String будет задействована).
Более сложный путь - поиметь библиотеку переносов, и заполнять строки сначала целыми словами, а потом остаток пробовать добить с переносом.

P.S. Если бы ещё понять, что значит 1й пункт, то было бы проще. Если я правильно понял, то это число пробелов в начале каждой строки. Тогда 3й пункт - ширина даётся с учётом этих пробелов или нет?

карма: 1

0
Гость
Ответов: 17029
Рейтинг: 0
#3: 2009-07-28 16:11:06 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2017-03-03 06:43:00
карма: 0

0
Ответов: 1397
Рейтинг: 50
#4: 2009-07-28 17:05:26 ЛС | профиль | цитата
На форуме, правда давно уже была схема для выравнивания строк пробелами. Да и смастерить вновь такую тоже не должно вызвать трудностей.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Гость
Ответов: 17029
Рейтинг: 0
#5: 2009-07-29 02:22:24 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2017-03-03 06:43:01
карма: 0

0
Ответов: 5446
Рейтинг: 323
#6: 2009-07-29 07:41:23 ЛС | профиль | цитата
г. Nules, а что там такого сложного? Разбиваем строку (абзац) на слова (по пробелам, знаки препинания являются частью слов). Далее формируем строки, по очереди "считывая" слова пока следующее слово (с учётом пробелов) влезает в строку. Если влезло ровно-ровно, то строка готова. Иначе считаем, сколько пробелов надо до заданной длины строки. После чего в цикле добавляем пробелы куда можно (по кругу), пока не закончим формировать строку. Строка готова!
карма: 1

0
Гость
Ответов: 17029
Рейтинг: 0
#7: 2009-07-30 16:40:58 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2017-03-03 06:43:01
карма: 0

0
Ответов: 5446
Рейтинг: 323
#8: 2009-07-30 19:54:44 ЛС | профиль | цитата
г. Nules, какая буква непонятна?
Пусть очередная собранная строка состоит из Nw слов W[i] (i = 0..Nw-1)
"считаем, сколько пробелов надо до заданной длины строки" [Nsp] = максимальная длина строки [Lmax] - длина собранной строки [Lcur]
"в цикле добавляем пробелы":

Isp {циклический счётчик 0..Nw-1} = 0
while (Nsp > 0)
begin
W[Isp] +=
Isp ++
Nsp --
end
------------ Дoбавленo в 20.01:
А, ну и ещё маленькая тонкость: все мои рассуждения теряют силу для не-моноширинных шрифтов. В этом случае придётся использовать менее красивый метод с измерением длины в пикселях через GetTextExtent
карма: 1

0
Гость
Ответов: 17029
Рейтинг: 0
#9: 2009-07-30 20:27:08 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2017-03-03 06:43:01
карма: 0

0
Ответов: 5446
Рейтинг: 323
#10: 2009-07-31 05:07:37 ЛС | профиль | цитата
г. Nules, я напряг свои мозги, и сделал требуемую схему. И она даже работает. В процессе пришлось несколько поменять алгоритм заполнения строки проблеами до заданной длины:

* После набора максимально длинной строки (Lcur) вычисляем, сколько нам не хватает пробелов до заданной длины (Nsp = Lmax - Lcur)
* Делим Nsp нацело (div) на число промежутков между словами (Nw - 1) и добавляем 1, это даёт нам (минимальное) число пробелов между словами
* Считаем остаток (mod) от деления Nsp на (Nw - 1) - это даст нам число позиций (Isp) , в которые надо будет вставлять дополнительный пробел
* Теперь для каждого слова W:
** Присоединяем сзади строку из пробелов длины Nsx
** Если порядковый номер слова меньше Isp, то присоединяем с конца ещё один пробел
** Полученное супер-слово присоединяем сзади к некой временной строке, которая содержит все уже обработанные супер-слова
* Полученную временную строку Trim-аем (удаляем лишние пробелы в конце строки) -> очередная строка готова

карма: 1

0
Ответов: 8926
Рейтинг: 823
#11: 2009-07-31 11:51:28 ЛС | профиль | цитата
iarspider, четыре дня , не выдержал, правда сейчас уезжаю в не цивилизованные края (до сентября), поэтому пяти минут не хватило довести до ума, но в качестве затравки пойдёт code_14365.txt
До свидания!
карма: 19

0
файлы: 1code_14365.txt [11.4KB] [290]
Разработчик
Ответов: 26151
Рейтинг: 2127
#12: 2009-07-31 12:13:24 ЛС | профиль | цитата
Леонид, я понимаю, конечно, что это ты реализовал отступы, но это не выравнивание по ширине

карма: 22

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#13: 2009-07-31 20:16:23 ЛС | профиль | цитата
Вот, для затравки, что получилось, осталось сделать обрезку строки по количеству символов

code_14373.txt
карма: 22

0
файлы: 1code_14373.txt [7.9KB] [242]
Ответов: 5446
Рейтинг: 323
#14: 2009-07-31 20:36:25 ЛС | профиль | цитата
Раз пошла такая пьянка... (с) Схема не претендует на оптимальность, это скроее Proof-of-Concept (доказательство возможности)

карма: 1

0
файлы: 1textpadd.sha [11.9KB] [294]
Разработчик
Ответов: 26151
Рейтинг: 2127
#15: 2009-07-31 21:51:12 ЛС | профиль | цитата
Похоже, что мы чела своими схемами сильно напугали, он, поди, думал, что все гораздо проще
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)