在FastReport中如何用程序来调整上下,左右边距?(在线等,急急!)

解决方案 »

  1.   

    打印可变栏数和栏宽可变的报表  \demos\PRNTBL2
    在上面的例子中报表的所有栏宽是相等的。可是,在大多数情况下它是需要根据数据确定每栏的宽度。因此,例如,有两个栏,一个栏包含行号而另一个包含memo中的字段,显然第一个栏比另一个包含memo字段的栏的宽度要窄很多。扩展的源代码放在PRNTBL2子目录中。这个例子除了栏宽是根据数据决定以外,其它的与上一例子相同。这个例子中有两个TfrReport的事件处理程序用于动态改变栏宽。要根据数据动态定义栏宽,就必须使用TfrReport 对象的OnPrintColumn事件。在这个例子中栏中文本框的宽度由字段的“W”字母宽度的个数决定的;对于“日期和时间”字段,设置宽度为15个字母“W”的宽度;其它所有的栏宽设为64点。这个OnPrintColumn事件处理的源代码显示如下:procedure TForm1.frReport1PrintColumn(ColNo: Integer; var Width: Integer);var  Field: TField;begin  Field := Table1.Fields[ColNo – 1];  if Field is TStringField then    Width := Field.Size * Canvas.TextWidth('W')  else if Field is TDateTimeField then    Width := 15 * Canvas.TextWidth('W')  else    Width := 64;  FWidth := Width;end;OnBeforePrint事件处理中将栏宽设为上面事件处理中定义的宽度:procedure TForm1.frReport1EnterRect(Memo: TStringList; View: TfrView);begin  View.dx := FWidth;end;在这个例子中由于每个栏的宽度按数据确定,所以报表打印中非常有效地生成了页面。TfrPrintTable和TfrPrintGrid控件在打印TDBGrid和控件内容时就是这样工作的。
      

  2.   

    我知道了:
    var
     i: Integer;
     t: TfrView;
    begin
    for i := 0 to frReport1.Pages[0].Objects.Count - 1 do
    begin
     t := frReport1.Pages[0].Objects[i];
     t.x := t.x + 边距
    end;