我使用mschart显示图形,然后用打印机打出来.使用程序如下:
MSChart1.chartType = VtChChartType2dLine
MSChart1.EditCopy
If Frame4.Visible = True Then
Printer.FontSize = 15
Printer.Print ""Printer.Print ""
Printer.Print ""Printer.Print Space(45) & frmData.Text1(2).Text & "号图"
Printer.Print ""
Printer.FontSize = 10
Printer.Print Space(40) & Label1.Caption & Label11.Caption & "       " & Label2.Caption & Label12.Caption & "       " & Label3.Caption & Label13.Caption
Printer.Print Space(40) & Label4.Caption & Label15.Caption & "  " & Label7.Caption & Label16.Caption & "  " & Label14.Caption & Label17.Caption
Printer.PaintPicture Clipboard.GetData(), 2250, 2000
Else
Printer.FontSize = 15
Printer.Print ""Printer.Print ""
Printer.Print ""
Printer.Print ""
Printer.Print ""
Printer.Print Space(45) & frmData.Text1(2).Text & "号图"
Printer.Print ""Printer.PaintPicture Clipboard.GetData(), 2250, 2000
Printer.EndDoc
End If
MSChart1.chartType = VtChChartType2dArea
以前用的是比较老的打印机,在98系统下,打印还勉强可以.最近几年,电脑更新速度快,很少用98了,硬件也更新了,
很多打印机都不支持98了.在新的环境条件下,发现这种方法速度很低,常常只是把打印文件加到打印对列中,但很长时间
没有反应,有时N分钟,有时N十分钟才能打出来.现在我仍不明白这种速度低,甚至死在队列传送后的原因.所以我想更换
另外的打印方法.
在网上看到于老师的关于用Datareport的方法来打印,我挺感兴趣,于老师的程序如下:
《巧用 VB6 之 Data Report 实现图片(Picture)、图表(MsChart)的打印及预览》 
    VB 6.0 专业版和企业版中的数据报表设计器 (Data Report Designer) 是用来实现打印数据库数据的有力工具。在通常状况下, DataReport 的数据源(DataSource)应该是由数据库(DataBase)的基本表(Table)、视图(View)或查询(Query)等生成的,更确切的说该数据源应是一个 ADODB.Recordset (二维表),而且 ADO 允许生成并打开任意无数据库实体的记录集。这样就可以为 DataReport 随便设置一个数据源,用其实现实现图片打印的预览。 
    首先,新建"标准 Exe"工程,再为工程添加 "Data Report" 。设置"工程属性"的启动对象为 "DataReport"。先使 DataReport "显示报表标头/注脚"(右鼠键快捷菜单),再绘制一个 RptImage 控件到"报表标头"区域。然后,就可以编写程序代码了: 
    Private DataReport_Initialize() 
    '创建并打开一个任意的记录集,并将其设置为 DataReport 的数据源 
    Dim adoRecordset As New ADODB.Recordset 
    adoRecordset.Fields.Append "X", adVariant 
    adoRecordset.Open 
    Set Me.DataSource = adoRecordset 
    Dim adoRecordset As New ADODB.Recordset 
    adoRecordset.Fields.Append "X", adVariant 
    adoRecordset.Open 
     
    Set Me.DataSource = adoRecordset 
     
    Const ErrorX = 400 '打印机横向误差 
    Const ErrorY = 400 '打印机纵向误差 
     
    Me.ReportWidth = Printer.Width - Me.LeftMargin - Me.RightMargin - ErrorX 
    Me.Sections.Item("Section1").Height = 0 
    Me.Sections.Item("Section3").Height = 0 
  Me.Sections.Item("Section2").Controls.Item("Image1").PictureAlignment = rptPACenter 
    Me.Sections.Item("Section2").Controls.Item("Image1").SizeMode = rptSizeClip 
    Me.Sections.Item("Section2").Controls.Item("Image1").Left = 0 
    Me.Sections.Item("Section2").Controls.Item("Image1").Top = 0 
     
    Me.Sections.Item("Section2").Height = Printer.Height - Me.TopMargin - Me.BottomMargin - ErrorY 
    Me.Sections.Item("Section2").Controls.Item("Image1").Width = Me.ReportWidth 
    Me.Sections.Item("Section2").Controls.Item("Image1").Height = Me.Sections.Item("Section2").Height 
     
    Dim x As Picture 
    Select Case i 
     Case 1 '打印 MsChart。MsChart 本身并没有提供 Print 或 PaintPicture 方法 
     FormX.MSChartX.EditCopy 'MsChart 可绘制在某窗体 FormX 上 
     Set x = Clipboard.GetData() 
     Case 2 '打印图片文件(Image、Picture) 
     Set x = LoadPicture("..\..\xxx.bmp") '图片文件(*.jpg ...)路径 
    End Select 
    Set Me.Sections.Item("Section2").Controls.Item("Image1").Picture = x 
    End Sub 按照于老师的程序例子,我做了实验,引用中加入了ADO,但是这段程序不能用,有几个问题,一是按照他的说法,这段初始化的程序是应该放到FORM的程序段里,还是加的Datareport的程序段里.另外开头的重复定义和设置是失误还是别有用意.还有就是我在调试中发现,系统一直提示无效外部过程,不知为什么.希望对打印比较精通的老师对我的打印慢的问题给以解释和解决办法,如果不能解决,用第二段程序,对其中的几个问题帮给以解释.或者有更好的办法.我想试下水晶报表,是不是比于老师的第二个办法更好.急等,谢谢各位老师们!

解决方案 »

  1.   

    '如何用printer设置打印方向为横向打印  
    ---------------------------------------------------------------  
     
    Printer.Orientation=VbPRORPortrait'纵向打印  
    Printer.Orientation=VbPRORLandscape'横向打印  
     
    ---------------------------------------------------------------  
     
    Printer.Orientation  =  VbPRORLandscape  
    ---------------------------------------------------------------  
     
    Printer.Orientation  =  2
      

  2.   

    我用方法1进行打印的时候,MSCHART复制到粘贴板,如果按
    Printer.PaintPicture Clipboard.GetData(), 2250, 2000 
    打印,图会明显向右下偏,如果改成
    Printer.PaintPicture Clipboard.GetData(), 500, 1500
    则正好.
    但右边和下边会有明显的很粗的线,如果消除.谢谢.
      

  3.   

    Printer.Orientation  =  VbPRORLandscape  
    ---------------------------------------------------------------  Printer.Orientation  =  2 
    这两句是什么意思
      

  4.   

     工作遇到:同一张纸(例如:A4)打印多个MSCHART 方法;        SChart_fire_c1.EditCopy        Printer.PaintPicture Clipboard.GetData(), -300, 0       'Printer.EndDoc
           
           
           
           SChart_fire_c2.EditCopy       Printer.PaintPicture Clipboard.GetData(), -300, 11520 / 2      ' Printer.EndDoc
           
           
           SChart_fire_c3.EditCopy
           Printer.PaintPicture Clipboard.GetData(), -300, 11520       Printer.EndDoc
      

  5.   

      vb6.0 打印多个Mschart在同一张打印纸上  方法