请高手帮忙将下面bcb程序翻译成delphi的,这是一个有关打印设置的程序
DEVMODE *pDev;
            LPPAGESETUPDLG mylp=new PAGESETUPDLG;
            memset((void *)mylp,0,sizeof(PAGESETUPDLG));
            mylp->lStructSize=sizeof(PAGESETUPDLG);
            mylp->hwndOwner=this->Handle;
            mylp->Flags=PSD_RETURNDEFAULT;
            PageSetupDlg(mylp);
            if (mylp->hDevMode!=NULL)
            {
                pDev=(DEVMODE *)GlobalLock(mylp->hDevMode);
                pDev->dmPaperSize=OldPaperSize;
                pDev->dmOrientation=OldOrientation;
                mylp->rtMargin.left=OldLeft;
                mylp->rtMargin.right=OldRight;
                mylp->rtMargin.top=OldTop;
                mylp->rtMargin.bottom=OldBottom;
                GlobalUnlock(mylp->hDevMode);
                mylp->Flags=PSD_MARGINS|PSD_INHUNDREDTHSOFMILLIMETERS;
                if(PageSetupDlg(mylp))
                {
                    pDev=(DEVMODE *)GlobalLock(mylp->hDevMode);
                    OldPaperSize =pDev->dmPaperSize;
                    if(OldPaperSize>28)OldPaperSize=9;//A4
                    OldOrientation=pDev->dmOrientation;
                    OldLeft =mylp->rtMargin.left;
                    OldRight =mylp->rtMargin.right;
                    OldTop =mylp->rtMargin.top;
                    OldBottom =mylp->rtMargin.bottom;
                    gFrmpt->QuickRep1->Page->Orientation=OldOrientation-1;
                    gFrmpt->QuickRep1->Page->PaperSize=OldPaperSize;
                    gFrmpt->QuickRep1->Page->LeftMargin=OldLeft/100;
                    gFrmpt->QuickRep1->Page->RightMargin=OldRight/100;
                    gFrmpt->QuickRep1->Page->TopMargin=OldTop/100;
                    gFrmpt->QuickRep1->Page->BottomMargin=OldBottom/100;
                    GlobalUnlock(mylp->hDevMode);
                }
                GlobalFree(mylp->hDevMode);
            }
            delete mylp;
            QRPreview1->PageNumber=1;
            gFrmpt->QuickRep1->Prepare();
            gFrmpt->QuickRep1->Preview();

解决方案 »

  1.   

    修改了一下,但是把QRPreview1和gFrmpt 去掉了。procedure TForm1.Button1Click(Sender: TObject);
    var
      pDev : DEVMODE;
      mylp : TPageSetupDlg;
      OldPaperSize, OldOrientation, OldLeft, OldRight, OldBottom, OldTop : SHORT;
    begin
      FillChar(mylp, SizeOf(mylp), 0);
      mylp.lStructSize := SizeOf(TPageSetupDlg);
      //mylp.hInstance := System.HInstance;  //mylp.Flags := PSD_MARGINS;  mylp.hwndOwner:=self.Handle;
      mylp.Flags:=PSD_RETURNDEFAULT;
      PageSetupDlg(mylp);
      if (mylp.hDevMode <> NULL) then
      begin
          //pDev:=GlobalLock(mylp.hDevMode);
          pDev.dmPaperSize:=9;
          pDev.dmOrientation:=0;
          mylp.rtMargin.left:=Left;
          mylp.rtMargin.right:=90;
          mylp.rtMargin.top:=0;
          mylp.rtMargin.bottom:=200;
          GlobalUnlock(mylp.hDevMode);
          mylp.Flags:=PSD_MARGINS or PSD_INHUNDREDTHSOFMILLIMETERS;
          if(PageSetupDlg(mylp)) then
          begin
              //pDev:=(DEVMODE *)GlobalLock(mylp.hDevMode);
              OldPaperSize :=pDev.dmPaperSize;
              if(OldPaperSize>28) then
                  OldPaperSize:=9;//A4
              OldOrientation:=pDev.dmOrientation;
              OldLeft :=mylp.rtMargin.left;
              OldRight :=mylp.rtMargin.right;
              OldTop :=mylp.rtMargin.top;
              OldBottom :=mylp.rtMargin.bottom;
              {gFrmpt.QuickRep1.Page.Orientation:=OldOrientation-1;
              gFrmpt.QuickRep1.Page.PaperSize:=OldPaperSize;
              gFrmpt.QuickRep1.Page.LeftMargin:=OldLeft/100;
              gFrmpt.QuickRep1.Page.RightMargin:=OldRight/100;
              gFrmpt.QuickRep1.Page.TopMargin:=OldTop/100;
              gFrmpt.QuickRep1.Page.BottomMargin:=OldBottom/100;
              GlobalUnlock(mylp.hDevMode);  }
          end;
          GlobalFree(mylp.hDevMode);
      end;
      //delete mylp;
      //QRPreview1.PageNumber:=1;
      //gFrmpt.QuickRep1.Prepare();
      //gFrmpt.QuickRep1.Preview(); }
      

  2.   

    编译时说Undeclared identifier: 'TPageSetupDlg'
    请问怎么解决
      

  3.   

    var
      ADevice,ADriver,Aport:array[0..255] of char;
      DeviceHandle:THandle;
      DevMode:PDeviceMode;
      Printer:TPrinter;
    begin
    Printer.PrinterIndex:=Printer.PrinterIndex;
    Printer.GetPrinter(ADevice,ADriver,Aport,DeviceHandle);
    也是出错,请问怎么回事啊
    再现等待