fastReport制作报表,急阿.

ajou 2005-04-08 05:15:41
初用delphi,用fastReprt制作报表,要求大致是这样的.
纸张大小12*12,打印格式如下
---------------------------------------
[xxxx标题] //动态的
号码:xxxx XXXX年XX月XX日
---------------------------------------
名字:xxxxx 数量:xxxx
--------------------------------------
型号 | 内容 | 备注
---------------------------------------
XXXXX | XXX | XXXX
--------------------------------------
XXXXX | XXXXX | XXXXXX
--------------------------------------
........|........... | ....
--------------------------------------
说明 | 签字
--------------------------------------

其中x用传值解决,X是读取的数据库,每页XXX数据不多余8条.多余八条接着打类似的报表.

用到什么Band,怎么控制到8条数据后接着打印一张新的.越详细越好.

多谢各位大虾赐教.
...全文
246 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
LZGUI 2005-04-12
  • 打赏
  • 举报
回复
补空白行如下:
加一个child band名为child1 ,在master Band 中onBeforprint
加入如下代码:
while FreeSpace > 40 do //多高自己控制.
ShowBand(Child1);
benchozhang 2005-04-12
  • 打赏
  • 举报
回复
mark
ajou 2005-04-12
  • 打赏
  • 举报
回复
先结了吧,我的问题还是存在.

正考虑我的职业问题...........@#@!#$!@#
ajou 2005-04-11
  • 打赏
  • 举报
回复
我试试.
NewQger 2005-04-11
  • 打赏
  • 举报
回复
有个办法很笨,取数据时都转换成字符类型。sql server用cast() 或 convert()函数。向记录集中加你要的横竖线记录条数= recordcount / 8的余数,再将记录集给报表做源,
are you ok?
还有一想法没试过。就是在报表的报表脚画上8-1个横竖线行。根据记录数控制其显示和报表脚的高度。
ajou 2005-04-11
  • 打赏
  • 举报
回复
谢谢supervisors,问题没有解决,就是'如果XXX不满足8条,用横竖线分割的空行填足8行'.

再次希望大虾出手.
ajou 2005-04-11
  • 打赏
  • 举报
回复
我想他的TfrxCrossView.AddValue应该可以解决我的问题,这样可以保证不写进数据库里.我用的是oracle9I.
但我在使用的时候碰到错误.
错误是'不能将字符串转换为浮点型',挺纳闷的.我是参照他的print Table的示例写的.很奇怪.
代码和示例的一样.
procedure TForm1.frxReport1BeforePrint(c:TfrxReportComponent);

var
Cross: TfrxCrossView;
i,j:integer;
begin
if c is TfrxCrossView then
begin
Cross := TfrxCrossView(c);

ADOQuery1.First;
i := 0;
while not ADOQuery1.Eof do
begin
for j := 0 to ADOQuery1.Fields.Count - 1 do
Cross.AddValue([i], [j], [Adoquery1.Fields[j].AsString]); //*********错误位置
ADOQuery1.Next;
Inc(i);
end;
end;
end;

//-----------------------------------------------
//why????
supervisors 2005-04-09
  • 打赏
  • 举报
回复
这是典型的中国式报表,我也想找答案呢!
ajou 2005-04-08
  • 打赏
  • 举报
回复
补充一点,就是如果XXX不满足8条,打8条用横竖线分割的空行
supervisors 2005-04-08
  • 打赏
  • 举报
回复
1、设置纸张高度!超出将自动换行!


2、有多少就打多少
完全可以设置,但是要在程序中进行控制。
frprint.pgsize=256;
frprint.pgwidth=2100;(纸张宽度,可根据需要设定)
frprint.pgheight=每页的表头高度+明细每条高度*明细记录数+每页的汇总高度+上办界高+下边界高+常数。
frprint.preparereorpt;(准备报表)
frprint.showreport;

完成。在报表设计器中显示的是像素,转换成毫米为1:3.6,这样进行计算就可以算出每页的高度。即可完成即打即停功能、二打一、三打一、整页打印等控制。很方便。

动态赋值
TfrxMemoView(FrxReport1.FindComponent('Memo1')).text:='...';

自定义纸张
uses Printers;

var
ADevice, ADriver, APort: array[0..255] of Char;
DeviceHandle: THandle;
DevMode: PDeviceMode;
begin
Printer.GetPrinter(ADevice, ADriver, APort, DeviceHandle);
if DeviceHandle = 0 then
ShowMessage('无法设置打印机参数!')
else
DevMode := GlobalLock(DeviceHandle);
if not DeviceHandle = 0 then GlobalUnlock(DeviceHandle);
with DevMode^ do
begin
dmFields := dmFields or DM_PAPERLENGTH;
dmPaperLength := 10; //自定义纸张长度
dmFields := dmFields or DM_PAPERWIDTH;
dmPaperWidth := 100; //自定义纸张宽度
end;//with
end;

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧