![]() |
Выравнивание Justify
Мне нужно написать свой модуль (на Delphi), где была бы реализована
возможность выравнивания текста (например, по левому краю или по центру..). не могу придумать и реализовать алгоритм. |
Mavlyudov
Выравнивание внутри какого компонента ? |
Делается это в два этапа для каждой строчки:
1. замер текста w и вычисление смещения x (TCanvas.GetTextExtent) 2. печать текста (TCanvas.TextOut) со смещением x для левого выравнивания x=0, для правого x:=w0-w, по центру: x:=(w0-w) div 2 Full Justify делается немного сложнее. Нужно разбить текст на слова, узнать сколько в строчке свободного места и равномерно разделить место (смещения) между пробелами. Всё это можно не делать, а воспользоваться функцией (winapi) DrawText или DrawTextEx Цитата:
|
ну например есть модуль. и этот модуль создает на диске файл... в этот файл записывается какой-то текст (например пишет его туда все тот же модуль, а можно и вручную загнать туда текст). Потом, используя этот модуль, например при нажатии на кнопку, открываем созданный файл на чтение (reseset), выравниваем текст и перезаписываем в файл.
Но, если честно, я не понял, как реализовать алгоритм, предложенный pva. |
Вложений: 1
Mavlyudov
Cм. аттач, выравнивание строк указанного файла на указанную ширину, в виде программы. |
Спасибо, за выравнивание по ширине.
Буду разбираться. Ну а если я выравниваю по правому краю, то мне,наверное, надо выбросить все пробелы вконце строки, а потом добавить слева (в начале строки) нужное количество пробелов до 80 символов?!. только как это реализовать в делфи. подскажите, хотябы как удалить все пробелы вконце строки. |
Mavlyudov
По правому краю вообще в три строчки пишется (s - строка для выравнивания, w - необходимая ширина): Код:
function StringRight(const s: String; const w: Integer): String; Код:
function StringRight2(const s: String; const w: Integer): String; |
Вложений: 2
Вдруг неожиданно нашел применение данного кода и у себя в одном приложении... Правда пришлось слегка модифицировать...
В общем обновил аттач, добавил функцию String_To_SameWidth2(var strlist: TStringList; const w: Integer), которая обладает намного более солидными возможностями по выравниванию текста. Например, при возможности дополняет текущую строку словами из следующей или, наоборот, обрезает (при превышении нужной ширины). Так же корректно обрабатывает абзацы и прочие отступы. Побочным эффектом стала возможность размещать отформатированный (выровненный) текст в несколько столбцов. |
Время: 10:18. |
Время: 10:18.
© OSzone.net 2001-