我在窗体上放了一个button然后填写代码如下:
procedure TForm1.btn1Click(Sender: TObject);
begin
  MyPrinter := TPrinter.Create;
  MyPrinter.Canvas.Font.Size := 14;
  MyPrinter.BeginDoc;
  MyPrinter.Canvas.TextOut(100,200,'打印测试');
  MyPrinter.EndDoc;
end;
运行后,点击按钮,探出保存打印对话框(我笔记本上是office的虚拟打印机),输入文件名后点击保存就马上弹出内存错误的框。大家看该怎么办!

解决方案 »

  1.   

    首先初始化打印机
      Printer.GetPrinter(ADevice, ADriver, APort, DeviceHandle);
      DevMode := GlobalLock(DeviceHandle);
      with DevMode^ do
      begin
        dmFields:=dmFields or DM_PAPERWIDTH;
        dmPaperWidth:=trunc(SpinEdit5.Value*10);
        dmFields:=dmFields or DM_PAPERLENGTH;
        dmPaperlength:=trunc(SpinEdit6.Value*10);
        if RadioButton1.checked
        then begin
          dmFields:=dmFields or DM_ORIENTATION;
          dmOrientation:=DMORIENT_PORTRAIT;                
           PreviewFrm.PrintPreview1.Orientation := poPortrait;  
        end
        else begin
          dmFields:=dmFields or DM_ORIENTATION;
          dmOrientation:=DMORIENT_LANDSCAPE;          
           PreviewFrm.PrintPreview1.Orientation := poLandscape; 
        end;
      end;
      Printer.PrinterIndex :     开始打印页
      NewPage;
      BeginDoc;                                                         
      ......
      EndDoc;
      

  2.   

    我试了在窗体上再添加一个printerdialog 就不会出问题
      

  3.   

    直接 
    printer.begindoc;
    .
    .
    .
    printer.enddoc;