VB打印条码极简单的方法_第1页
VB打印条码极简单的方法_第2页
VB打印条码极简单的方法_第3页
VB打印条码极简单的方法_第4页
VB打印条码极简单的方法_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、vb打印条码极简单的方法公司接到一个医院病案的软件升级改造任务,在客户的程序中增加打印条码功能,因为客户的程序是vb开发的,因为客户提出需要自行调整打印参数等,一开始就调用word 来打印,文字等信息都能够正常打印出,打印参数也能够调整,打印效果很好,但是打印的条码不能识别;于是寻求万能的internet ,搜索后发现网上的许多资料都是于code39 为例,要不就是复杂,使用code39 的条码原理,使用画图控件画图来实现;要不就是看不懂,不能实现;要不就是很简单,也下载了相关的代码, 也有在 word 中调用 barcode 控件, 但是我一直到没有找到可行或者说看明白的(代码都是没有注释的

2、),也下载多个代码, 但是使用barcode 在 word 打印的都没有成功, 最后在绿竹小龙的博客中找到可行的方法,并且是说的很明白的(有些细节不详,需要认真思考后才明白!) ,也是使用mocrosoft 的 barcode 控件,打印 form,在这总结了我的经验,给大家参考,避免大家走弯路,在这里特别感谢绿竹小龙,也感谢各位的无私奉献,大家如果不明白可以 联系。1、 注册 mocrosoft 的 barcode 控件,网上可以找到并下载;2、 使用新 form 来显示打印的内容,调整form 的大小与打印纸的大小一样3、 添加 picture 控件,为什么要使用picture 控件,是在

3、打印后发现,没有picture 控件打印的效果很差,字体看不清; 在 picture 控件上添加barcode 的控件, 在 picture控件上添加barcode 的控件, style属性控制条形码的类形,当值为6 时为 code39 码(仅包含最简单的数值和字符,零售流通领域常用),当值为 7 时为 code128 码(字符比较齐全,目前比较通用),结合客户的要求,编程中使用code128 码4、 添加其他的需要打印的控件,设置好字体等,5、 激活 from 时将需要打印的内容赋值给对应控件,6、 等待 1 秒后(因为picture 控件的关系,赋值后马上打印经常会出现空白内容)7、 打印

4、 form 8、 关闭 form 具体的代码见下:使用条码机打印,条码纸规格是6cm*6cm 打印的内容有住院号、住院号+住院次数的条码、姓名、性别、出院日期、入院日期、出院科室所以 form 的内容是: picture 控件、 text 控件、 label 控件的背景色设为与条码纸一样的颜色(白色),条码是用 barcode 控件,其他使用text 控件。form 激活时的代码:private sub form_activate() f orm 激活时的代码dim zyh as string定义住院号为文本类型dim zyhtemp as string定义临时的住院号为文本类型for i =

5、 0 to me.lblbl.count根据标签控件的个数(与text 控件的个数相对应,方便赋值)me.textbl(i).text = frmblfmprint.textbl(i).text从其他 form 将需要打印的控件值赋值过来,准备打印next 去掉住院号前面的0,要求不打印住院号前面的0 zyh = trim(me.textbl(1).text) zyhtemp=zyh for i2 = 1 to 10住院号是10 位的,所以从左边逐一检查住院号,将0 全部去掉if left(zyh, 1) = 0 then左边第一位是0,则去掉0 zyh = right(zyh, len(zy

6、h) - 1) else 当检查到左边第一位非0 时,就退出循环,并保存最后的住院号me.textbl(1).text = zyh exit for end if next 住院次数标准为3 位数字,不够位数前面补0 dim zycs as string zycs = trim(me.textbl(0).text) for i = 0 to 3 - len(trim(me.textbl(0).text) - 1 zycs = 0 & zycs next me.barcodectrl1.value = zyhtemp&zycs 给条码控件赋值sleep 1000 暂停 1 秒me

7、.printform 打印窗体unload me 关闭窗体end sub 打印效果:在看了绿竹小龙的博客后,我也尝试的他说的方法,但是条码死活就是不能识别,他的截图能够识别条码,我按照他的方法连截图后不能识别,非常郁闷。最后只能是不是打印窗体的方法来完成任务,缺点是不能在打印时调整打印参数了。在这里附上他的方法: 他的一开始的方法是使用windows 的 api函数,先对条码控件抓图, 在贴到 picture控件后再打印,也是发现打印出的条码不能识别,最后也是使用打印form 方法解决,大家有兴趣可以去看看他的博客http:/ vb 编程实现条码打印(2013-06-04 00:27:32)转

8、载分类:vb前几天公司突然接到客户的要求,需要我们公司在所有的外包装盒上贴上规定的条码,该条码由零件号、供应商代码、生产批次代码共三个部分组成,我公司立即购买了条码打印机,但是销售商提供的intermec条码打印机并没有随机软件,该公司也不具备条码打印软件的开发能力,所以他们推荐我们使用一款通用的条码编辑打印软件的破解版本lableview进行打印,通过使用过后发现使用这个软件对本公司的适用性不够、数据库连接处理能力较差,每一个数据都需要人工输入,出错的机率较大。为此,领导要求公司计算机室拿出一个好的办法来。我们经过一段时间的研究,发现通过vb 编程调用微软office 自带的条形码控件 mi

9、crosoft barcode control 9.0进行条形码的编辑并打印,这样做一是可以按需定制需打印的条形码,另一个软件短小精干,实用性强,占用系统资源也低,实用效果不错。考虑到刚开始的时候在网上查找资料很多都不实用而有这种需求的人很多,所以特把自己的设计经验拿出来与大家共享。希望能对有这方面需求的人有所帮助。1、程序设计思路首先要简要了解一下barcode9 控件,这是微软自带的一个条形码控件,其中的style 属性控制条形码的类形,当值为 6时为 code39 码 (仅包含最简单的数值和字符,零售流通领域常用) , 当值为 7时为 code128码(字符比较齐全,目前比较通用),结合

10、客户的要求,编程中使用code128 码。编程思路为:针对客户的条码三段式要求,第一段为零件号,第二段为供应商编码(固定),第三段为基本由日期生成的生产批次号,窗体中设置可选择的组合框控件用于选择不同的零件号,文本框控件用于设置供应商编码,另一文本框用于读取系统日期并按要求输出生产批次。再设置一条形码控件,由条码确定按钮使条码的value 赋值为前面的三段式条码各段的累加。由于条形码控件没有打印属性,还得设置一个图片控件用于条形码的转贴打印。再通过按钮控件打印。选择零件号、供应商编码、生产批次号条形码控件条码输出条码确定按钮条码控件 value 属性赋值条码 - 剪贴板 - 图片控件 - 打印

11、图片条码打印按钮2、程序设计步骤2 1 窗体设计 根据流程设定,能很快设计出程序主窗体:如下图22 代码编写:对按钮控件编写代码条码确定及预览:private sub command1_click() barcodectrl1.value = combox1.text + text2.text + text3.text end sub 条码打印:(这段代码网络上一般都有,但是有的经试验不能用,这个能用,而且该代码的确能实现条码的打印,但是扫描枪读取还有问题,我是经过n 久才摸索出原因并想办法加以解决的,在打印结果中将进行说明)private sub command2_click() dim h

12、scrdc as long hscrdc = getdc(picture1.hwnd) dim hmemdc as long hmemdc = createcompatibledc(hscrdc) dim xscrn as integer dim yscrn as integer picture1.scalemode = vbpixels xscrn = picture1.scalewidth + 200 yscrn = picture1.scaleheight + 200 dim hbitmap as long hbitmap = createcompatiblebitmap(hscrdc,

13、 xscrn, yscrn) dim holdmap as long holdmap = selectobject(hmemdc, hbitmap) bitblthmemdc, 0, 0, xscrn, yscrn, hscrdc, 0, 0, srccopy hbitmap = selectobject(hmemdc, holdmap) openclipboardhwnd emptyclipboard setclipboarddata cf_bitmap, hbitmap closeclipboard dim picturex as picture set picturex = clipbo

14、ard.getdata() printer.print printer.paintpicturepicturex, 0, 0 printer.enddoc end sub private sub form_load() end sub 由于条码打印中应用到部分函数,故在模块中需进行如下定义:option explicit private const horzres = 8 horizontal width in pixels private const vertres = 10 vertical width in pixels private const cf_bitmap = 2 dim s

15、crndc as long private const srccopy = &hcc0020 (dword) dest = source private declare function getdc lib user32 (byvalhwnd as long) as long private declare function createcompatibledc lib gdi32 (byvalhdc as long) as long private declare function getdevicecaps lib gdi32 (byvalhdc as long, byvalnin

16、dex as long) as long private declare function createcompatiblebitmap lib gdi32 (byvalhdc as long, byvalnwidth as long, byvalnheight as long) as long private declare function selectobject lib gdi32 (byvalhdc as long, byvalhobject as long) as long private declare function bitblt lib gdi32 (byvalhdestd

17、c as long, byval x as long, byval y as long, byvalnwidth as long, byvalnheight as long, byvalhsrcdc as long, byvalxsrc as long, byvalysrc as long, byvaldwrop as long) as long private declare function deletedc lib gdi32 (byvalhdc as long) as long private declare function openclipboard lib user32 (byv

18、alhwnd as long) as long private declare function emptyclipboard lib user32 () as long private declare function setclipboarddata lib user32 (byvalwformat as long, byvalhmem as long) as long private declare function closeclipboard lib user32 () as long 23 条形码打印结果经过程序窗体设计及代码编写,点击运行按钮,选定零件号,点击条码确定及预览,条码控件上出现设计的内容,再点击打印条码,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论