delphi报表输出的手写代码
本文系原创,转载请注明出处,版权所有,违者必究!
procedure TForm1.RvSystem1Print(Sender: TObject);
begin
//首先要在程序中添加一个RVSYSYTEM
//然后用 如下With..do的语句begin..end之间的内容为报表设计格式
with sender as tbasereport do
begin
setfont('宋体',18); //设置字体格式和大小
canvas.Font.Color:=clblue; //设置字体颜色,clblue,clred,clgreen等等
bold:=true;//确认是否加粗文字,
underline:=true; //确认是否有下划线;
fontrotation:=90;//设置文字旋转角度
ypos:=1.5; {//设置打印的Y坐标。是相对于纸张顶部的距离 ,x坐标是相对于纸张左边缘而言。而且x坐标不需要初始设置,一般在各个打印过程或方法里面定义,如下:}
printcenter('标题',pagewidth/2); {//根据设置打印文字(打印文字可以为edit.text这样根据输入决定,eg:printcenter(edit1.text,2))。第二参数定义X坐标。
//如果调用printpjleft
//就是在pagewidth/2 处左边打印;}
ypos:=2.5;
xpos:=pagewidth/2;
fontrotation:=0;
print('由x,y坐标位置 打印文字');//调用的是print
cleartabs; // 下面打印表格。清楚以前的表格设置,初始化表格设置。
setfont('宋体',12); //要改变打印字体的格式。需要再初始化定义。
ypos:=1.8;
canvas.Font.Color:=clblack;
setpen(clblack,pssolid,20,pmcopy);{// 设置画笔风格。第一个参数为颜色。第二个参数为画笔风格,这里pssolid表示实线绘制。当然还可以设置为虚线
// 第三个参数为画笔宽度(可以为负,参见DELphi Help)。但我设置了只改变表格的右边,不知道为什么,第四个参数我也没弄懂)}
settab(0.2,pjcenter,2,0,boxlineall,50);{设置制表(具体来说是定义表格每列的格式),第一参数为表格的X坐标位置 ,如果设置为na 就是紧接上一个表格绘制;
//第二个参数表格内文字是打印在左边,右边,还是居中.
//第三个参数为表格横向宽度,如果这个参数不为0,那么表格内的文字就会打印在表格里面。而不是在表格的位置;
//第四个参数为表格内文字距离边的距离。以1%英寸为衡量单位,比如这里用pjleft方式打印。那么就是文字距离表格右边的距离;如果采用pjcenter的方式打印貌似 这个设置就没用.
//第五个参数表示表格的哪一条边绘制。这里选择所有。
//第六个参数delphi help说明是定义表格背景影音的百分比。}
//只定义一次Settab,可通过循环调用tab方法。打印多行
settab(na,pjcenter,2,0,boxlineall,0); //定义列 '数据'
tab(-2,na,-2,-2,0);{//定位制表(在调用println('')方法前 ,每调用一次tab依次定位shetab设置制表的列。调用prinln('')后。换行,通过换行多次定位制表列。可以重复打印多行)。Tab(LeftWidth: integer; RightWidth: integer; TopWidth: integer; BottomWidth: integer; ShadeOverride: integer);
//前面四个参数分别设置左右上下四条边的宽度。为负值就是以1/100英寸为元单位 如果设置为正值 那么就是以一个点宽为元单位,如果为0,那么表示无边框打印,如果设置为na,那么就以setpen设置的宽度来绘制,最后一个参数设置背景阴影的百分比,这个设置将优于表格的阴影设置,并且重置表格起始设置 ;}
print('第一行');
tab(na,na,na,na,na);
print('数据1');
println('');//换行打印
tab(-2,na,-2,-2,0);
print('第二行');
tab(na,na,na,na,na);
print('数据2');//打印多行可以通过循环语句实现 ,可以实现数据库多次打印
newpage;
home;
gotoxy(2.5,1);
print(‘另一种打印文字的方法’);
end;
end;
一些相关过程的说明:
println(’你好’); //同print一样。只不过println过程在打印完当前内容之后转到下一行。
Println(‘’); 等同于newline;
Home;//转移到页面的第一行开始位置
Newpage; //新的一页,保存setion的相关设置。以及printheader or printbooter的相关内容
Sectionsettings, 页面设置 比如要设所有页面的上,下边距。必须用margintop :=’0.7’;or marginbottom:=’0.5;这样改变设置’ 。margintop ,marginbottom,marginleft等等在打印的时候并不直接页面产生直接的作用,只有在resetsection 被调用或者新页面产生的时候通过改变sectionsettings的值来改变打印格式 ; 例如。要改变当前页的上页边距为0.5可以用sectiontop:=0.5;或者margintop:=0.5; 但是想当设置margintop后。以后新产生的页面所有的上边距都是0.5,而且我发现如果同时设置了margintop,sectiontop,后者就不管用;
Sectiontop:=1;
Sectionbottom:=10.9;//这两个是设置。只能改变当前页面的设置。当新页面产生时,sectionsettings初始化为margin的值;
同时,margin 和section的度量方法不一致 section测量的时候总是从page上面或者左边度量。而margin是从最近的那条边度量;
Resetsection;根据margin初始化页面设置
Settopofpage;设置sectiontop的值 为顶端到当前行的底部;
在报表中画直线的方法:
Line (X0,Y0,X1,Y1:Integer);
或者moveto(x,y:integer);
Lineto(x,y:integer);

浙公网安备 33010602011771号