DrawText

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
tria
постоялец
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10
Контактная информация:

DrawText

Сообщение tria »

Нужно узнать высоту выводимого текста с учетом переноса слов.
Пока что нашел только DrawText.
Вопрос: есть ли кроссплатформенное решение данной задачи? (в дальнейшем проект будет работать и в Линуксе)
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

TCanvas.TextHeight
перенос слов? ХЗ
Timid
постоялец
Сообщения: 290
Зарегистрирован: 21.11.2007 20:33:15

Сообщение Timid »

Подбирайте количество слов в строке, подсчитывая размер строки в пикселях.

Общая схема такая:
В цикле ищете разделитель (пробел, запятая, перенос, точка, #10 и прочее), найдя, вычисляете через textwidth ширину текста.
Как только выйдите за границу отведенного блока, отрезаете начало и повторяете цикл для оставшейся части строки.
tria
постоялец
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10
Контактная информация:

Сообщение tria »

Timid писал(а):Подбирайте количество слов в строке, подсчитывая размер строки в пикселях.

Общая схема такая:
В цикле ищете разделитель (пробел, запятая, перенос, точка, #10 и прочее), найдя, вычисляете через textwidth ширину текста.
Как только выйдите за границу отведенного блока, отрезаете начало и повторяете цикл для оставшейся части строки.

Мысль понял...
Суровенько...
Боюсь, что может дать затык по скорости - в грид вывожу результат запроса...
Я как-то надеялся, что есть что-то встроенное...
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение Brainenjii »

Есть TextRect - выводит текст в ограниченный rect. Можно задать нужную ширину и довольно большую высоту, затем по scanline'ом найти место где начинаются пустые линии и обрезать - это и будет нужная ширина...
Ask
постоялец
Сообщения: 163
Зарегистрирован: 25.12.2008 02:51:37

Сообщение Ask »

Для расчёта -- LCLIntf.GetTextExtentExPoint
Для вывода -- TCanvas.TextRect с нужным TextStyle
Ответить