Printing probelms - Help!

I run into a host of printing problems!

1. How to Print TStringGrids. I have tried CopyRect:
 Printer.Canvas.CopyRect(PrinterRect,MytringGrid.Canvas,MystringGridRect);
 It does not seem to work. Am I doing something silly!
 I also copied StringGridRect from Form.Canvas and it does print but only what
is visible on the screen. Is it the limitation of the function CopyRect?

2. Now I am tediously drawing every cell on the Printer.Canvas. Well, it kind
of works, but ->

. How to come up with good scaling value? The Cell sizes on screen do not
correspond with the Printer size. Presently I am doubling everything (grid
size height, width, cell width, left,top, etc.) and seem to get something out.

. I'm doing a lot of work for Grids that are longer or wider than PageHeight,
or PageWidth. Also with Cells that do not fit on one page, i.e., Cell.Left is
on Page n while its Cells.Right is on Page n +1. Is there any easy way out?

3. ChartFx printing if graph is larger than one page or does not fit into the
same page.    

4. Is there anything like PrintPreview that can be called from within the
program?