本人想将DBGrid、cxGrid中各列内容动态地在FastReport上显示。。具体做法如下:
1. 本人自定义了一个打印对话框。 在该对话框中可以设定打印的页边界。
2.在preview报表前,把对话框中各边界值写入FastReport组件中。
with printRec do
frReport.pages[0].pgsize=PaperSize;
frReport.pages[0].pgOr=TPrinterOrientation(Orientation);  
frReport.pages[0].pgMargins.Left:=Round(LeftMargin*3.6/10.0);  //各边界输入以0.1mm为单位
frReport.pages[0].pgMargins.Right:=Round(RightMargin*3.6/10.0);
frReport.pages[0].pgMargins.Top:=Round(TopMargin*3.6/10.0);
frReport.pages[0].pgMargins.Bottom:=Round(BottomMargin*3.6/10.0);注:各边界输入以0.1mm为单位,因为pgMargins是以screen pix为单位,需要转换。3.动态生成报表的部分代码如下:
var v: TfrView;
    b: TFrBandView;
    Page: TFrPage;
    i,NextMomoLeft,MemoWidth: integer;
    Rate: double;
    CanvasWidthInPix: double; //报表上表格各列总和
    TotalColumnWidths: integer;   //屏幕上grid中各列宽度总各
begin
  NextMemoLeft:=FrameInteral; TotalColumnWidths:=0;
  Rate:=3.6;    // mm与pix转换系数
  CanvasWidthInPix:=(frReport1.Pages[0].pgWidth* Rate/10.0-frReport1.Pages[0].pgMargins.left
                    -frReport1.Pages[0].pgMargins.right)  ;  Page:=frReport.Pages[0];  //*****************create ColumnHeader band*******************************//  b := TfrBandView.Create;     // create ColumnHeader band
  b.Prop['Stretched']:=true;
  b.SetBounds(0, 300, 0, 20);
  b.BandType := btColumnHeader;
  Page.Objects.Add(b);  with tvReport do   //tvReport是cxGrid中的table View
  begin
    for i:=0 to ColumnCount-1 do
     if Columns[i].Visible then  TotalColumnWidths:=TotalcolumnWidths+Columns[i].Width;     for i:=0 to ColumnCount-1 do
    begin
      if Columns[i].Visible then
      begin
         v := TfrMemoView.Create;
         (v as TFrMemoView).FrameTyp:=15;
          MemoWidth:=round((Columns[i].Width*1.0)*CanvasWidthInPix / (TotalColumnWidths*1.0));
          v.SetBounds(NextMemoLeft, 304, MemoWidth, 16);
         v.Memo.Add(Columns[i].Caption);
         Page.Objects.Add(v);
         NextMemoLeft:=NextMemoLeft+MemoWidth;
      end;
    end;
  end;   //end with rxDBG_KhDWend;但程序运行后,显示结果如下:  |-----------------------------------------------|
  | xxxx| xxx| XXX|  xx    | xxx|  xxx|           |
  |------------------------------------------------
表格后边空出一块。别外还有个问题: 
1、FastReport的帮助中说PgMargins是以screen pix为单位的,
但我双击fastReport组件,打开Page Options对话框设置Page Margins时,发现它是以mm为单位的。
我在代码中应以哪个为单位??2.在动态计算各表格各列宽度时,除了考虑pgwidth, pgmargins,是否还要考虑打印机的可打印边距问题???应该如何处理???请前辈指点了谢谢。。