Автоподбор размера шрифта
Здравствуйте Уважаемые.
Хочу в Fast Report решить достаточно интересную задачку.
В отчете обеспечить автоматический подбор размера шрифта в зависимость от объема текста. ТО есть если текст не умещается в поле TfrMemoView - то шрифт автоматически уменьшается, пока полностью не поместится.
Такую функцию я сначала реализовал в обычном окне к компоненте Tlabel и все прекрасно работает. Она основана на циклическом использовании APIшной функции DrawText – которая возвращает длину и высоту Rect’a необходимого для написания текста – если фактический размер Tlable меньше необходимого Rect’а, то уменьшаем шрифт надписи на 1 пункт и так пока весь текст не будет виден.
Тоже самое я попытался сделать с TfrReport «повесившись» на событие OnBeforePrint.
Но проблема в том что у TfrMemoView я не могу получить содержимое текста, в этом обработчике. На момент выполнения OnBeforePrint в TfrMemoView.Memo содержится еще не сам текст из источника данных, а название полей, то есть тот текст - который вводится в режиме конструктора отчета.
Может есть у кого идея как решить эту проблему?
Возможно, существуют другие, альтернативные пути решения данной задачи автоподбора размера шрифта?
Хочу в Fast Report решить достаточно интересную задачку.
В отчете обеспечить автоматический подбор размера шрифта в зависимость от объема текста. ТО есть если текст не умещается в поле TfrMemoView - то шрифт автоматически уменьшается, пока полностью не поместится.
Такую функцию я сначала реализовал в обычном окне к компоненте Tlabel и все прекрасно работает. Она основана на циклическом использовании APIшной функции DrawText – которая возвращает длину и высоту Rect’a необходимого для написания текста – если фактический размер Tlable меньше необходимого Rect’а, то уменьшаем шрифт надписи на 1 пункт и так пока весь текст не будет виден.
Тоже самое я попытался сделать с TfrReport «повесившись» на событие OnBeforePrint.
Но проблема в том что у TfrMemoView я не могу получить содержимое текста, в этом обработчике. На момент выполнения OnBeforePrint в TfrMemoView.Memo содержится еще не сам текст из источника данных, а название полей, то есть тот текст - который вводится в режиме конструктора отчета.
Может есть у кого идея как решить эту проблему?
Возможно, существуют другие, альтернативные пути решения данной задачи автоподбора размера шрифта?
Комментарии
Да, это действительно работает, только в случае если текст в одну строку...
Но у меня WordWrap = True, и в этом случае в Мемо получается строчка мааааленькими буковками без переноса слов.
Попытался использовать CalcHeight - но при формировании отчета ругается...
Начал мудрить с наследованием от TfrMemoView, чтобы добраться до метода CalcHeight в обработчике TfrReport.OnBeforePrint - вообще переполнение стека получил.
Что то не получается решить эту задачку сходу...
Ладно, буду ковыряться, тем более что лицензию FR я уже купил и "слазить" с этого репортера в перспективе не резон.