Unconnected Header/footer

отредактировано 22:44 Раздел: FastReport 4.0
Здравствуйте, уважаемые коллеги.

Тренируюсь в динамическом создании отчёта, но при выполнении PrepareReport получаю сабжевую ошибку. Не пойму, что я не так делаю.

Вот фрагмент кода:
function putmemo (parnt: TfrxComponent;
                  const lft, tp, wid, hgt: extended;
                  fnt: TFont; const rotat: smallint;
                  const txt: string;
                  const valgn: TfrxValign;
                  const halgn: TfrxHAlign): TfrxMemoView;
begin
 Result:=TfrxMemoView.Create (parnt);
 with Result
  do begin
      CreateUniqueName;
      left:=lft;
      top:=tp;
      width:=wid;
      height:=hgt;
      Font:=fnt;
      rotation:=rotat;
      halign:=halgn;
      valign:=valgn;
      Text:=txt;
      WordWrap:=true;
      AutoWidth:=false;
      WYSIWYG:=true;
     end;
end;

procedure TForm1.frxReport1GetValue(const VarName: string;
                                    var Value: Variant);
begin
 if VarName='Num' then Value:=frxUserDataSet1.RecNo;
 if VarName='Txt'
  then Value:=StrArray [frxUserDataSet1.RecNo];
end;

procedure TForm1.PrintButtonClick(Sender: TObject);
var
 Pag: TfrxReportPage;
 RepTitle: TfrxReportTitle;
 DataHdr: TfrxHeader;
 DataBand: TfrxMasterData;
 Mem: TfrxMemoView;
 wid1, wid2: extended;
begin
 with frxReport1
  do begin
      DataSets.Clear;
      DataSets.Add (frxUserDataSet1);
      Variables.Clear;
      Variables.AddVariable('MyCategory', 'Num', '');
      Variables.AddVariable('MyCategory', 'Txt', '');
      Pag:=TfrxReportPage.Create (frxReport1);
      Pag.SetDefaults;
      RepTitle:=TfrxReportTitle.Create (Pag);
      RepTitle.Stretched:=true;
      Mem:=putmemo (RepTitle, 0, 0, RepTitle.Width, RepTitle.Height,
                    FontDialog1.Font, 0, 'Заголовок отчёта',
                    vaTop, haCenter);
      Mem.StretchMode:=smMaxHeight;
      DataHdr:=TfrxHeader.Create (Pag);
      DataHdr.Stretched:=true;
      wid1:=DataHdr.Width/8;
      wid2:=DataHdr.Width-wid1;
      Mem:=putmemo (DataHdr, 0, 0, wid1, DataHdr.Height,
                    FontDialog1.Font, 0, '№', vaTop, haCenter);
      Mem.StretchMode:=smMaxHeight;
      Mem.Frame.Typ:=[ftTop]+[ftBottom]+[ftLeft]+[ftRight];
      Mem:=putmemo (DataHdr, wid1, 0, wid2, DataHdr.Height,
                    FontDialog1.Font, 0, 'Текст константы',
                    vaTop, haCenter);
      Mem.StretchMode:=smMaxHeight;
      Mem.Frame.Typ:=[ftTop]+[ftBottom]+[ftLeft]+[ftRight];
      DataBand:=TfrxMasterData.Create (Pag);
      with DataBand
       do begin
           DataSet:=frxUserDataSet1;
           Stretched:=true;
           AllowSplit:=true;
          end;
      Mem:=putmemo (DataBand, 0, 0, wid1, DataBand.Height,
                    FontDialog1.Font, 0,
                    '[Num]', vaTop, haCenter);
      Mem.StretchMode:=smMaxHeight;
      Mem.Frame.Typ:=[ftTop]+[ftBottom]+[ftLeft]+[ftRight];
      Mem:=putmemo (DataBand, wid1, 0, wid2, DataBand.Height,
                    FontDialog1.Font, 0, '[Txt]',
                    vaTop, haCenter);
      Mem.StretchMode:=smMaxHeight;
      Mem.Frame.Typ:=[ftTop]+[ftBottom]+[ftLeft]+[ftRight];
      with frxUserDataSet1
       do begin
           RangeEnd:=reCount;
           RangeEndCount:=20;
          end;
      if PrepareReport
       then if PreviewCheckBox.Checked
             then ShowPreparedReport
             else Print;
     end;
end;

Комментарии

  • gpigpi
    отредактировано 22:44
    Попробуйте задавать координату Top бэндов так, чтобы бэнды располагались на странице в правильном порядке
  • отредактировано 22:44
    Спасибо, помогло. Теперь всё нормально.

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

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