PrintForm怎样才能打印满一页

xiangfly 2006-11-07 07:01:50
我用PrintForm打印,可以没有打印满一页,应该怎么样写代码才能做到, 我的窗口已经最大化了.
这个命令直接打印,我想设置打印多页,怎样才能出现设置对话框,
还有,有的要横着打,有的要坚着打,怎么样用代码实现,而不用在打印设置里改,

谢谢
...全文
483 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
mustudent 2006-11-09
  • 打赏
  • 举报
回复
帮你顶一下 我也不明白什么原因
xiangfly 2006-11-09
  • 打赏
  • 举报
回复
顶一下
xiangfly 2006-11-08
  • 打赏
  • 举报
回复
还有一点补充,在点过Command2后,并不能打印,等多久也不行,必须结束程序后才能打印,这是为什么呀,打印别的不会是这样,
xiangfly 2006-11-08
  • 打赏
  • 举报
回复
Private Sub Command2_Click()
P1.Line (0, 0)-(10000, 10000)

Call SaveINPicture(P1, P2, "uu")
Printer.PaintPicture P2, 0, 0, 11000, 30000, 10, 10, 11000, 30000
End Sub
这是我写的程序,在P1中还有几个Command,Line控件,又用程序画了一条线,可是打印的时候只能打出Line控件,别不的不能打出来,这是为什么呀,
还有我设置宽和高已经够大的了,为什么还是只能打印A4的一半大?

谢谢
mustudent 2006-11-08
  • 打赏
  • 举报
回复
CALL SaveINPicture(要複製的圖片名稱,目標圖片名稱,第三個參數好像沒有什麽用 隨便寫個字符串吧)
xiangfly 2006-11-08
  • 打赏
  • 举报
回复
To:mustudent(小生--蚕豆<恒久忍耐>)
Sub SaveINPicture(ByRef oPic As PictureBox, ByRef oPic2 As PictureBox, ByVal strPicFile As String)
调用上面这个函数,怎么样传入参数,(就是call SaveINPicture()的后面的参数怎样写)我是新手,这个以前还没有用过,能给指点一下吗?

谢谢
mustudent 2006-11-07
  • 打赏
  • 举报
回复
改成printer.PaintPicture picture.picture, 0, 0, 1000, 1000, 10, 10, 1000, 1000
看看 我也沒有用過printer
注意多了一個.picture
xiangfly 2006-11-07
  • 打赏
  • 举报
回复
我在用printer.PaintPicture picture, 0, 0, 1000, 1000, 10, 10, 1000, 1000打印时,却提示出错"不正确的图片"
现在还有上面这个问题没有解决,

"在用DataReport打印是只能打一张纸的三分之二",在DataReport的BottomMargin设置到页底的距离就行了
xiangfly 2006-11-07
  • 打赏
  • 举报
回复
有没有知道出什么错了
xiangfly 2006-11-07
  • 打赏
  • 举报
回复
我看了,是A4的
哎,真是很郁闷,也不知道那错了
为什么会这样
mustudent 2006-11-07
  • 打赏
  • 举报
回复
在設置 打印機 然後選中你正在使用的打印機 屬性 在那裏設置一下紙張的大小
xiangfly 2006-11-07
  • 打赏
  • 举报
回复
picture是我的控件名稱,Form已经最大化,
DataReport打印时候,我选的是A4的呀,
mustudent 2006-11-07
  • 打赏
  • 举报
回复
printer.PaintPicture picture, 0, 0, 1000, 1000, 10, 10, 1000, 1000
//picture是不是你的控件名稱

另外,我在用DataReport打印是只能打一张纸的三分之二,怎么样才能打满
//你看看你的打印設置 現在是什麽紙張類型 是不是不是A4紙 如果不是那麽窗口不能打印正張紙也可能是這個原因
cangwu_lee 2006-11-07
  • 打赏
  • 举报
回复
Form 的宽度、高度足够,就可以打印满一页了。

xiangfly 2006-11-07
  • 打赏
  • 举报
回复
谢谢呀,
不过我在用printer.PaintPicture picture, 0, 0, 1000, 1000, 10, 10, 1000, 1000打印时,却提示出错"不正确的图片"
并且打印机也打印,不过是空白的


另外,我在用DataReport打印是只能打一张纸的三分之二,怎么样才能打满
mustudent 2006-11-07
  • 打赏
  • 举报
回复
用picturebox打印吧 用picturebox作容器 把窗口上的控件全部拷贝到picturebox中去
看看下面的内容:
注:从MSDN上 Ctrl + c 来的


PaintPicture 方法


用以在 Form, PictureBox 或 Printer 上绘制图形文件(.bmp、.wmf、.emf、.cur、.ico或 .dib)的内容。不支持命名参数。

语法

object.PaintPicture picture, x1, y1, width1, height1, x2, y2, width2, height2, opcode

PaintPicture 方法的语法包含下列部分:

部分 描述
object 可选的。一个对象表达式,其值为“应用于”列表中的一个对象。如果省略 object,带有焦点的 Form 对象缺省为 object。
Picture 必需的。要绘制到 object 上的图形源。Form 或 PictureBox 必须是 Picture 属性。
x1, y1 必需的。均为单精度值,指定在 object 上绘制 picture 的目标坐标(x-轴和y-轴)。object 的 ScaleMode 属性决定使用的度量单位。
Width1 可选的。单精度值,指示 picture 的目标宽度。object 的 ScaleMode 属性决定使用的度量单位。如果目标宽度比源宽度 (width2) 大或小,将适当地拉伸或压缩 picture。如果该参数省略,则使用源宽度。
Height1 可选的。 单精度值,指示 picture 的目标高度。object 的 ScaleMode 属性决定使用的度量单位。如果目标高度比源高度 (height2) 大或小,将适当地拉伸或压缩 picture。如果该参数省略,则使用源高度。
x2, y2 可选的。均为单精度值,指示 picture 内剪贴区的坐标(x-轴和y-轴)。object 的 ScaleMode 属性决定使用的度量单位。如果该参数省略,则缺省为 0。
Width2 可选的。单精度值,指示 picture 内剪贴区的源宽度。object 的 ScaleMode 属性决定使用的度量单位。如果该参数省略,则使用整个源宽度。
Height2 可选的。 单精度值,指示 picture 内剪贴区的源高度。object 的 ScaleMode 属性决定使用的度量单位。如果该参数省略,则使用整个源高度。
Opcode 可选的。是长型值或仅由位图使用的代码。它用来定义在将 pictur 绘制到 object 上时对 picture 执行的位操作(例如, vbMergeCopy 或 vbSrcAnd 操作符)。关于位操作符常数的完整列表,请参阅 Visual Basic Help 文件中的 RasterOp Constants 主题。
在使用opcode时有一些限制。例如,如果资源是图标或图元文件,则只能使用 vbSrcCopy,而不能使用其他的opcode;并且,与图案 (或 SDK 术语中的"画笔"),如 MERGECOPY、 PATCOPY、 PATPAINT 和 PATINVERT,相交互的opcode实际上是同目标的 FillStyle 属性交互。

注意 Opcode 用于将按位操作传递到位图。当传递其他图象类型时将一个值给该参数会造成“无效过程调用或参数”错误。这是设计的原因。要避免这个错误,对于除位图外的图象,将 Opcode 参数置为空。



说明

通过使用负的目标高度值 (height1) 和 / 或目标宽度值 (width1) ,可以水平或垂直翻转位图。

可以省略任何多个可选的尾部的参数 。如果省略了一个或多个可选尾部参数,则不能在指定的最后一个参数后面使用逗号。如果想指定某个可选参数,则必须先指定语法中出现在该参数前面的全部参数。

注意,在将一个.Bmp加载入 PictureBox 控件和使用 Windows API 函数 BitBlt() 添加图片之间有一点不同。当您对一个图象使用 BitBlt() 时,PictureBox 控件不知道象您使用 LoadPicture方法那样去调整大小。将 ScaleWidth 和 ScaleHeight 属性设置为图象的大小也不起作用。如果您想在使用 BitBlt 之后用 PictureBox 调整新图片的大小,必须用代码手工做,转换单位并处理边框,下面是如何这样做的一个简单示例:

Sub ResizePictureBoxToImage(pic as PictureBox, twipWd _
as Integer, twipHt as Integer)
' 该代码假设所有的单位都为缇。如果
' 不是,必须在调用该例程之前,转换为缇。
' 这里也假设图象显示在0,0处。
Dim BorderHt as Integer, BorderWd as Integer
BorderWd = Pic.Width - Pic.ScaleWidth
BorderHt = Pic.Height - Pic.ScaleHeight
pic.Move pic.Left, pic.Top, twipWd + BorderWd, _
twipHt + BorderHt
End Sub

Visual Basic的Printer对象支持PaintPicture方法,可以支持打印位图。其语法为:
Printer.PaintPicture picture, x1, y1, width1, height1, x2, y2, width2, height2, opcode
参数Picture是必需的,指明要绘制到打印机上的图形的来源源,通常是对象的Picture或Image属性。
参数x1, y1也是必需的,均为单精度数值,指定参数picture所确定图形在打印机上绘制的坐标(x-轴和y-轴)。其值的单位是由Printer的 ScaleMode 属性决定的。
参数Width1和Height1是可选的,都是单精度数值,指示图象的目标宽度和高度。如果目标宽度/高度比源宽度 (width2)/高度(height2)大或者小,将适当地拉伸或压缩图形。如果省略这两个参数,则使用图形的原始尺寸。
参数x2, y2、Width2和Height2是可选的。它们指示参数picture确定的图象内剪贴区的坐标(x-轴和y-轴)和大小。利用这四个参数,我们可以打印图象的一部分。默认是打印整个图象。
参数Opcode是可选的,是长型数值。它用来定义在将图象绘制到打印机上时对图象执行的位操作(例如, vbMergeCopy 或 vbSrcAnd 操作符)。关于位操作符常数的完整列表,请参阅 Visual Basic帮助文件中的有关内容。对于打印机来说,这个参数较少使用;而在屏幕显示图象时往往利用这个参数实现一些特殊效果。

printer.PaintPicture picture, x1, y1, width1, height1, x2, y2, width2, height2


printer.PaintPicture picture, 0, 0, 1000, 1000, 10, 10, 1000, 1000

mustudent 2006-11-07
  • 打赏
  • 举报
回复
PrintForm好像没有这样的属性
mustudent 2006-11-07
  • 打赏
  • 举报
回复
給你代碼
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const WM_PAINT As Long = &HF&
Private Const WM_PRINT As Long = &H317
Private Const PRF_CHILDREN As Long = &H10&
Private Const PRF_CLIENT As Long = &H4&
Private Const PRF_OWNED As Long = &H20&

'保存 PictureBox 中的内容为图片(包括控件)
Sub SaveINPicture(ByRef oPic As PictureBox, ByRef oPic2 As PictureBox, ByVal strPicFile As String)
Dim rv As Long

oPic.SetFocus

oPic2.AutoRedraw = True
rv = SendMessage(oPic.hwnd, WM_PAINT, oPic2.hDC, 0)
rv = SendMessage(oPic.hwnd, WM_PRINT, oPic2.hDC, PRF_CHILDREN + PRF_CLIENT + PRF_OWNED)
oPic2.Picture = oPic2.Image
oPic2.AutoRedraw = False

SavePicture oPic2.Picture, strPicFile

End Sub


需要通过另一个 picturebox 过渡(opic2),可以在窗体上放一隐藏控件

//fxy_2002(阿勇) ( ) 信誉:100 Blog 給出的代碼 測試了 可以將PIC中的控件圖片話 放入另一個PIC中

xiangfly 2006-11-07
  • 打赏
  • 举报
回复
mustudent(小生--蚕豆<我们开始纪念屈原的时候,韩国人还在树上>) 所说的方法我试了,只能在PictureBox的Picture属性里加入了图片才能打印,并且只是打印的图片,别的在PictureBox上的控件,还有绘的图都没有打出来,

有没有人知道应该怎样做?
xiangfly 2006-11-07
  • 打赏
  • 举报
回复
不是呀,我已经把窗口最大化了,还是只能打印A4的一半那么大,
我是想绘出一个图,然后打印,不管在哪里绘,用什么命令,只要给实现这个功能就行了,
加载更多回复(2)

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧