资源预览内容
第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
亲,该文档总共6页全部预览完了,如果喜欢就下载吧!
资源描述
VB打印条码极简单的方法公司接到一个医院病案的软件升级改造任务,在客户的程序中增加打印条码功能,因为客户的程序是VB开发的,因为客户提出需要自行调整打印参数等,一开始就调用word来打印,文字等信息都能够正常打印出,打印参数也能够调整,打印效果很好,但是打印的条码不能识别;于是寻求万能的Internet,搜索后发现网上的许多资料都是于code39为例,要不就是复杂,使用code39的条码原理,使用画图控件画图来实现;要不就是看不懂,不能实现;要不就是很简单,也下载了相关的代码,也有在word中调用barcode控件,但是我一直到没有找到可行或者说看明白的(代码都是没有注释的),也下载多个代码,但是使用barcode在word打印的都没有成功,最后在绿竹小龙的博客中找到可行的方法,并且是说的很明白的(有些细节不详,需要认真思考后才明白!),也是使用mocrosoft的barcode控件,打印form,在这总结了我的经验,给大家参考,避免大家走弯路,在这里特别感谢绿竹小龙,也感谢各位的无私奉献,大家如果不明白可以33333804163.com联系。1、 注册mocrosoft的barcode控件,网上可以找到并下载;2、 使用新form来显示打印的内容,调整form的大小与打印纸的大小一样3、 添加picture控件,为什么要使用picture控件,是在打印后发现,没有picture控件打印的效果很差,字体看不清;在picture控件上添加barcode的控件,在picture控件上添加barcode的控件,STYLE属性控制条形码的类形,当值为6时为CODE39码(仅包含最简单的数值和字符,零售流通领域常用),当值为7时为CODE128码(字符比较齐全,目前比较通用),结合客户的要求,编程中使用CODE128码4、 添加其他的需要打印的控件,设置好字体等,5、 激活from时将需要打印的内容赋值给对应控件,6、 等待1秒后(因为picture控件的关系,赋值后马上打印经常会出现空白内容)7、 打印form8、 关闭form具体的代码见下:使用条码机打印,条码纸规格是6cm*6cm打印的内容有住院号、住院号+住院次数的条码、姓名、性别、出院日期、入院日期、出院科室所以form的内容是:picture控件、text控件、label控件的背景色设为与条码纸一样的颜色(白色),条码是用barcode控件,其他使用text控件。Form激活时的代码:Private Sub Form_Activate()Form激活时的代码Dim ZYH As String 定义住院号为文本类型Dim ZyhTemp As String 定义临时的住院号为文本类型For i = 0 To Me.LblBL.Count 根据标签控件的个数(与text控件的个数相对应,方便赋值)Me.TextBL(i).Text = FrmBLFMPrint.TextBL(i).Text 从其他form将需要打印的控件值赋值过来,准备打印Next去掉住院号前面的0,要求不打印住院号前面的0ZYH = Trim(Me.TextBL(1).Text)ZyhTemp=zyhFor i2 = 1 To 10 住院号是10位的,所以从左边逐一检查住院号,将0全部去掉 If Left(ZYH, 1) = 0 Then 左边第一位是0,则去掉0 ZYH = Right(ZYH, Len(ZYH) - 1) Else当检查到左边第一位非0时,就退出循环,并保存最后的住院号 Me.TextBL(1).Text = ZYH Exit For End IfNext住院次数标准为3位数字,不够位数前面补0Dim ZYCS As StringZYCS = Trim(Me.TextBL(0).Text)For i = 0 To 3 - Len(Trim(Me.TextBL(0).Text) - 1 ZYCS = 0 & ZYCSNextMe.BarCodeCtrl1.Value = zyhtemp & zycs 给条码控件赋值Sleep 1000 暂停1秒Me.PrintForm 打印窗体Unload Me 关闭窗体End Sub打印效果:在看了绿竹小龙的博客后,我也尝试的他说的方法,但是条码死活就是不能识别,他的截图能够识别条码,我按照他的方法连截图后不能识别,非常郁闷。最后只能是不是打印窗体的方法来完成任务,缺点是不能在打印时调整打印参数了。在这里附上他的方法:他的一开始的方法是使用windows的API函数,先对条码控件抓图,在贴到picture控件后再打印,也是发现打印出的条码不能识别,最后也是使用打印form方法解决,大家有兴趣可以去看看他的博客http:/blog.sina.com.cn/s/blog_66b5659d0101dyps.html。博客原文:应用VB编程实现条码打印(2013-06-04 00:27:32)转载分类:VB前几天公司突然接到客户的要求,需要我们公司在所有的外包装盒上贴上规定的条码,该条码由零件号、供应商代码、生产批次代码共三个部分组成,我公司立即购买了条码打印机,但是销售商提供的Intermec条码打印机并没有随机软件,该公司也不具备条码打印软件的开发能力,所以他们推荐我们使用一款通用的条码编辑打印软件的破解版本LABLEVIEW进行打印,通过使用过后发现使用这个软件对本公司的适用性不够、数据库连接处理能力较差,每一个数据都需要人工输入,出错的机率较大。为此,领导要求公司计算机室拿出一个好的办法来。我们经过一段时间的研究,发现通过VB编程调用微软OFFICE自带的条形码控件Microsoft Barcode Control 9.0进行条形码的编辑并打印,这样做一是可以按需定制需打印的条形码,另一个软件短小精干,实用性强,占用系统资源也低,实用效果不错。考虑到刚开始的时候在网上查找资料很多都不实用而有这种需求的人很多,所以特把自己的设计经验拿出来与大家共享。希望能对有这方面需求的人有所帮助。1、程序设计思路首先要简要了解一下BARCODE9控件,这是微软自带的一个条形码控件,其中的STYLE属性控制条形码的类形,当值为6时为CODE39码(仅包含最简单的数值和字符,零售流通领域常用),当值为7时为CODE128码(字符比较齐全,目前比较通用),结合客户的要求,编程中使用CODE128码。编程思路为:针对客户的条码三段式要求,第一段为零件号,第二段为供应商编码(固定),第三段为基本由日期生成的生产批次号,窗体中设置可选择的组合框控件用于选择不同的零件号,文本框控件用于设置供应商编码,另一文本框用于读取系统日期并按要求输出生产批次。再设置一条形码控件,由条码确定按钮使条码的VALUE赋值为前面的三段式条码各段的累加。由于条形码控件没有打印属性,还得设置一个图片控件用于条形码的转贴打印。再通过按钮控件打印。选择零件号、供应商编码、生产批次号条形码控件条码输出条码确定按钮条码控件VALUE属性赋值条码-剪贴板-图片控件-打印图片条码打印按钮2、程序设计步骤21窗体设计根据流程设定,能很快设计出程序主窗体:如下图22代码编写:对按钮控件编写代码条码确定及预览:Private Sub Command1_Click()BarCodeCtrl1.Value = combox1.Text + Text2.Text + Text3.TextEnd Sub条码打印:(这段代码网络上一般都有,但是有的经试验不能用,这个能用,而且该代码的确能实现条码的打印,但是扫描枪读取还有问题,我是经过N久才摸索出原因并想办法加以解决的,在打印结果中将进行说明)Private Sub Command2_Click()Dim hScrDC As LonghScrDC = GetDC(Picture1.hwnd)Dim hMemDC As LonghMemDC = CreateCompatibleDC(hScrDC) Dim xScrn As IntegerDim yScrn As IntegerPicture1.ScaleMode = vbPixelsxScrn = Picture1.ScaleWidth + 200yScrn = Picture1.ScaleHeight + 200Dim hBitmap As LonghBitmap = CreateCompatibleBitmap(hScrDC, xScrn, yScrn)Dim hOldmap As LonghOldmap = SelectObject(hMemDC, hBitmap)BitBlt hMemDC, 0, 0, xScrn, yScrn, hScrDC, 0, 0, SRCCOPYhBitmap = SelectObject(hMemDC, hOldmap)OpenClipboard hwndEmptyClipboardSetClipboardData CF_BITMAP, hBitmapCloseClipboardDim picturex As PictureSet picturex = Clipboard.GetData()Printer.Print Printer.PaintPicture picturex, 0, 0Printer.EndDocEnd SubPrivate Sub Form_Load()End Sub由于条码打印中应用到部分函数,故在模块中需进行如下定义:Option ExplicitPrivate Const HORZRES = 8Horizontal width in pixelsPrivate Const VERTRES = 10 Vertical width in pixelsPrivate Const CF_BITMAP = 2Dim scrndc As LongPrivate Const SRCCOPY = &HCC0020 (DWORD) dest = sourcePrivate Declare Function GetDC Lib user32 (ByVal hwnd As Long) As LongPrivate Declare Function CreateCompatibleDC Lib gdi32 (ByVal hdc As Long) As LongPrivate Declare Function GetDeviceCaps Lib gdi32 (ByVal hdc As Long, ByVal nIndex As Long) As LongPrivate Declare Function CreateCompatibleBitmap Lib gdi32 (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As LongPrivate Declare Function SelectObject Lib gdi32 (ByVal hdc As Long, ByV
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号