Mel,
The way I have been adjusting the margins on my reports that must overlay on pre-printed forms is to pull the Report FRX table into a READWRITE cursor and then update the VPOS and HPOS of all REPORT OBJECTS by a USER DEFINED X and Y Offset on the fly and then run the report using the READWRITE Temporary CURSOR. For example:
REPLACE ALL VPOS WITH VPOS + YOFFSET, HPOS WITH HPOS + XOFFSET FOR OBJTYPE = N.
This effectively will shift every object on the page on the fly to a new position. It works very well.
Additionally, I strip the EXPR, TAG and TAG2 fields on the fly as well so I don't have to worry about changing them before I BUILD EXE and also I have reports that users can modify out in the field as well. I do use my own Class Library to perform all this stuff on the fly. But it was written once and used over and over.
You could even keep a table or an INI file for different X and Y Offsets for different reports if needed.