Czy ktoś ma pomysł co tu nie gra

procedure TForm1.Button3Click(Sender: TObject);
var
  i: Integer;
  s: string;
  LeftMargin      :Integer;
  TopMargin       :integer;
  RecH            :integer;
  RecW            :integer;
  Xpoz, Ypoz      :Integer;
begin
  DBGrid1.Columns[2].Visible:=False;
  Printer.Canvas.Font:=DBGrid1.Font;
  Printer.Canvas.Pen.Width:=3;
  Printer.BeginDoc;
  Canvas.Brush.Style := bsClear;
// tu wpisuje stopkę strony
  Printer.Canvas.TextOut(200,Printer.PageHeight-150,'  '+ DateToStr(Date)+'         '+TimeToStr(GetTime)
  +'                                                      Strona 1');

  LeftMargin :=150;
  TopMargin:=150;
  Ypoz:=TopMargin+50;
  Printer.Canvas.Pen.Width:=5;
  with Printer do
    begin
   //  powinno wypisać nagłówki
        for i := 0 to DBGrid1.FieldCount-1 do
            begin  //wiersze
              RecW:=Trunc(DBGrid1.Columns[i].Width*(2.5))+80;
              RecH:=90;
              if DBGrid1.Columns[i].Visible=True then
                begin                
                  Canvas.TextOut(Xpoz, Ypoz, DBGrid1.Fields[i].DisplayLabel); //Wypisuję nazwę kolumny
                  Xpoz:=Xpoz+RecW;  //zmieniam poziome położenie kursora
                end;
            end;
          Ypoz:=Ypoz+RecH; //Zmieniam pionowe położenie kursora
  Printer.Canvas.Pen.Width:=3;

//Tutaj wypisuję dane
      Table1.First;
      while not Table1.Eof do
        begin
          Xpoz:=Leftmargin+50;
          for i := 0 to DBGrid1.FieldCount-1 do
            begin  //wiersze
              RecW:=Trunc(DBGrid1.Columns[i].Width*(2.5))+80;
              RecH:=90;
              if DBGrid1.Columns[i].Visible=True then
                begin
                  if DBGrid1.Fields[i].Value<>null then
                    Canvas.TextOut(Xpoz, Ypoz, DBGrid1.Fields[i].Value); //Wypisuję zawartość komórki
                  Xpoz:=Xpoz+RecW;  //zmieniam poziome położenie kursora
                end;
            end;
          Ypoz:=Ypoz+RecH; //Zmieniam pionowe położenie kursora
          Table1.Next
        end;
    end;
  Printer.enddoc;
end;

powyższa procedura ma za zadanie wypisać na Canvasie drukarki najpierw nagłówki z DBGrid, następnie wypisać dane z tabeli, o ile z danymi nie ma problemu, to najzwyklej w świecie nie drukuje nagłówków.
Czy ktoś ma jakies sugestie jak sie do tego dobrać.
Aha Rave Report i Quick Report, czy też Free Report odpada, ale to opisałem na innym forum.