Автоматическое уменьшение шрифта Memo

отредактировано 05:59 Раздел: FastReport 4.0
Добрый день

Есть необходимость в определенном Memo всегда выводить всю информацию, даже если при заданных настройках шрифта текст не влазит. Как можно определить, если текст не влазит в объект (чтобы изменить шрифт объекта) ? Облазил все в настройках, так понимаю стандартными средствами не делается.

Спасибо

Комментарии

  • gpigpi
    отредактировано 05:59
    Используйте функцию TfrxMemoView.CalcWidth в обработчике TfrxMemoView.OnAfterData
    procedure Memo1OnAfterData(Sender: TfrxComponent);
    begin
         Memo1.Font.Size:=10;       
         if Memo1.CalcWidth>Memo1.Width-Memo1.GapX*2 then
           Memo1.Font.Size:=Trunc(Memo1.Font.Size*((Memo1.Width-Memo1.GapX*2)/Memo1.CalcWidth));  
    end;
    
  • xlaalaaxlaalaa Минск
    отредактировано 05:59
    Из моего опыта, хочу предупредить: Функции TfrxMemoView.CalcHeight и TfrxMemoView.CalcWidth дают не правильный результат для полей отчета, значение которых определяется полем БД или выражением в тексте мемо.

    Как смог выяснить функции TfrxMemoView.CalcHeight и TfrxMemoView.CalcWidth корректно вычисляю высоту только для мемок со статически заданным текстом. По этому значение для мемок тоже нужно явным образом вычислять в скрипте перед вызовом этих функций.

    - Предварительно в дизайнере у расчетных объектов TfrxMemoView установить свойство AllowExpressions="False"

    - Скрипт OnBeforePrint сделать примерно так
    procedure Memo1OnBeforePrint(Sender: TfrxComponent);
    begin
        // значение явно вычислить в скрипте
        Memo1.text := <таблица."поле">;
    
        // только потом можно вычислять ширину и высоту 
        Memo1.Font.Size:=10;      
        if Memo1.CalcWidth>Memo1.Width-Memo1.GapX*2 then
           Memo1.Font.Size:=Trunc(Memo1.Font.Size*((Memo1.Width-Memo1.GapX*2)/Memo1.CalcWidth));  
    end;
    
  • gpigpi
    отредактировано 05:59
    написал:
    Из моего опыта, хочу предупредить: Функции TfrxMemoView.CalcHeight и TfrxMemoView.CalcWidth дают не правильный результат для полей отчета, значение которых определяется полем БД или выражением в тексте мемо.
    Поэтому и используется TfrxMemoView.OnAfterData

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

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