我使用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的程序段里.另外开头的重复定义和设置是失误还是别有用意.还有就是我在调试中发现,系统一直提示无效外部过程,不知为什么.希望对打印比较精通的老师对我的打印慢的问题给以解释和解决办法,如果不能解决,用第二段程序,对其中的几个问题帮给以解释.或者有更好的办法.我想试下水晶报表,是不是比于老师的第二个办法更好.急等,谢谢各位老师们!
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的程序段里.另外开头的重复定义和设置是失误还是别有用意.还有就是我在调试中发现,系统一直提示无效外部过程,不知为什么.希望对打印比较精通的老师对我的打印慢的问题给以解释和解决办法,如果不能解决,用第二段程序,对其中的几个问题帮给以解释.或者有更好的办法.我想试下水晶报表,是不是比于老师的第二个办法更好.急等,谢谢各位老师们!
解决方案 »
- [高难度]请教 VB 窗口截图问题。 用getdc,getwindowdc 来截QQ斗地主的屏幕
- vb中的Select Case 语句是不是只能一条
- 实时错误“20477”,文件名无效
- 怎样才能知道现在的有多少个进程?然后再取得它的标题和类?
- 特急!高分求vb4英文版或中文版皆可
- 菜鸟问题,大家来帮帮忙拉
- 请问这是什么问题呀!!急,在线等候!!!各位仁兄慈姐亲弟好妹up一把!!
- 初学者小问题,请问datagrid控件是在哪里啊,我怎么找不到
- 本人英语不太好!而学VB时又得看帮助系统(CSDN)!哪里有没有中文版的CSDN呀分
- 岂有此理,中国足球!
- CNDS]一个打机人必备的一些素质和C210SP的使用经验
- 内网realplay 用udp协议,无法打开公网视频流服器rtsp直播路径
---------------------------------------------------------------
Printer.Orientation=VbPRORPortrait'纵向打印
Printer.Orientation=VbPRORLandscape'横向打印
---------------------------------------------------------------
Printer.Orientation = VbPRORLandscape
---------------------------------------------------------------
Printer.Orientation = 2
Printer.PaintPicture Clipboard.GetData(), 2250, 2000
打印,图会明显向右下偏,如果改成
Printer.PaintPicture Clipboard.GetData(), 500, 1500
则正好.
但右边和下边会有明显的很粗的线,如果消除.谢谢.
--------------------------------------------------------------- Printer.Orientation = 2
这两句是什么意思
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