行。自己输出:Printer.Canvas.TextOut( x, y, DBGrid1.Fields[i].DisplayText ); 自己计算x, y

解决方案 »

  1.   

    可以啊,也可以用ELIB,还好哪
      

  2.   

    TPrinter能打印一个表格吗?有表格框的那种,每个框内是DBGrid的内容。可以吗?
    如果可以,那么怎么写,尤其是那个表格框怎么控制呢??我可用分比较多,但参与分不多,所以能给的分数不多,如果那位帮我解决了,我另外开几个帖子,给他300分。
      

  3.   

    那么该怎么写呢???我对TPrinter不熟悉,才初次接触,不过我看到例子了,等我全部理解后还没有人说出来,此贴均分。
      

  4.   

    用TPinter要打什么都行!花些时间好好计算位置就OK啦
    Printer.Canvas.TextOut
      

  5.   

    Delphi的报表制作如果不用第三方工具简直就是噩梦。直接利用TPrinter也不失是一个方法,而且不管如何复杂,实际上你就把打印机当成屏幕来画就行了。不过最好设置一下坐标系(SetMapMode),否则遇到不同分辨率打印机就惨了。
      

  6.   

    你只要定好位,就可以拉。实际上也就是一个canvas,要画出来,需要精确定位。
    就象画图一样。只是比较复杂,繁琐而已。
      

  7.   

    应该是一个循环(画行)
    再画列
    在一个循环(行)填写数据
    用的是
    printer.canvas.moveto( , )
    printer.canvas.lineto( , )
    printer.textout( , , )
      

  8.   

    对了,不要用固定的象素点值(换打印机)
    回不正常,用ix;=getdevicecaps(.. )
    iy:=getdevicecaps(.. )
    x:=ix/10 OR X:=ix/20
    y:=iy/10 or y:=iy/20
    x,y 就是你定位时用的度量单位
    建议这么做
      

  9.   

    Creating a Quick Report layout at runtime to print DBGrid's contents First make a new form, name it as TGridReport and drop a TQuickRep on it. 
    Rename you QuickRep to GridRep. Then make a Preview that receives a DBGrid as parameter, just like this: procedure TGridReport.Preview(Grid: TDBGrid); 
    var 
      i, CurrentLeft, CurrentTop : integer; 
      BMark: TBook; 
    begin 
      GridRep.Dataset:=Grid.DataSource.DataSet;   if not GridRep.Bands.HasColumnHeader then 
        GridRep.Bands.HasColumnHeader:=true;   if not GridRep.Bands.HasDetail then 
        GridRep.Bands.HasDetail:=true;   GridRep.Bands.ColumnHeaderBand.Height:=Abs(Grid.TitleFont.Height) + 10; 
      GridRep.Bands.DetailBand.Height:=Abs(Grid.Font.Height) + 10; 
      CurrentLeft := 12; 
      CurrentTop := 6;   {Record where the user stopped in the DBGrid} 
      BMark:=Grid.DataSource.DataSet.GetBook; 
      {Don't let the grid flicker while the report is running} 
      Grid.DataSource.DataSet.DisableControls; 
      try 
        for i:=0 to Grid.FieldCount - 1 do 
        begin 
          if (CurrentLeft + Canvas.TextWidth(Grid.Columns[i].Title.Caption)) > 
            (GridRep.Bands.ColumnHeaderBand.Width) then 
          begin 
            CurrentLeft := 12; 
            CurrentTop := CurrentTop + Canvas.TextHeight('A') + 6; 
            GridRep.Bands.ColumnHeaderBand.Height := GridRep.Bands.ColumnHeaderBand.Height + 
              (Canvas.TextHeight('A') + 10); 
            GridRep.Bands.DetailBand.Height := GridRep.Bands.DetailBand.Height + 
              (Canvas.TextHeight('A') + 10); 
          end; 
          {Create Header with QRLabels} 
          with TQRLabel.Create(GridRep.Bands.ColumnHeaderBand) do 
          begin 
            Parent := GridRep.Bands.ColumnHeaderBand; 
            Color := GridRep.Bands.ColumnHeaderBand.Color; 
            Left := CurrentLeft; 
            Top := CurrentTop; 
            Caption:=Grid.Columns[i].Title.Caption; 
          end; 
          {Create Detail with QRDBText} 
          with TQRDbText.Create(GridRep.Bands.DetailBand) do 
          begin 
            Parent := GridRep.Bands.DetailBand; 
            Color := GridRep.Bands.DetailBand.Color; 
            Left := CurrentLeft; 
            Top := CurrentTop; 
            Alignment:=Grid.Columns[i].Alignment; 
            AutoSize:=false; 
            AutoStretch:=true; 
            Width:=Grid.Columns[i].Width; 
            Dataset:=GridRep.Dataset; 
            DataField:=Grid.Fields[i].FieldName; 
            CurrentLeft:=CurrentLeft + (Grid.Columns[i].Width) + 15; 
          end; 
        end;     lblPage.Left := bdTitle.Width - lblPage.Width - 10; 
        lblDate.Left := bdTitle.Width - lblDate.Width - 10;     {After all, call the QuickRep preview method} 
        GridRep.PreviewModal; {or Preview if you prefer}   finally 
        with Grid.DataSource.DataSet do 
        begin 
          GotoBook(BMark); 
          FreeBook(BMark); 
          EnableControls; 
        end; 
      end; 
    end;