vb中如何用系统打印机打印啊?保证给分

donner123 2004-04-12 09:00:48
我想在用VB实现打印功能,可是打印的列总是对不齐,有谁能提供一段代码吗?谢谢!
...全文
66 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
donner123 2004-04-12
  • 打赏
  • 举报
回复
到Printer.Print (mS)的时候提示printer error,怎么回事啊?我的打印机已经连了。
啊维 2004-04-12
  • 打赏
  • 举报
回复
'在指定位置打印字符内容
'参数: 打印内容,控件ID,字体,字号,起点(左上角)坐标X、Y值,终点(右下角)坐标X、Y值
' 水平对齐方式,垂直对齐方式,字距,行距
'一行当中最高的字符高度+行距作为占高
'如果宽度合计小于mX2-mX1,则只有一行;
'如果高度累计值>mY2-mY1,说明在指定的范围内无法容下全部字符,不需考虑垂直对中。

Public Sub mPrintStr(Optional mStringVal As String = "", _
Optional mFontName As String = "宋体", Optional mFontSize As Single = 10, Optional mX1 As Single = 0, _
Optional mY1 As Single = 0, Optional mX2 As Single = 0, Optional mY2 As Single = 0, Optional mAlign_V As Integer = 0, _
Optional mAlign_H As Integer = 0, Optional mWSpace As Single = 0, Optional mLSpace As Single = 0)

'字符串 mStringVal 中字符的预号
Dim I As Long
'字符串 mStringVal 中当前指定的字符(第i个)
Dim mS As String
'宽度和高度合计
Dim mWTotal As Single, mHTotal As Single
'一行中最高的字符的高度
Dim mMaxH As Single
'第一行中最高的字符的高度
Dim mMaxHFL As Single
'最后一行的行编号
Dim mLastLineNum As Long
'最后一行的字符宽度合计
Dim mLastLineWidth As Single
'当前行第一个字符打印位置
Dim mX As Single, mY As Single
'当前打印行的编号
Dim mLine As Long

If mStringVal = "" Then Exit Sub
' mX1 = 0 Or _
' mY1 = 0 Or _
' mX2 = 0 Or _
' mY2 = 0 Then Exit Sub

' '如果有指定的控件,则要先从设定表中读入相关的参数(字体、位置...)
' '其实这一部分留给调用程序较好
' If mControlID > 0 Then
'
' End If
mMaxH = 0
mWTotal = 0
'至少打印一行???
mLastLineNum = 1

With Printer
'定义计算单位为 mm
' .ScaleMode = vbMillimeters
.ScaleMode = vbTwips
.FontName = mFontName
.FontSize = mFontSize

'显示用的
' frmPrintRenStat.Picture1.ScaleMode = vbMillimeters
' frmPrintRenStat.Picture1.ScaleMode = 1
' frmPrintRenStat.Picture1.FontName = .FontName
' frmPrintRenStat.Picture1.FontSize = .FontSize

'----------------------预计打印位置,求出总高度、总行数、最后一行的总宽度-----------------------------------

For I = 1 To Len(mStringVal)
'取出一个字符
mS = Mid(mStringVal, I, 1)
'若当前行还可以容下当前指定的字符,继续在当前行打印
If mWTotal <= mX2 - mX1 - .TextWidth(mS) + mWSpace Then
'取当前行最高的字符的高度值(如果当前字符高度>之前最高字符,则取当前字符作为
'本行最高字符,否则,保持原最高字符(已考虑行高调整值)
mMaxH = IIf(.TextHeight(mS) + mLSpace > mMaxH, .TextHeight(mS) + mLSpace, mMaxH)
End If

'必须换至下一行
If mWTotal > mX2 - mX1 - .TextWidth(mS) + mWSpace Then
'行高累加
mHTotal = mHTotal + mMaxH
'最后一行的编号
mLastLineNum = mLastLineNum + 1
'换到下一行
mMaxH = .TextHeight(mS) + mLSpace
mWTotal = 0
End If
'记下第一行的高度
If mLastLineNum = 1 Then
mMaxHFL = mMaxH
End If
'宽度累加
mWTotal = mWTotal + .TextWidth(mS) + mWSpace
Next I

'加上第一行高度,得到总行高
mHTotal = mHTotal + mMaxHFL
'记下最后一行的相关数据
mLastLineWidth = mWTotal

'----------------------------------------正式打印----------------------------------
mLine = 1

'若字符总高度小于给定的打印高度
If mHTotal < mY2 - mY1 Then
Select Case mAlign_H
'要求垂直方向顶端对齐的
Case 0
mY = mY1
'要求垂直方向对中的
Case 1
mY = mY1 + (mY2 - mY1 - mHTotal) / 2
'要求垂直方向底端对齐的
Case 2
mY = mY2 - mHTotal
End Select
Else
mY = mY1
End If

'若是最后一行,且水平方向要求对中的-------(更完善的方案用数组记下各行的宽度,每行都设置?)
If mLine = mLastLineNum Then
Select Case mAlign_V
'要求水平方向左对齐的
Case 0
mX = mX1
'要求水平方向对中的
Case 1
mX = mX1 + (mX2 - mX1 - mLastLineWidth) / 2
'要求水平方向右对齐的
Case 2
mX = mX2 - mLastLineWidth
End Select
Else
mX = mX1
End If

mS = ""
mMaxH = 0
mWTotal = 0
mHTotal = 0
For I = 1 To Len(mStringVal)
'取出一个字符
mS = Mid(mStringVal, I, 1)

'若当前行还可以容下当前指定的字符,继续在当前行打印
If mWTotal <= mX2 - mX1 - .TextWidth(mS) + mWSpace Then
'取当前行最高的字符的高度值(如果当前字符高度>之前最高字符,则取当前字符作为
'本行最高字符,否则,保持原最高字符(已考虑行高调整值)
mMaxH = IIf(.TextHeight(mS) + mLSpace > mMaxH, .TextHeight(mS) + mLSpace, mMaxH)

'打印当前字符
.CurrentX = mX + mWTotal
.CurrentY = mY + mHTotal
Printer.Print (mS)

'显示当前字符
' frmPrintRenStat.Picture1.CurrentX = mX + mWTotal
' frmPrintRenStat.Picture1.CurrentY = mY + mHTotal
' frmPrintRenStat.Picture1.Print (mS)
End If
If mWTotal > mX2 - mX1 - .TextWidth(mS) + mWSpace Then
'行高累加
mHTotal = mHTotal + mMaxH

'若已超出给定的高度,不再打印
If mHTotal > (mY2 - mY1) Then Exit Sub

'最后一行的编号
mLine = mLine + 1

'换到下一行
mMaxH = .TextHeight(mS) + mLSpace
mWTotal = 0

'若是最后一行,且水平方向要求对中的
If mLine = mLastLineNum Then
Select Case mAlign_V
'要求水平方向左对齐的
Case 0
mX = mX1
'要求水平方向对中的
Case 1
mX = mX1 + (mX2 - mX1 - mLastLineWidth) / 2
'要求水平方向右对齐的
Case 2
mX = mX2 - mLastLineWidth
End Select
Else
mX = mX1
End If

'打印当前字符
.CurrentX = mX + mWTotal
.CurrentY = mY + mHTotal
Printer.Print (mS)

'' 显示当前字符
' frmPrintRenStat.Picture1.CurrentX = .CurrentX
' frmPrintRenStat.Picture1.CurrentY = .CurrentY
' frmPrintRenStat.Picture1.Print (mS)
End If
'宽度累加
mWTotal = mWTotal + .TextWidth(mS) + mWSpace
Next I
' 或NewPage,在调用本过程之中,需要换页时
' .EndDoc
End With

End Sub
前言 随着科学技术的发展,工业生产水平的不断发展和人们生活条件的不断改善,消费者的价值观念变化很快,市场需求出现多样化的特征,机械产品的种类日益增多,同时这些机械产品的寿命周期也相应缩短,企业为了赢得市场,必须不断开发符合市场需求的产品。新产品的开发包括产品的设计与制造,其设计是产品开发的第一步,是决定产品的性能、质量、水平、市场竞争力和经济效益的最主要因素。机械产品的设计是对产品的功能、工作原理、系统运动方案、机构的运动与动力设计、机构的结构尺寸、力和能量的传递方式、各个零件的材料和形状尺寸、润滑方法等进行构思析与计算,并将其转化为具体的描述以作为制造依据的工作过程。其机械产品的功能、工作原理、系统运动方案、机构的运动与动力设计、机构的结构尺寸、力和能量的传递方式等设计内容是机械原理课程的教学内容。 机械原理课程设计是机械原理课程的一个重要实践性教学环节同时又是机械类专业人才培养计划的一个相对独立的设计实践,在培养学生的机械综合设计能力及创新意识与能力方面起到十重要的作用。通过课程设计这一环节使学生更好的掌握和加深理解本课程的基本理论和方法进一步提高学生查阅技术资料,绘制工程图和应用计算机的能力。在课程设计要重视培养学生创新设计的能力。 我们将从机构的运动学以及机器的动力学入手,研究机构运动的确定性和可能性,并进一步讨论的组成原理.,从几何的观点来研究机构各点的轨迹、位移、速度和加速度的求法,以及按已知条件来设计新的机构的方法。 机械原理课程设计所研究的问题又可归纳为二类: (1) 根据已有的机构和主要参数来析该机构和所组成机构的各 种特性,即结构析,运动析。 (2) 根据预期的各种特性来确定新的机构的形式,结构和参数,即机构的设计问题.,如机构的运动设计,机构的平衡设计以及速度的调节。 计算机的应用为此次课程设计提供方便,我们可以利用Visual Basic作图,从而能看到机构的仿真运动。这算是我们开始学习专业的第一次亲自实践过程。 贵州大学机械工程学院 一、机械原理课程设计任务书 题号5 自动打印设计 1.1 工作原理及工艺动作过程 在某商品包装好的纸盒上,为了某种需要而在商品上打印一种记号。它的主要动作有三个:送料到达打印工位,然后打印记号,最后将产品输出。 1.2 原始数据和设计要求 (1) 纸盒尺寸:长100~150mm、宽70~100mm、高30~50mm。; (2) 产品重量:5~10N; (3) 自动打印的生产率:80次/min; (4) 要求机构的结构简单紧凑、运动灵活可靠、易于制造加工。 1.3 设计方案提示 1)实现送料——夹紧功能的机构可以采用凸轮机构或有一定停歇时间的连杆机构。当送料、夹紧机构的执行构件将产品推至指定位置,执行构件停止不动,维持推紧力(前有挡块挤压),待打印构执行件打完印记后,被推走。 2)实现打印功能的机构可以采用平面连杆机构或直动(摆动)凸轮机构。 3)实现输出功能的机构可以采用与送料、夹紧机构相类似的机构。为简化结构,可考虑固定定位挡块,而将输出运动与送料运动的方向互相垂直。 4)自动打印系统采用一个电机驱动主轴控制三个机构的执行构件完成各自的功能运动,如何将三个执行机构的主动件均固定在主轴上而达到设计要求是需要认真考虑的。 1.4 设计任务 (1) 按工艺动作要求拟定运动循环图; (2) 进行送料夹紧机构、打印构和输出机构的选型; (3) 机械运动方案的评定和选择:(至少两个以上),进行方案评价,选出较优方案。 (4) 按选定的原动机和执行机构的运动参数拟定机械传动方案,配传动比,并在图纸上画出传动方案图; (5) 对机械传动系统和执行机构进行运动尺寸计算; (6) 绘制系统机械运动方案简图; (7) 对执行机构进行运动析,画出运动线图; (8) 编写设计计算说明书。 二、电动机的选择 型号 功率/kw 电流/A 转速/(r/min) 满载 效率/% 功率因数/(cos/) Y2-132S-6 3 7.4 960 81.0 0.76 堵转电流/实际电流 堵转转矩/额定转矩 最大转矩/额定转矩 6.5 2.1 2.1 选择的电动机的额定功率必须满足负载要求,而且必须保证在启动时可以顺利地运行,对于电动机来说,转速选择960r/min合适,可以保证运行的稳定性。另外转速也不可过高,这样造成功率因素过低,这也是不经济的。电动机的运动参数为转速。电动机的速度越高,其尺寸和质量也就越大,价格也就越高,但当执行构件的速度较低时,若选用高速电动机,势必需要大减速比的减速装置,反而可能会造成机械传动系统的过庞大和制造成本的显著增加。在此
“天籁”洗衣店管理系统是为小型店铺量身定做的一款洗衣店管理系统,该系统界面美观大方,使用简单,操作方便,为小型洗衣店的首选。 “天籁”洗衣店管理系统能完成如下功能: 1:操作人员管理,可为不同的操作人员开放不同的权限。 2:强大的会员管理功能管理,可管理会员卡号、会员姓名、起用日期、联系电话、会员卡同时有储值功能,可以存款,收衣刷卡后自动扣除洗衣款。 3:会员卡充值:会员卡使用金额不足后,可以重新充值。 4:会员卡挂失,挂失后,为会员配新卡号,原卡号的所有信息(包括历史记录)都自动赋予新卡号。 5、软件的收衣小票支持POS58打印和普通打印,用户可根据自己的实际情况选择打印。可以设置每次同时打印几张小票、打印的选择十方便。 6:简单明了的收衣界面,该界面一目了然,服装类型、服装颜色、服务项目、价格、瑕疵的选择十方便,可以自己填写“挂衣号”方便付衣的时候查找衣服,该界面可实现自动区会员和散客,会员自动刷卡扣钱,散客需要收取现金;同时,系统支持顾客欠洗衣款,在付衣的时候补收洗衣款。收衣后,可以打印小票,也可以通过控制,不打印小票,功能比较灵活。 7:简单明了的付衣界面,该界面一目了然,该界面可实现按收衣单号、会员卡号、顾客姓名、联系电话为条件检索信息,符合条件的信息列出后,如果有欠费就补收洗衣款,补收完后,点“付衣”即完成付衣工作,十简单。 8:完善的报表统计功能,报表包括收款报表、已付服装、未付服装、充值记录、挂失记录、按收衣单查询历史洗衣信息、按会员卡查询历史洗衣信息、一日业务一览等。 9:完善的数据管理功能,可完成数据库的备份,恢复,初始化操作,通过完善的数据操作,保证数据库的完整。 10:完整的帮助系统,软件运行可随时点击“系统帮助”按钮寻求帮助。

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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