Зависает отчёт при печати Richedit' ов

kilkil
отредактировано 15:36 Раздел: FastReport 4.0
День добрый! Долго искал ошибку по причине зависания отчёта и нашёл.
При включенном AllowSplit и Stretched в MasterData, находились два компонента TFrxMemoView и под ним TfrxRichView(StretchMode = smMaxHeight). Лист формата A5, отчёт периодически зависал намертво. Ошибка находится в модуле frxRich.pas в функции function TfrxRichView.DrawPart: Extended;
код
    { RTF4.1 trying to place data, if data doesn't fit decrease line index and try again }
    { need for tables and object in richedit }
    repeat
      LastChar := FRichEdit.Perform(EM_FORMATRANGE, 0, Integer(@Range));
      if chrg.cpMax <> -1 then
        LastChar := chrg.cpMax;
      chrg.cpMax := FRichEdit.LineFromChar(LastChar - 1) - 1;
      if chrg.cpMax < 0 then
        break;
      chrg.cpMax := FRichEdit.GetLineIndex(chrg.cpMax);
    until ((rcPage.Bottom - rc.Bottom >= 0) or
      (chrg.cpMax = LastChar));

Значение LastChar постоянно имеет значение 103, с остальными переменными не разобрался.
Вставил костыль
    { RTF4.1 trying to place data, if data doesn't fit decrease line index and try again }
    { need for tables and object in richedit }
      _test := 0;
    repeat
      inc(_test);
      LastChar := FRichEdit.Perform(EM_FORMATRANGE, 0, Integer(@Range));
      if chrg.cpMax <> -1 then
        LastChar := chrg.cpMax;
      chrg.cpMax := FRichEdit.LineFromChar(LastChar - 1) - 1;
      if chrg.cpMax < 0 then
        break;
      chrg.cpMax := FRichEdit.GetLineIndex(chrg.cpMax);
      if _test = 100 then 
        break;
    until ((rcPage.Bottom - rc.Bottom >= 0) or
      (chrg.cpMax = LastChar));

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

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