var
  mf : TMetafile;
  mc: TMetafileCanvas;
  mf   :=   TMetafile.Create;
  mf.Width   :=  1024;
  mf.Height   :=  800;
  mc :=TMetafileCanvas.Create(mf,   0);  //画图
  //……  img1.Canvas.Draw(0,0,mf);
以上可以将图元文件显示到img1 上,而bitblt、StretchBlt都不行。请问如何显示mf的某个区域

解决方案 »

  1.   

    我现在图元文件上画,然后自己在image里做预览,并提供图元文件的打印。这些都没问题。
    问题是: 由于一屏幕显示不了,我想讲图元文件分成两个部分,请问如何截取图元?
      

  2.   

      img1.Canvas.Draw(0,0,mf);怎么将mf 分成3个部分显示
      

  3.   

    img1.Canvas.CopyRect();爱分几个部分就几个。
      

  4.   


    楼上的意思先讲mf 绘制到img1上  然后再分块显示?
      

  5.   


    好吧,谢谢你,那么请问你如何打印
      try
        if dlgPntSet1.Execute then
        begin
          //Printer.Orientation := poLandscape;
          Printer.BeginDoc;
          Printer.NewPage;
          Printer.Canvas.StretchDraw(Rect(0,   0,   Printer.PageWidth,   Printer.PageHeight),   mf);
          Printer.EndDoc;
        end;
      except
        Application.MessageBox('打印异常',MB_OK )
      end;    // mf的宽度是满A4纸打印的 3倍
      metafile_dpix   :=   GetDeviceCaps(Self.Canvas.Handle,   LOGPIXELSX);         /
      printer_dpix   :=   GetDeviceCaps(Printer.Handle,   LOGPIXELSX);
      metafile_dpiy   :=   GetDeviceCaps(Self.Canvas.Handle,   LOGPIXELSY);
      printer_dpiy   :=   GetDeviceCaps(Printer.Handle,   LOGPIXELSY);
      W := Round( (Printer.PageWidth   *   metafile_dpix)   /   printer_dpix ) * 3
      H := Round( (Printer.PageHeight   *   metafile_dpiy)   /   printer_dpiy ) ;
    那怎么对图元文件分页打印,谢谢你了。 
      
      

  6.   

    而且img1.Canvas.CopyRect 不能对拷贝图元的对吧?
      

  7.   

    图元中存放的是 绘图命令,
    应该不可以分块,除非你先把图元绘制到image上  再分块