Uses Printers
procedure TForm1.SpeedButton1Click(Sender: TObject);
var 
ScaleX,ScaleY :Integer; 
R :TRect;
begin
if Printer.Printers.Count=0 then
 begin
  ShowMessage('打印机未安装,请先安装打印机!');
  exit;
 end;
 if not PrintDialog1.Execute then Exit
  else begin
   with Printer do
    begin
      BeginDoc;
      ScaleX:=GetDeviceCaps(Handle,LogPixelsX) div PixelsPerInch; 
      ScaleX:=GetDeviceCaps(Handle,LogPixelsY) div PixelsPerInch;
      R:=Rect(0,0,Image1.Width*ScaleY,Image1.Height*ScaleY);
      //OffSetRect(R,margin*ScaleX,Margin*ScaleY);
      Canvas.StretchDraw(R,Image1.Picture.Graphic);
      EndDoc;
    end;
  end;end;

解决方案 »

  1.   

    使用Printers单元的话,要获得打印机的分辨率必须将Printer.BeginDoc,而Printer.Abort会使程序也Abort。使用QPrinters单元则直接可用Printer.xdpi、Printer.ydpi获取打印机的分辨率和纸张尺寸Pagewidth、PageHeight,不必Printer.BegonDoc。
    我想在屏幕上预览输出的图形,必须先邀获得打印机的有关信息,如分辨率和纸张尺寸等,输出的图形必须按照指定的比例输出,同时我又想使用同一个函数在画布(作为绘图的参数之一)上绘图,我怎么实现呢?
    请各位指教!