Баг в Fastreport 5.1.8 (frxpreviewpages.pas)

perceptronperceptron Минск
отредактировано November 2014 Раздел: FastReport VCL
Открываю отчёт. На нём вывожу 3 листа формата A6 которые будут печататься на одном A4 через PrintJoinedPages в frxPreviewPages.pas

Далее нажимаю Печать.
В настройках выбираю "Текущая"
Получаю в
function GetPageIndex(Index: Integer)
...
if pgList.Count > 0 then
begin
pgIdx := StrToInt(pgList[Index]) - 1; // pgList[Index] содержит некорректный индекс и тут получаем ListIndex Out of bounds (1)
...

В итоге печать подвисла...

Если пофиксить проверкой

if (pgList.Count > 0) and (Index < pgList.Count)

то ошибка не возникает, но на печать в итоге идёт не только выделенная страница A6 а и другие страницы, пока не заполнится весь лист A4 !

P.s. И эта ошибка тянется с давних пор и в младших версиях FastReport...

Комментарии

  • perceptronperceptron Минск
    отредактировано November 2014
    Подправил код немного и теперь всё работает корректно:
      function GetPageIndex(Index: Integer): Integer;
      var
        pgIdx:  Integer;
      begin
        Result := -1;
        // if (pgList.Count > 0) then // было
        if (pgList.Count > 0) and (Index < pgList.Count) then // стало
        begin
          pgIdx := StrToInt(pgList[Index]) - 1;
          if (pgIdx < 0) or (pgIdx > Count) then
            Result := -1
          else
            Result := pgIdx;
        end
        //else if (Index < Count) and (Index >= 0) then // было
        else if (Index < MaxCount) and (Index >= 0) then // стало
          Result := Index;
      end;
    
    Исправьте в след. версиях, чтоб вручную не менять каждый раз...
  • Stalker4Stalker4 123
    отредактировано 16:52
    perceptron написал: »
    Подправил код немного и теперь всё работает корректно:
    Исправьте в след. версиях, чтоб вручную не менять каждый раз...
    В FR 5.1.12 этот код не исправили.
  • gpigpi
    отредактировано 16:52
    Исправлено. Будет доступно в следующем билде

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

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