起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: ht88th

网格打印需求(如能实现,一切中国式报表都将easy)**

[复制链接]
发表于 2006-8-22 15:49:53 | 显示全部楼层
帐户和密码都发到ht88th@163.com邮箱了,请查收。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-22 16:53:30 | 显示全部楼层
收到,THANKS!
回复 支持 反对

使用道具 举报

发表于 2006-8-23 09:11:09 | 显示全部楼层
procedure TDDBG.OnSheetCreated(Sender: TObject; ASheet: TSheet);
var
  lCell: TSheetCell;
  lBorder: TCellSideBorder;
begin
  // ASheet 从 0, 0 开始,通过ASheet.Areas 可以对数据集区域进行访问
  // 表头部分
  // 区域开始列, 默认有一个数据集区域,通过 TDataSheetArea(ASheet.Areas[0]) 访问
  ASheet.RowCount := ASheet.RowCount + 1;    // 08-22: 把表格文档扩大一行,注意不是扩大区域。用来画区域尾
  with lBorder do                            // 08-22: 下方新增一行后会造成该行有边框,这里的目的是要消除该边框
  begin
    Line := TCellSideLine.slNone;
    Color := Graphics.clNone;
  end;
  // 08-22: 区域的[0,0]不能修改,下面的ASheet.RowHeights[0] := 0;就是已经把这行隐藏掉了
  ASheet.RowHeights[0] := 0; //30;
  ASheet.RowHeights[1] := 30;                  // 08-22: 下面的几个区域头和页头的纵坐标都依次扩大行,用以跟新的坐标向匹配。
  lCell := ASheet.Cells[ASheet.Areas[0].Left + 2, 1]; //[列位置,行位置]
  lCell.Width := 3;
  lCell.Value := '仅在报表第一页需打印的标题';

  lCell := ASheet.Cells[ASheet.Areas[0].Left + 2, 2];
  lCell.Value := '报表页标题';
  lCell.Width := 2;
  ASheet.RowHeights[2] := 30;
  lCell.Font.Size := 18;  // 设置字体
  ASheet.Insert(3, 3, TSheetOperate.soAllRow, 0, 1);    // 08-22: 表格打印默认在列头上面就有两行空行,如果还需要添加页头或者区域头就需要新增一行再做操作
  lCell := ASheet.Cells[0, 3];   // 08-22:
  lCell.Width := 6;
  lCell.Border[TCellSide.sTop] := lBorder;
  ASheet.CellTypes[ASheet.Areas[0].Right - 1, 3] := TCellType.ctExpression;
  TExprCell(ASheet.Cells[ASheet.Areas[0].Right - 1, 3]).Expression.Text := '''第''+CAST(PageNumber() AS VARCHAR)+''页、共''+CAST(PageCount() AS VARCHAR)+''页''';
  TExprCell(ASheet.Cells[ASheet.Areas[0].Right - 1, 3]).HorzAlign := THorzAlign.haRight;

  // 08-22:这里的页尾和区域尾的纵坐标都是区域的坐标,在最后才把区域向下扩大一行
  lCell := ASheet.Cells[ASheet.Areas[0].Left, ASheet.Areas[0].Bottom];
  lCell.Value := '填表人:';
  lCell.Font.Size := 14;  // 设置字体
  lCell.Color := Graphics.clRed; // 设置背景色
  ASheet.CellTypes[ASheet.Areas[0].Left + 1, ASheet.Areas[0].Bottom] := TCellType.ctExpression;
  lCell := ASheet.Cells[ASheet.Areas[0].Left + 1, ASheet.Areas[0].Bottom];
  TExprCell(lCell).Expression.Text := 'OperatorName()'; // 填写填表人,通过函数取值, 这里同样可以采用参数

  ASheet.CellTypes[ASheet.Areas[0].Right - 3, ASheet.Areas[0].Bottom] := TCellType.ctExpression;
  lCell := ASheet.Cells[ASheet.Areas[0].Right - 3, ASheet.Areas[0].Bottom];
  lCell.Width := 3;                            // 融合区域右下方三个的单元格
  TExprCell(lCell).Expression.Text := 'Now()'; // 设置表达式, 取当前时间
  lCell.HorzAlign := THorzAlign.haRight;       // 右对齐
  lCell.DispType := TCellDispType.dtDate;      // 单元格按日期型显示
  lCell.Format := '''日期: ''YYYY''年''MM''月''DD''日'''; // 日期时间型的显示格式,具体可以参考delphi的FormatDataTime函数的格式参数
  lCell := ASheet.Cells[ASheet.Areas[0].Left, ASheet.Areas[0].Bottom + 1];
  lCell.Value := '客户签名:';
  lCell.Width := 2;
  lCell.Font.Size := 14;  // 设置字体

  ASheet.Areas[0].Top := ASheet.Areas[0].Top - 2 - 1;         // 08-22: 多出一行区域头
  ASheet.Areas[0].Bottom := ASheet.Areas[0].Bottom + 1 + 1;   // 08-22: 多出一行区域尾

  ASheet.Areas[0].HeaderRows := 1;         // 08-22: 区域头
  ASheet.Areas[0].PageHeaderRows := 2 + 2; //HT:2行大小标题 + 两行复合列标题
  ASheet.Areas[0].PageFooterRows := 1 ;    //HT:1行页脚标题
  ASheet.Areas[0].FooterRows := 1;         // 08-22: 区域尾

  // 通过Save方法可以把对象存储下来,通过辅助工具查看
  // ASheet.SaveToFile('d:\1.jsc');
end;

无论结果如何,请楼主给与我们反馈。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-25 14:25:29 | 显示全部楼层
打印效果可以了,THANK YOU VERY MUCH!
经测试,利用下一语句也可实现首页标题:
lPageInfo.SpaceTitleRowCount := 2 + 1; // 指定输出标题后,空出2行,默认空一行 , +1:再多空1行作报表首页标题。

还有上面说的ROWNO的BUG怎么解决?
回复 支持 反对

使用道具 举报

发表于 2006-8-25 14:32:34 | 显示全部楼层
因为最近的版本对Grid的Bug进行了一次修复,升级后再看看是否还存在。目前的话就暂时绕过吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-30 10:42:51 | 显示全部楼层
还有一个问题请教:我已用下面的语句实现了行高,请问如何实现该行的字体大小控制,是否不要一个个单元格设置(这样太繁了)?
ASheet.RowHeights[lRow + J] := SysUtils.StrToInt(lRowHeight);  //实现了行高
。。。//如何 设置[lRow + J] 行的字体为18号宋体字,且要为黑体字 ?
回复 支持 反对

使用道具 举报

发表于 2006-12-30 10:55:57 | 显示全部楼层
设置字体的话还是要在单元格上操作。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-7 17:09:03 | 显示全部楼层

打印预览的一些问题

详细见附件

print.rar

377.05 KB, 下载次数: 44

回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-10 16:59:39 | 显示全部楼层
能解决吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-25 21:18 , Processed in 0.046027 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表