问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

VB 控制picturebox内容适应A4纸张大小,横向纵向调整,适合打印输出和图形输出一致!

发布网友 发布时间:2022-04-23 00:45

我来回答

3个回答

热心网友 时间:2023-10-09 12:39

设置打印机的默认纸张是a4,在vb中就可以通过printer对象可以取得a4纸张大小,可以记录下来,供以后使用;
下边是我写的一段利用picturebox做的打印预览程序,仅供参考!

Set flg = Oform.mOform.flg
iNowPage = 1
iRows = flg.Rows - 1
'1 获取用户的设置
sngMargin(0) = CDbl(Oform.txtM(0)) * mCcmToTwips '将厘米换算成缇
sngMargin(1) = CDbl(Oform.txtM(1)) * mCcmToTwips '将厘米换算成缇
sngFontSize = gaUserfont(1).Size * mCPointToTwips * mntimes
sngTblM = gaUserfont(0).Size * mntimes * mCPointToTwips + sngMargin(0) '页眉高度

s_getColIndex '取出全部打印列(flg中的col)
s_GetMergeCols '取出合并列的合并次数
s_CalcColsWidth '计算列的打印宽度
'2 判断纸张大小是否足以打下报表

'If sngTblWid > Printer.ScaleWidth Then

If sngTblWid > Printer.ScaleWidth Then
Screen.MousePointer = 0
If MsgBox("部分内容已超出页面范围。是否继续?", vbQuestion + vbYesNo, "万能打印") = vbNo Then Exit Sub
End If
'3 计算每页最多可打印的行数((页高—上下空白)/行高—1)
iMaxRecsPerPage = Int((Printer.ScaleHeight - sngTblM - sngMargin(1)) / (1.5 * sngFontSize) - 1)
If CInt(iRows / iMaxRecsPerPage) - Int(iRows / iMaxRecsPerPage) = 1 Then
iPages = CInt(iRows / iMaxRecsPerPage)
Else
iPages = CInt(iRows / iMaxRecsPerPage) + 1
End If
UpDown1.Max = iPages

'4.开始打印
With Pic1
'.ScaleHeight = Printer.ScaleHeight
' .ScaleWidth = Printer.ScaleWidth
Frame1.Width = Me.ScaleWidth + 500
.Height = Printer.ScaleHeight * mntimes
.Width = Printer.ScaleWidth * mntimes
.ScaleHeight = Printer.ScaleHeight
.ScaleWidth = Printer.ScaleWidth
.Left = 0
.Top = 600
Hsb.Min = 0
If .Width <= Hsb.Width Then

Hsb.Visible = False
Else
Hsb.Visible = True
Hsb.Max = .Width - Hsb.Width
Hsb.Value = (.Width - Hsb.Width) / 2
End If
Vsb.Min = 540
If .Height + 600 <= Me.ScaleHeight Then

Vsb.Visible = False
Else
Vsb.Visible = True
Vsb.Max = .Height - Vsb.Height
End If
' Me.Height = Me.ScaleHeight * 0.75
' Me.Width = Me.ScaleWidth * 0.75

For iC = 1 To Val(Oform.txtCopies) '对份数循环
For iNowPage = miPages To iPages '对页范围循环
'4-1 打印表头
' 不能用Set Printer.Font = gaUserfont(0),打印机字体可能被某些隐含过程改变,从而影响到userfont
With .Font
.name = gaUserfont(0).name
.Size = gaUserfont(0).Size * mntimes
.Bold = gaUserfont(0).Bold
.Italic = gaUserfont(0).Italic
.Underline = gaUserfont(0).Underline
.Strikethrough = False
End With
sTmp = Oform.txtTitle & "(" & Trim(Oform.mOform.Tag) & ")"
.CurrentX = sngLMargin + (sngTblWid - Pic1.TextWidth(sTmp)) / 2
.CurrentY = sngMargin(0) - sngFontSize * 2
Pic1.Print sTmp

'4-2 在表格的右上部打印"打印日期"
With .Font
.name = gaUserfont(1).name
.Size = gaUserfont(1).Size * mntimes
.Bold = gaUserfont(1).Bold
.Italic = gaUserfont(1).Italic
.Underline = gaUserfont(1).Underline
.Strikethrough = False
End With
sStr = "打印时间: " & Now()
.CurrentX = sngLMargin + sngTblWid - Pic1.TextWidth(sStr) - 200
.CurrentY = sngTblM - sngFontSize * 1.5

Pic1.Print sStr
'在页底边中间打印页码
.Font.Size = gaUserfont(1).Size * mntimes
.CurrentX = .ScaleWidth / 2
.CurrentY = .ScaleHeight - sngMargin(1)
Pic1.Print "第" & CStr(iNowPage) & "页"
'4-3 打印列标题
.DrawWidth = 1
'4-3-1划上边线
.CurrentX = sngLMargin
.CurrentY = sngTblM - sngFontSize / 4
Pic1.Line -Step(sngTblWid, 0) '划上边线
'4-3-2划左边线
.CurrentX = sngLMargin
.CurrentY = sngTblM - sngFontSize / 4
Pic1.Line -Step(0, 1.5 * sngFontSize) '划左边线

tmpX = sngLMargin
tmpY = sngTblM
.CurrentY = tmpY
With .Font
.name = gaUserfont(1).name
.Size = gaUserfont(1).Size * mntimes
.Bold = gaUserfont(1).Bold
.Italic = gaUserfont(1).Italic
.Underline = gaUserfont(1).Underline
.Strikethrough = False
End With
For iA = 0 To miCols - 1
.CurrentY = tmpY
If miMergeTimes(iA) = 1 Then
' If miAlignment(iA) = flexAlignLeftCenter Then
' .CurrentX = tmpX + sngFontSize / 4
' Else
' .CurrentX = tmpX + sngColWid(iA) - Pic1.TextWidth(Oform.lstChosenFlds.List(iA)) - sngFontSize / 4
' If .CurrentX < tmpX Then .CurrentX = tmpX + sngFontSize / 4
' End If
Else
.CurrentX = tmpX + (sngColWid(iA) * miMergeTimes(iA) - Pic1.TextWidth(Oform.lstChosenFlds.List(iA))) / 2 - sngFontSize / 4
End If
'输出数据
sStr = Trim(Oform.lstChosenFlds.List(iA))
'截取尾部的数字
If IsNumeric(Right(sStr, 1)) Then sStr = Left(sStr, Len(sStr) - 1)
If IsNumeric(Right(sStr, 1)) Then sStr = Left(sStr, Len(sStr) - 1)
.CurrentX = tmpX + (sngColWid(iA) * miMergeTimes(iA) - Printer.TextWidth(sStr)) / 2 - sngFontSize / 4
If .CurrentX < tmpX Then .CurrentX = tmpX
Pic1.Print sStr
'确定位置
.CurrentX = tmpX
.CurrentY = tmpY + sngFontSize * 1.25
'划下边线
Pic1.Line -Step(sngColWid(iA) * miMergeTimes(iA), 0)
tmpX = tmpX + sngColWid(iA) * miMergeTimes(iA)
.CurrentX = tmpX
.CurrentY = tmpY - sngFontSize / 4
'划右边线
Pic1.Line -Step(0, sngFontSize * 1.5)
Next

'4-4打印数据
tmpY = tmpY + sngFontSize * 1.25
tmpX = sngLMargin
.CurrentX = tmpX
.CurrentY = tmpY
iFRow = (iNowPage - 1) * iMaxRecsPerPage + 1 '第一行的行数
iLRow = iNowPage * iMaxRecsPerPage '最后一行的行数
'如果最后行数大于最大行取最大行为最后行
iLRow = IIf(iLRow > iRows, iRows, iLRow)
For iNowRow = iFRow To iLRow
tmpX = sngLMargin
.CurrentX = tmpX
.CurrentY = tmpY
For iCycle = 0 To miCols - 1
iNowcol = miColIndex(iCycle)
.CurrentX = tmpX
.CurrentY = tmpY
For iMerge = 1 To miMergeTimes(iCycle)
'划左边线
.CurrentX = tmpX
.CurrentY = tmpY
Pic1.Line -Step(0, 1.5 * sngFontSize)
'打印数据

If flg.ColAlignment(iNowcol) = flexAlignRightCenter Then
.CurrentX = tmpX + sngColWid(iCycle) * iMerge - .TextWidth(flg.TextMatrix(iNowRow, iNowcol))
If .CurrentX < tmpX Then .CurrentX = tmpX
Else
.CurrentX = tmpX + sngFontSize / 4
End If
.CurrentY = tmpY + sngFontSize * 0.25
sStr = flg.TextMatrix(iNowRow, iNowcol)
If IsNumeric(sStr) Then If Left(sStr, 1) = "." Then sStr = "0" & sStr
If sStr = "0" Then sStr = ""
If iNowRow < 4 Then
If IsNumeric(sStr) Then
Pic1.Print sStr
Else
If sStr <> sTmp Then Pic1.Print sStr
End If
Else
Pic1.Print sStr
End If
sTmp = sStr
'划下边线
.CurrentY = tmpY + sngFontSize * 1.5
.CurrentX = tmpX
Pic1.Line -Step(sngColWid(iCycle), 0)
'划右边线
tmpX = tmpX + sngColWid(iCycle)
.CurrentX = tmpX
.CurrentY = tmpY
'划右边线
Pic1.Line -Step(0, sngFontSize * 1.5)
iNowcol = iNowcol + 1
Next

Next
tmpY = tmpY + sngFontSize * 1.5
.CurrentY = tmpY
Next
.Top = 600

Exit For

Next
Exit For
Next

End With

热心网友 时间:2023-10-09 12:39

Private Sub Command1_Click()
Dim i As Integer
i = Me.ScaleMode
Me.ScaleMode = 7 '厘米作为单位
Picture1.Move 0, 0, 21, 29.7 'A4纸的尺寸
Me.ScaleMode = i
End Sub

热心网友 时间:2023-10-09 12:39

下载csximage.ocx
VB 控制picturebox内容适应A4纸张大小,横向纵向调整,适合打印输出和图形...

设置打印机的默认纸张是a4,在vb中就可以通过printer对象可以取得a4纸张大小,可以记录下来,供以后使用;下边是我写的一段利用picturebox做的打印预览程序,仅供参考!Set flg = Oform.mOform.flgiNowPage = 1iRows = flg.Rows - 1'1 获取用户的设置sngMargin(0) = CDbl(Oform.txtM(0)) * mCcmToTwips '将...

如何用VB将图片输出到打印机上打印?

1、把电脑图片加载到picturebox1 上,picturebox1的autosize 设置为auto。这样,picturebox1的高度和宽度就是原图的高和宽。2、判断picturebox1的宽度和高度,这样就可以和A4知的宽高比较了。3、再用一个picturebox2,用StretchBlt把picturebox1上图按比例缩小画到picturebox2 4、打印picturebox2。

vb中怎么让picturebox输出多行文字

想要让picturebox输出多行文字,可以反复使用Print方法在PictureBox控件中输出多行文字,在插入的文字中输入回车符(即Chr(13))即可,每一个Print语句右面是一行的内容。此外,在需要换行的地方加上“ &amp; vbCrlf &amp; ”代码也是可以实现让picturebox输出多行文字的。

请问VB里能不能在一张图片(pictureBox)之上用print在固定位置输出一些字 ...

可以的:Picture1.AutoRedraw = True Picture1.CurrentX = 150 '设置打印起始位置横坐标 Picture1.CurrentY = 150 '设置打印起始位置纵坐标 Picture1.Print "ABC" '打印字符 不过建议最好选用Label控件,比较方便

如何在VB的picturebox控件中 让图形适应控件自动调整大小

它没有这个属性。如果没有特别要求用Picture的话,尽量用Image来代替。哦~~~那么这样好了,将Image放在Picture里,将Image拉伸到Picture一样,然后设Stretch设为真好了。

vb6.0 滚动条调整打印在picturebox的文字上下滚动

方法有二:法一:多次执行Print语句,每一个Print语句右面是一行的内容。法二:在需要换行的地方加上“&amp;vbCrlf&amp;”。例如我要输出“欢迎使用!MicrosoftWindows”则语句为Picture1.Print"欢迎使用!"&amp;vbCrlf&amp;"MicrosoftWindows"

VB里面的picture是什么意思,作用是什么

也可以用 PictureBox 控件将 OptionButton 控件分组,并用该控件显示图形方法的输出和 Print 方法写入的文本。为了使 PictureBox 控件能够自动调整大小以显示整幅图形,将它的 AutoSize 属性设置成 True。可在代码中操作图形属性和方法,以创建动画或进行仿真。对运行时的打印操作,例如修改屏幕窗体格式以便...

详细介绍一下VB PictureBox的print和cls方法

1、首先编写窗体(设其姓名为form1)click事件。即在窗体上写入一个command1命令按钮。2、编写事件的编程如下。3、若想在同一个窗体中同时输出多个计算表达式的的计算结果,需要加一个英文状态下的逗号”,“。4、同上面的步骤一样先窗体上写入一个command1命令按钮,在程序代码窗口对象下拉列表框中选中...

怎么在VB中将picturebox控件中的内容保存为图片?

2)AutoRedraw 属性,返回或设置从图形方法到持久图形的输出。该属性为True,可使 Form 对象或 PictureBox 控件的自动重绘有效。图形和文本输出到屏幕,并存储在内存的图象中。该对象不接受绘制事件,必要时,用存储在内存中的图象进行重绘。以下代码保存PictureBox 控件装载的图片为bmp文件:Private Sub ...

VB编程:在picturebox里画y=x+1的坐标图形,x=text1(i).text,y=text2(i...

Picture1.Line (0, h)-(100, h - 100), vbRed Picture1.Line (0, 0)-(w, 0), vbRed Picture1.Line (w, 0)-(w - 100, 100), vbRed For i = 0 To 4 CurrentX = x CurrentY = y x = Val(Text1(i).Text)y = x + 1 Picture1.Line -(x, y), vbBlue Text2(i)...

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎样才能快速学好英语,几乎0基础 根治类风湿关节炎的方法 oa软件哪个好,求推荐? 奥运会主题曲是谁写的?求大神帮助 5566为奥运创作的歌曲叫什么?求大神帮助 2008北京奥运会应该唱什么歌好?求大神帮助 关于奥运会歌曲 大神求解 求各届奥运会的歌曲(全部歌曲)求大神帮助 有什么歌关于奥运会 ?求大神帮助 为什么女人出轨后,还愿意和老公一起睡? 求问这个孩子的名字 Q333Q (输下关键字好找,,,BJD.SNG) 速求proteus中基于89C51做的交通信号灯或者其它的也行,要proteus和keil两部分文件 天然气分类中,CNG、SNG、LNG中甲烷含量的范围及压力范围是多少? 栩字起名用意好吗?吉祥吗 用vb数组设计打分统计程序 羽和习和栩字的五笔那样打 砂浆中水泥、砂、石灰用量如何计算 &quot;口\非\羽\高&quot;这四个字可以分别加哪个相同的字组成新字? SNJ是什么意思? 我的WIN7记事本文件打开是乱码,怎么办 LOL sng战队是苏宁的么 SNG传输图片的格式是什么? SNG电子竞技标志英文用的什么字体 vivox60pro手机发热严重是原因? vivox60手机发热? vivo x60发热 vivox6sa每次充电手机都发烫?怎么回事?是假的吗 冰柜买哪个牌子好? vivo新手机充电发烫什么原因? 电冰箱哪个牌子好?知名品牌推荐 十字路*通灯控制2 设计任务:利用单片机设计一个十字路*通灯控制器 设计要求: 利用单片机的定 请问这个台语(闽南语)姓名发音可能是哪些字呢? 求做150吨水泥罐的制作图纸 栩五笔怎么打字 如何评价小米9SE? 小米9se到底怎么样? 小米8se和小米9se对比有哪些区别? 小米9se怎么样 小米9se怎么样?值得买吗? 小米9SE怎么样?值不值得买?AMOLED屏到底好不好? 小米9和9se哪个颜值好看? 小米9se能玩刺激战场吗 小米8se与小米9se谁更好? 小米9Se对小米RedMik2O应该选那个? 爱奇艺怎么用支付宝登陆? 用支付宝付宝付了爱奇艺会员怎么登陆? 用支付宝在电脑上爱奇艺上直接扫码付费的会员怎么再次登录? 苹果六怎么用支付宝登陆爱奇艺? 爱奇艺麻将可以用支付宝登录吗? 用支付宝登上的小度爱奇艺VIP怎样取消?