Witajcie. Koniecznie chcę zrobić w Delphi7 drukowanie StringGrida za pomocą komponentu PrinterSetupDialog1. Niby już kod poniżej działa, większość ustawień drukarki funkcjonuje prawidłowo (co prawda nie drukuje jeszcze "Kratek" tabeli StringGrida i mam problem z funkcją dopasowania wielkości do strony), ale co ważniejsze nie mogę dojść dlaczego nie drukuje mi się pierwsza kolumna StringGrid (z lewej strony). Może ktoś dopatrzy się gdzie jest błąd bo ja trzeci dzień nad tym siedzę i nie mogę dojść... Pozdrawiam.
kod:
Procedure TForm1.Drukuj1Click(Sender: TObject);
Var
X1, X2, Y1, Y2: Integer;
XRes, YRes : Integer;
I, F: Integer;
TR: TRect;
Begin
If PrinterSetupDialog1.Execute then
begin
Printer.Title := 'Wydruk';
Printer.BeginDoc;
Printer.Canvas.Pen.Color := 0;
Printer.Canvas.Font.Name := 'ArialCE';
Printer.Canvas.Font.Size := 10;
Printer.Canvas.Font.Style := [fsBold, fsUnderline];
Printer.Canvas.TextOut(150, 250,'Wydruk');
for F := 0 to StringGrid1.ColCount - 1 do
begin
X1 := 0;
for I := 1 to (F - 1) do
X1 := X1 + 5 * (StringGrid1.ColWidths[I]);
Y1 := 300;
X2 := 0;
for I := 1 to F do
X2 := X2 + 5 * (StringGrid1.ColWidths[I]);
Y2 := 450;
TR := Rect(X1, Y1, X2 - 30, Y2);
Printer.Canvas.Font.Assign(StringGrid1.Font);
Printer.Canvas.TextRect(TR, tr.right, 350, StringGrid1.Cells[F, 0]);
for I := 1 to StringGrid1.RowCount - 1 do
begin
Y1 := 150 * I + 300;
Y2 := 150 * (I + 1) + 300;
TR := Rect(X1, Y1, X2 - 30, Y2);
SetTextAlign(Printer.Canvas.Handle, TA_RIGHT);
Printer.Canvas.TextRect(TR, tr.Right-2, tr.Top+2, StringGrid1.Cells[F, I]);
end;
XRes := GetDeviceCaps(Printer.Canvas.Handle, HORZRES);
YRes := GetDeviceCaps(Printer.Canvas.Handle, VERTRES);
end;
Printer.EndDoc;
end;
End;