初用delphi,用fastReprt制作报表,要求大致是这样的.
纸张大小12*12,打印格式如下
---------------------------------------
[xxxx标题] //动态的
号码:xxxx XXXX年XX月XX日
---------------------------------------
名字:xxxxx 数量:xxxx
--------------------------------------
型号 | 内容 | 备注
---------------------------------------
XXXXX | XXX | XXXX
--------------------------------------
XXXXX | XXXXX | XXXXXX
--------------------------------------
........|........... | ....
--------------------------------------
说明 | 签字
-------------------------------------- 其中x用传值解决,X是读取的数据库,每页XXX数据不多余8条.多余八条接着打类似的报表.用到什么Band,怎么控制到8条数据后接着打印一张新的.越详细越好.多谢各位大虾赐教.
纸张大小12*12,打印格式如下
---------------------------------------
[xxxx标题] //动态的
号码:xxxx XXXX年XX月XX日
---------------------------------------
名字:xxxxx 数量:xxxx
--------------------------------------
型号 | 内容 | 备注
---------------------------------------
XXXXX | XXX | XXXX
--------------------------------------
XXXXX | XXXXX | XXXXXX
--------------------------------------
........|........... | ....
--------------------------------------
说明 | 签字
-------------------------------------- 其中x用传值解决,X是读取的数据库,每页XXX数据不多余8条.多余八条接着打类似的报表.用到什么Band,怎么控制到8条数据后接着打印一张新的.越详细越好.多谢各位大虾赐教.
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;
are you ok?
还有一想法没试过。就是在报表的报表脚画上8-1个横竖线行。根据记录数控制其显示和报表脚的高度。
但我在使用的时候碰到错误.
错误是'不能将字符串转换为浮点型',挺纳闷的.我是参照他的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????
加一个child band名为child1 ,在master Band 中onBeforprint
加入如下代码:
while FreeSpace > 40 do //多高自己控制.
ShowBand(Child1);