Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 5267|回复: 7

lazarus 如何使用自带控件实现DBGrid打印预览功能

[复制链接]

该用户从未签到

发表于 2011-6-13 08:49:36 | 显示全部楼层 |阅读模式
lazarus自带的组件可以实现DBGrid打印预览功能吗?怎么实现?或者有什么组件可以实现,高手指点下
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2011-6-14 09:59:06 | 显示全部楼层

回 楼主(zaciig) 的帖子

没人解答下,请问下 lazreport怎么使用,这个组件不是用打印预览功能吗
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-6-14 19:05:44 | 显示全部楼层
lazreport 就是一组报表组件,是从FastReport转过来的,如果用过FastReport 就很简单了!
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2011-6-15 09:47:18 | 显示全部楼层

回 2楼(gbm_pgs) 的帖子

恩,fastreport是很简单,可是我这边不知道什么情况,总是装不上,编译的时候提示 cannot find unit libc used by rlutils,我的是在ubuntu下面的是组件不支持linux吗
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-6-15 10:20:06 | 显示全部楼层
转帖自 CSDN

这类问题,google上搜索,很多答案的。

procedure   TForm1.Button2Click(Sender:   TObject);   
const   
     LeftBlank=1;   //定义页边距,单位厘米   
     RightBlank=1;   
     TopBlank=1;   
     BottomBlank=1;   
var   
     PointX,PointY:integer;   
     PointScale,PrintStep:integer;   
     s:string;   
     x,y:integer;   
     i:integer;   
begin   //获取当前打印机的分辨率   
        PointX:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSX)/2.54);   
  PointY:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSY)/2.54);   

  //根据打印机和屏幕的分辨率计算出从屏幕转换到打印机的比例    

        PointScale:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSX)/Screen.PixelsPerInch+0.5);   
    
      //   横向打印   
      printer.Orientation:=poLandscape;   

     //打印的字体和大小   
  printer.Canvas.Font.Name:=′宋体′;   
  printer.canvas.Font.Size:=10;   

     //根据字体的大小确定每行的高度   
  s:=′漳州市刑警支队′;   
  PrintStep:=printer.canvas.TextHeight(s)+16;   

     //打印的起点位置   
  x:=PointX*LeftBlank;   
  y:=PointY*TopBlank;   

     //DataSource1是DBGrid1所连接的数据源   

  if   ((DataSource1.DataSet).Active=true)   and   ((DataSource1.DataSet).RecordCount〉0)   
        then   
  begin   
  printer.BeginDoc;                                   
  (DataSource1.DataSet).First;     
  while   not   (DataSource1.DataSet).Eof   do   
  begin   
          //打印DBGrid中的所有列   
     for   i:=0   to   DBGrid1.FieldCount-1   do   
     begin   
       //假如所要打印的列超出了打印范围,则忽略该列   
         if   (x+DBGrid1.Columns.Items.Width*PointScale) <=(Printer.PageWidth-PointX*RightBlank)   then   
         begin   //画表格线   
                    //每页的第一行打印表头   
                  Printer.Canvas.Rectangle(x,y,x+DBGrid1.Columns.Items.Width*PointScale,y+PrintStep);   
                  if   y=PointY*TopBlank   then   
                   Printer.Canvas.TextOut(x+8,y+8,DBGrid1.Columns.Title.Caption)   
               else   
                   Printer.Canvas.TextOut(x+8,y+8,DBGrid1.Fields.asString);
              end;   //计算下一列的横坐标   
            x:=x+DBGrid1.Columns.Items.Width*PointScale;   
     end;   

        if   not   (y=PointY*TopBlank)   then   
          (DataSource1.DataSet).next;   

    x:=PointX*LeftBlank;   
        y:=y+PrintStep;   
        //换页!   
      if   (y+PrintStep)> (Printer.PageHeight-PointY*BottomBlank)   then   
      begin   
     Printer.NewPage;   
     y:=PointY*TopBlank;   
     end;   
    end;   

    printer.EndDoc;   
     (DataSource1.DataSet).First;   
     Application.MessageBox(′打印完成′,′打印′,32);   
  end;   
end;
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2011-6-15 16:17:34 | 显示全部楼层
谢谢 我试试
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-6-15 16:39:00 | 显示全部楼层
我用FortesReport组件可以,这个组件本社区里有,可以用
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2011-6-16 09:52:14 | 显示全部楼层
为什么我的安装还是有问题呀
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2025-8-28 17:45 , Processed in 0.069600 second(s), 9 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表