Автоподбор размера шрифта

отредактировано 14:27 Раздел: FastReport 2.xx VCL
Здравствуйте Уважаемые.
Хочу в Fast Report решить достаточно интересную задачку. ;)

В отчете обеспечить автоматический подбор размера шрифта в зависимость от объема текста. ТО есть если текст не умещается в поле TfrMemoView - то шрифт автоматически уменьшается, пока полностью не поместится.

Такую функцию я сначала реализовал в обычном окне к компоненте Tlabel и все прекрасно работает. Она основана на циклическом использовании APIшной функции DrawText – которая возвращает длину и высоту Rect’a необходимого для написания текста – если фактический размер Tlable меньше необходимого Rect’а, то уменьшаем шрифт надписи на 1 пункт и так пока весь текст не будет виден.

Тоже самое я попытался сделать с TfrReport «повесившись» на событие OnBeforePrint.
Но проблема в том что у TfrMemoView я не могу получить содержимое текста, в этом обработчике. На момент выполнения OnBeforePrint в TfrMemoView.Memo содержится еще не сам текст из источника данных, а название полей, то есть тот текст - который вводится в режиме конструктора отчета.

Может есть у кого идея как решить эту проблему?
Возможно, существуют другие, альтернативные пути решения данной задачи автоподбора размера шрифта?


Комментарии

  • отредактировано 14:27
    Все проще. В OnBeforePrint нужного объекта пишем:
      Memo.Clear;
      Memo.Add([Company]); // то, что должно быть в мемо
      Font.Size := 10;
      while CalcWidth > Width do
        Font.Size := Font.Size - 1;
    
  • отредактировано May 2004
    To AlexTZ

    Да, это действительно работает, только в случае если текст в одну строку...
    Но у меня WordWrap = True, и в этом случае в Мемо получается строчка мааааленькими буковками ;) без переноса слов.
    Попытался использовать CalcHeight - но при формировании отчета ругается...
    Начал мудрить с наследованием от TfrMemoView, чтобы добраться до метода CalcHeight в обработчике TfrReport.OnBeforePrint - вообще переполнение стека получил.


    Что то не получается решить эту задачку сходу... ;)

    Ладно, буду ковыряться, тем более что лицензию FR я уже купил и "слазить" с этого репортера в перспективе не резон. ;)

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.