Вот возникла необходимость реализовать в своем редакторе сообщений выравнивание строк текста по ширине.
В качестве контрола для вывода текста я использую RichTextBox (или RichTextEdit, кто как называет...), в дальнейшем RTB.
У RTB есть метод .SelAlignment, который в качестве параметров имеет rtfLeft, rtfRight и rtfCenter. А мне нужно по ширине. Такого параметра не нашёл. Значит, видимо, придётся делать ручками.
Начал думать (т.е. скорей всего изобретать велосипед).
Алгоритм представляется таким:
Берём строку текста.
Определяем её длину в символах.
Определяем разницу в длине между лимитом длины строки (ну, например, 80 символов).
Если разница равна 0 (нулю или меньше нуля), тогда переходим к следующей строке и всё сначала.
Если разница больше нуля - значит эта разница содержит количество пробелов (мне думается так и организовывается выравнивание по ширине во многих редакторах), которые нужно вставить между словами в строке.
Дальше разбиваем строку на слова и добавляем количество необходимых пробелов.
А вот тут у меня заковыка происходит: не могу допетрить как распределить пробелы между словами. Ведь где-то нужно вставить два пробела, где-то три, а где-то и вообще не нужно.
Вот сижу и думаю, как это сделать.
Ну например, длина строки текста 46 символов, лимит строки 60 символов. Значит нужно вставить в строку 14 пробелов. Количество слов (если делить строку через Split с разделителем Chr$(32)) равно шести.
Т.е. имеем строку из шести слов, длинной 46 символов, лимит 60 и нужно с помощью 14 пробелов выровнять её по ширине. Как? Голова уже пухнет. Какой бы метод ни выбрал (посимвольно пробегать строку, через цикл по елементам массива слов в строке или ещё как), всё увязывается на Mid$ и на кучу проверок If, что мне кажется не очень рациональным и аккуратным с точки зрения организации и обработки возможных ошибок.
Помогите, плиз. Можно теорией, можно кодом. Во втором случае будет более наглядно. Но и в первом буду премного благодарен.