在FastReport中如何用程序来调整上下,左右边距?(在线等,急急!)
解决方案 »
- 生成助记码
- 数据库版不能打开,在此问一下 TClientDataSet 如何检索错误记录
- 拿到一份源程序,里面的大小写和空格及不规范,有什么工具可以整理Delphi的源程序?
- 任务栏的问题
- 新闻,新闻 《WINXP SP2 的大问题》。。。。
- 单位买了清华紫光的1236U扫描仪,现在只剩一台硬件了,请问在哪里找扫描仪控制软件?
- 谁知道目前一般财务软件的市场价格?
- 为什么会出错?
- 请教:怎么用delphi自动生成一个word文件(*.doc)!(分数不够面议!)
- 哪个牌子的加密狗好
- 请教用什么函数将一文体文件(txt)里的全部文字读到Tmemo中?
- 看了“李维-高效数据库编程”一书,第一部分例子中他用的是interbase,但是我用Sql server 2000就怎么不行了?
在上面的例子中报表的所有栏宽是相等的。可是,在大多数情况下它是需要根据数据确定每栏的宽度。因此,例如,有两个栏,一个栏包含行号而另一个包含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和控件内容时就是这样工作的。
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;