在CSDN里很多人会问,但是不好找答案的问题之一--关于QuickReport(代码示例)
1、 分页
with TQuickReport1.Create(nil) do
begin
NP := StrToInt(Edit1.Text);//每页显示的条数
PrintCount := 0;//页码
IP:= 0;//记录条
prepare;
QRLabel29.Caption:='页共'+inttostr(printer.PageCount)+'页';//显示当前页和总页码
Preview ;
end
在记录条所在的Band(一般为DetailBand)beforeprint中
if IP < NP then
begin
PrintBand := True;
end else
begin
NewPage;
IP:= 0;
end;
在AfterPrint中
IP := IP + 1;
PrintCount := PrintCount+1;
其余的细节,自己调整即可。
2、每一页的合计
很简单,定义一个QREXPR设定公式即可。比如:Sum(某字段)
3、获取QRExpr的值
根据结果的不同可以使用不同的返回属性
QRExpr1.Value.dblResult(intResult......)等等
注意的是,最好在其所在Band中的BeforePrint中获取,否则可能取不到值
4、金额的大小写
定一个转换函数,比如:
function Changdx3( mmje: Double): String;
const
s1: String = '零壹贰叁肆伍陆柒捌玖';
s2: String = '分角元拾佰仟万拾佰仟亿拾佰仟万';
var
s, dx: String;
i, Len: Integer;
function StrTran(const S, S1, S2: String): String;
begin
Result := StringReplace(S, S1, S2, [rfReplaceAll]);
end;
begin
if mmje < 0 then
begin
dx := '负';
mmje := -mmje;
end;
s := Format('%.0f', [mmje*100]);
Len := Length(s);
for i := 1 to Len do
dx := dx + Copy(s1, (Ord(s[i]) - Ord('0'))*2 + 1, 2) + Copy(s2, (Len - i)*2 + 1, 2);
dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零仟', '零'), '零佰', '零'), '零拾', '零'), '零角', '零'), '零分', '整');
dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零零', '零'), '零零', '零'), '零亿', '亿'), '零万', '万'), '零元', '元');
if dx = '整' then
Result := '零元整'
else
Result := StrTran(StrTran(StrTran(dx, '亿万', '亿零'), '零整', '整'), '零零', '零');
end;
然后在QR中一般在PageFooter band中定义QRExpr
procedure TQuickReport1.QRBand3AfterPrint(Sender: TQRCustomBand;
BandPrinted: Boolean);
begin
self.QRLabel2.Caption:=Changdx3(self.QRExpr1.Value.dblResult);
end;
即可在Label2显示相关的大写金额。