我这dbgrid的数据表是超长列宽的可能要分两页才打的下要做到可以打印和预览,请问选哪个报表控件来做比较合适急求帮助谢谢QQ:12665590有人愿意帮我解决的巧妙的话我也愿意适当出点费用的

解决方案 »

  1.   

    补充
    delphi7+ib7的开发平台谢谢
      

  2.   

    用ehlib 控件组合的dbgrid + printdbgrid控件可以直接打印
      

  3.   

    本问题结帖大家有兴趣可以联系我我可以提供用QR实现打印的例子,数据库是IB
      

  4.   

    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 DBGrid2.FieldCount-1 do
          begin //¼ÙÈçËùÒª´òÓ¡µÄÁг¬³öÁË´òÓ¡·¶Î§£¬ÔòºöÂÔ¸ÃÁÐ
           if(x+DBGrid2.Columns.Items[i].Width*PointScale)<=(Printer.PageWidth-PointX*RightBlank) then
           begin //&raquo;&shy;±í&cedil;&ntilde;&Iuml;&szlig;
           //&Atilde;&iquest;&Ograve;&sup3;&micro;&Auml;&micro;&Uacute;&Ograve;&raquo;&ETH;&ETH;&acute;ò&Oacute;&iexcl;±í&Iacute;·
             Printer.Canvas.Rectangle(x,y,x+DBGrid2.Columns.Items[i].Width*PointScale,y+PrintStep);
             if y=PointY*TopBlank then
                Printer.Canvas.TextOut(x+8,y+8,DBGrid2.Columns[i].Title.Caption)
             else
                Printer.Canvas.TextOut(x+8,y+8,DBGrid2.Fields[i].asString);
           end; //&frac14;&AElig;&Euml;&atilde;&Iuml;&Acirc;&Ograve;&raquo;&Aacute;&ETH;&micro;&Auml;&ordm;á×&oslash;±ê
           x:=x+DBGrid2.Columns.Items[i].Width*PointScale;
         end;
         if not (y=PointY*TopBlank) then
           DataSource1.DataSet.next;
           x:=PointX*LeftBlank;
           y:=y+PrintStep; //&raquo;&raquo;&Ograve;&sup3;
           if (y+PrintStep)>(Printer.PageHeight-PointY*BottomBlank) then
           begin
             Printer.NewPage;
             y:=PointY*TopBlank;
           end;
        end;
        printer.EndDoc;
        DataSource1.DataSet.First;
        Application.MessageBox('&acute;ò&Oacute;&iexcl;&Iacute;ê&sup3;&Eacute;&pound;&iexcl;','XDL&Acirc;&frac14;&Ograve;&ocirc;&sup1;&Uuml;&Agrave;í&Iuml;&micro;&Iacute;&sup3;',48);
      end;
    end;
      

  5.   

    fastReport 可以打印控件内容,也很方便
      

  6.   

    用report machine 吧,很简单的
      

  7.   

    这个可以满足你的要求!不用写代码!下载地址:http://www.sailprint.com
    简介:  SailPrint打印组件是一套VCL打印控件。目前最新版本是3.0,可以打印DBGrid,StringGrid,ListView以及直接打印数据源。SailPrint有以下几大特点:    一、SailPrint的特点是快速生成报表,灵活易用,只需几分钟即可完成漂亮的报表。    二、最终用户可以修改报表,开发人员只需调用setoption 这个过程即可让最终用户设置报表。   SailPrint并且保留了设置窗口的源代码,开发人员也可以自己订制设置窗口,这样可以可以跟系统   风格更为一致。包括打印预览窗口也保留了源代码,窗口样式可以随意修改。    三、自动折行功能,估计大家都理解不用多说了,好不好用一试便知。    四、主细表功能,这是新加入的功能,并且支持公式统计。支持的函数有:sum,count,avg以及函数之间   的加减乘除。        例如:sum([字段1])/count([字段2])    五、支持流存储,可以将报表的设置或者将整个报表保存为流,这样可以简单的将报表设置保存到数据   库中,当然也可以保存成文件。这样最终用户修改了报表设置可以方便的保存。    六、多表头功能,设置方法可能与其他控件不一样。大家可以下载试一下。    以上是一些主要特点,还有一些细小功能就不一一列举了,大家下载体验一下吧。