Зависает отчёт при печати Richedit' ов
День добрый! Долго искал ошибку по причине зависания отчёта и нашёл.
При включенном AllowSplit и Stretched в MasterData, находились два компонента TFrxMemoView и под ним TfrxRichView(StretchMode = smMaxHeight). Лист формата A5, отчёт периодически зависал намертво. Ошибка находится в модуле frxRich.pas в функции function TfrxRichView.DrawPart: Extended;
код
Значение LastChar постоянно имеет значение 103, с остальными переменными не разобрался.
Вставил костыль
При включенном 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));