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,clredclgreen等等

      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 marginbottommarginleft等等在打印的时候并不直接页面产生直接的作用,只有在resetsection 被调用或者新页面产生的时候通过改变sectionsettings的值来改变打印格式   例如。要改变当前页的上页边距为0.5可以用sectiontop=0.5;或者margintop:=0.5; 但是想当设置margintop后。以后新产生的页面所有的上边距都是0.5,而且我发现如果同时设置了margintopsectiontop,后者就不管用;

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);

posted @ 2011-08-02 15:36  大漠孤烟SKY  阅读(835)  评论(0)    收藏  举报