//from csdn to csdn 
打印StringGrid:
procedure PrintGrid(sGrid: TStringGrid; sTitle: String);
var
 X1, X2 : Integer;
 Y1, Y2 : Integer;
 TmpI   : Integer;
 F      : Integer;
 TR     : TRect;
begin
 Printer.Title:=sTitle;
 Printer.BeginDoc;
 Printer.Canvas.Pen.Color:=0;
 Printer.Canvas.Font.Name:='Times New Roman';
 Printer.Canvas.Font.Size:=12;
 Printer.Canvas.Font.Style:=[fsBold, fsUnderline];
 Printer.Canvas.TextOut(0, 100, Printer.Title);
 For F:=1 to sGrid.ColCount-1 do begin
   X1:=0;
   For TmpI:=1 to (F-1) do
     X1:=X1+5*(sGrid.ColWidths[TmpI]);
   Y1:=300;
   X2:=0;
   For TmpI:=1 to F do
     X2:=X2+5*(sGrid.ColWidths[TmpI]);
   Y2:=450;
   TR:=Rect(X1, Y1, X2-30, Y2);
   Printer.Canvas.Font.Style:=[fsBold];
   Printer.Canvas.Font.Size:=7;
   Printer.Canvas.TextRect(TR, X1+50, 350, sGrid.Cells[F, 0]);
   Printer.Canvas.Font.Style:=[];
   For TmpI:=1 to sGrid.RowCount-1 do begin
     Y1:=150*TmpI+300;
     Y2:=150*(TmpI+1)+300;
     TR:=Rect(X1, Y1, X2-30, Y2);
     Printer.Canvas.TextRect(TR, X1+50, Y1+50, sGrid.Cells[F, TmpI]);
   end;
 end;
 Printer.EndDoc;
end;

解决方案 »

  1.   

    procedure Tfrmfhd.QuickRep1NeedData(Sender: TObject;
      var MoreData: Boolean);
    begin
      Moredata := True;
      with frmfhd do
      begin
        if i>StringGrid1.RowCount then
        begin
          MoreData := False;
          exit;
        end;
        if MoreData then
        begin
          QRLabel1.Caption := StringGrid1.Cells[1,i];
          QRLabel2.Caption := StringGrid1.Cells[2,i];
          QRLabel3.Caption := StringGrid1.Cells[3,i];
          qrlabel4.Caption :=stringgrid1.Cells[4,i];
          qrlabel5.Caption :=stringgrid1.Cells[5,i];
          qrlabel6.Caption :=stringgrid1.Cells[6,i];
          qrlabel7.Caption :=stringgrid1.Cells[7,i];              
        end;
        i:=i+1;
      end;
    end;