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.