你很走运,有97年写的代码一定可行
http://www.chinaprogrammer.com/softshow/program/index.asp(5。0报表)有我写的控件中就有以下代码,不过你自己得优化一下
Procedure TFrmprint.prisetup(Var Msg : TMessage);
VAR BOOL_1:BOOLEAN;
    devmode1:pdevmode;
begin
  // exit;
//showmessage(inttostr(mrsource.dataset.recno));
  if panel4.visible=true then
  begin
    exit;
  end;
  //1.22
    hdevmode1:=copydata(hdevmode);
    hdevnames1:=copydata(hdevnames);   setprinter(hdevmode1,hdevnames1);
  //1.22if frmprint<>nil then
if frmprint.pri1.execute then
 begin
  //1.22
    GetPrinter(DevHandle, hDevNames);
    hdevmode:=copydata(devhandle);
  //1.22 BOOL_1:=TRUE ;//pri1.execute;
 IF BOOL_1 THEN
  BEGIN
    frmprint.report.Page.Orientation:=printer.Orientation;
{
     if frmprint.report.Page.Orientation=poPortrait then
      begin
      if (printer.pagewidth>100)and(printer.pagewidth<170) then
         frmprint.report.Page.papersize:=A5
      else
         begin
                if (printer.pagewidth>250) then
                      frmprint.report.Page.papersize:=A3
                else
                      frmprint.report.Page.papersize:=A4;        end; //a5
    end  //height
    else   //横向
    begin
      if (printer.pageheight>100)and(printer.pageheight<170) then
         frmprint.report.Page.papersize:=A5
      else
         begin
                if (printer.pageheight>250) then
                      frmprint.report.Page.papersize:=A3
                else
                      frmprint.report.Page.papersize:=A4;        end; //a5    end;   //横向
    }
    devmode1:=pdevmode(globallock(hdevmode));    if devmode1^.dmpapersize=dmpaper_a3 then
       frmprint.report.Page.papersize:=A3;
    if devmode1^.dmpapersize=dmpaper_a4 then
       frmprint.report.Page.papersize:=A4;
    if devmode1^.dmpapersize=dmpaper_a5 then
       frmprint.report.Page.papersize:=A5;
    if devmode1^.dmpapersize=DMPAPER_LETTER then
       frmprint.report.Page.papersize:=LETTER;
    if devmode1^.dmpapersize=DMPAPER_LETTERSMALL then
       frmprint.report.Page.papersize:=LETTERSMALL;
    if pricount>1 then
    prinumber:=0
    else
    prinumber:=1;    progressbar1.position:=0;
   LblPageNumber.Caption := IntToStr(1);
QRPreview.PageNumber:=1;
    timer1.enabled:=true;
    panel4.visible:=true;
    report.preview;
  END; //bool_1
 end;  //execute
end;