ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:26.46KB ,
资源ID:3512332      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-3512332.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VB条形码编程.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

VB条形码编程.docx

1、VB条形码编程用VB设计条形码轻印刷系统 条形码技术简介 条形码作为一种识别输入技术,由于其显而易见的快速、准确、低廉等优点,被广泛应用于商品流通、图书馆管理等众多的自动化管理系统中。 条形码是利用条(着色部份)、空(非着色部份)及其宽、窄的交替变换来表达信息。每一种编码,都制定有字符与条空、宽窄表达的对应关系,只要遵循这一标准打印出来的条、空交替排列的“图形符号”,这一“图形符号”中就包含了字符信息;当识读器划过这一“图形符号”时,这一条、空交替排列的信息通过光线反射,在识读器内,这种光信号被转换成数字信号,再经过相应的解码软件,就能将“图形符号”还原成字符信息。 三九码是一种应用比较普遍的

2、条形码,它长度可变、可校验,容纳的字符多达43个(包括数字09、字母AZ及其它七个特殊字符)。由于在表示每一字符时,使用9个元素,其中3个宽元素、6个窄元素,故名39码,这3个宽元素中必须有两个是条(有四个特殊用途的字符除外)。如字母“J”的编码规则为:“NNNNWWWNN”,其中N表示窄元素,W表示宽元素,奇数位为条元素,偶数位为空元素,宽窄元素的宽度尺寸比为23,且在同一个条码中必须是固定的。在打印制作条形码时,条是需要打印(着色)的,而空元素内不必打印的,不过要将其宽度计算在内。对于某一要打印的字符串,按其先后顺序打印,串前串后各加一个“*”符号做为起始符与终止符,相邻的字符间在打印时由

3、“位空”分隔,“位空”类似空元素,即不着色部分,其宽度应小于1.35mm,为编程方便,通常取为一个窄元素的宽度。 条形码的制作有制版印刷、轻印刷两种方式,轻印刷是指使用普通打印机,在计算机控制下制作条形码。这种制作方法灵活,成本较低,即适宜于同一号码的单条制作,也可用于同一号码的大量制作,这一特点是制版印刷无可替代的。使用计算机软件打印条形码,其原理是将条形码作为图形来看待,用编程语言中的绘图语句-画矩形框,在相应的坐标上画出各种宽度不同的条元素,这样即可实现条形码的计算机软件打印。 VB中几种打印功能在条码打印时的比较 VisualBasic是近年来比较流行的编程语言,功能强大,易学易用。V

4、isualBasic对打印功能提供了两种输出方式:一是首先将条码输出到某一对象,再使用该对象中Print方法,将其输出到打印机;二是使用打印机对像Printer绘图。下面对这种方法做个比较: 一、将条形码图在窗体上绘出,再使用PrintForm方法打印窗体。窄条打印:Line(x,y)-step(i,h),bf宽条打印:Line(x,y)-step(3*i,h),bf或Line(x,y)-step(2*i,h),bf 再使用formname.PrintForm将条形码输出到打印机。 在这种方式下,窗体的量度单位可以有:twip,point,picel三种其中以twip为单位为最小。 以twip

5、为单位,对条形码来说,打印精度可达30,即当窄元素宽度必须等于或大于30时,打印出来的条形码可以阅读,若窄元素的宽度小于30,条形码中相邻的条会粘连在一起,无法识读。当窄元素宽度为30时,“J10059”六位字符条码尺寸为:67mm。 以Picel为单位,打印精度可达2,当窄元素宽度为2时,“J10059”六位字符条形码尺寸为80mm以上。 以Point为单位,打印精度可达2,当窄元素宽度为2时,J10059六位字符条形码尺寸为110MM。 二、直接使用Printer.Line,在打印机上绘画-画矩形框窄条打印:Printer.Line(x,y)-Step(i,h),bf宽条打印:Printe

6、r.Line(x,y)-Step(3*i,h),bf或Printer.Line(x,y)-Step(2*i,h),bf 用Printer.Line打印,量度单位为点,最小精度为达10,当窄元素宽为10时,J10059六位字符之条码尺寸为:21MM。 根据以上的比较,使用第二种方法打印输入的条形码精度最高(同样的字符数,尺寸最短)。很显然,不同的打印方式,分别有不同的适用范围,对尺寸宽度要求不高的情况下,可以使用第一种打印方式,若对条形码尺寸要求较严格,则使用第二种打印方式更合适。 软件设计 一、菜单设计:由于条形码轻印刷软件相对说来是一个很小的系统,需要选择的项目不多,可以不设置菜单,而将全部

7、的操作由窗体控件来完成。如果使用上述的第一种打印方式,则必须建立另一窗体,用于第一步的输出条形码图形。 二、设计窗体控件:窗体中的控件包括两大类,即:参数设置框、打印操作按钮。本列设计的窗体见图示。本列给出的是一个对参数没有设置功能的窗体,有兴趣的读者可以在此基础上自行补充它。 对于打印参数,对条形码的打印来说,需要指定的参数大致有:条码宽窄比:3:12:1;条码高;窄元素宽度;打印机类型及端口;打印份数;打印纸尺寸规格;每行条形码数;每个条码的字符数;是否自动增值打印;增值步长;每一页行计数起止数;终止码等。 本列设计了八个按钮,其作用分别是: Begin-单号条形码打印开始 Auto-自动

8、增值打印开始 Page-将打印机内存中的条码(不足一页)打印出来 Cancel-中止自动增值打印 Delete-清除打印机内存中的未打印条码 Help-帮助信息 About-版本及设计信息 Exit-关闭系统 三、程序流程: 在本例中,条形码的打印分为单号打印;自动增值打印两种。单号打印,是用户输入一个或几个需要打印的号码的打印方式;而自动增值打印是用户指定起始号、终止号及增加步长,由机器自动生成被打印号码来打印。其实这两种方式在打印时的操作是完全一样的,不同之处在于被打号码的获取,需要注意的是由于39码字符集中包括字符,在自动增值时要与纯数字码区别。 下面以单号打印为例,介绍条形码打印的程序

9、流程。 1检查各项参数设置是否完全正确,若正确,则继续,否则退出; 2获取各项参数设置; 3为X坐标取初值(纸的左边打印边界); 4(循环A)是否打印完一行(I条条码)?是则转14; 5本条条码是否为空?是则将横坐标加上一条条码之宽度; 6打印起始符; 7(循环B)是否打印完本条条码(J个字符)?是则转10; 8打印一个字符的条码; 9(循环B)下一个字符; 10打印终止符; 11修改X坐标; 12(循环A)下一条条码 13修改Y坐标; 14打印本行每一条码的人工识别字符; 15本页是否已打满?是则打印,并对新页坐标初始化; 16.退出 四、程序代码: 用于检查参数设置正确性的程序主要从各项参

10、数间的关系去检查。如根据使用的宽度、高度、每行条码数,判断是否超出了纸的打印范围;输入的号码是否合法等。 可以为每字符设计一段各自的打印程序,这种方式编程简单。也可以将打印程序与条形码的编码规则分离,通过参数传递某一字符的编码规则,不同的字符共享同一打印程序。本列采用前一种方式。如字母“J”的编码规则为:“NNNNWWWNN”,打印程序代码如下:PrivateSubprn_J()Printer.Line(x,y)-Step(widt,high),BF注释:打印窄条x=x+widt注释:改变X坐标x=x+widt注释:打印窄空Printer.Line(x,y)-Step(widt,high),B

11、Fx=x+widtx=x+widtPrinter.Line(x,y)-Step(w_n*widt,high),BF注释:打印宽条x=x+w_n*widt注释:改变X坐标x=x+w_n*widt注释:打印宽空Printer.Line(x,y)-Step(w_n*widt,high),BFx=x+w_n*widtx=x+widtPrinter.Line(x,y)-Step(widt,high),BFx=x+widtx=x+widt注释:打印位空EndSub 其中x,y分别为坐标值,w_n为宽窄元素宽度比,widt为窄元素的宽度值(点),high为条形码高度,每打印一个条元素,应立即改变X坐标,以便

12、打印下一个元素;打印空元素时,由于是不着色,只需改变X坐标即可;每一个字符打印结束时,应打印一个位空(本列中位空宽度等于窄空)。其它的42个字符的编码规则,读者可以在有关条形码技术的文献中查到。VB条形码编程实例条形码技术广泛应用于各行各业,你随便拿起一本书、一包薯片都可以在外包装上找到,利用条码读取机便可将这一条条黑白相间、粗细不同的垂直线条识别而转换为具体的数值,并将这个数值返回到计算机中进行处理。正是这样,有了条形码技术,人们很方便就能取得该商品的有关信息如商品名称、规格、价格等,因为每种商品都有其对应的条形码,这个条形码计算机(终端、服务器)中就可以迅速返回用户,从数据库中读取约定的商

13、品,信息使得销售、进货、存货等等管理更有效率,也对防止假冒伪劣又一定的抑制作用。条码的编码方式有多种,不同行业,不同国家标准也不尽相同。条形码通过线条的粗细来表达其数值。至于接口方式一般也有多种,如键盘口的、串行口的。一般传感装置是光罩式的,也有笔式的。上面笼笼统统地谈了一些关于条形码的知识,可帮助你更好地阅读以下更深入的内容。条形码有关概念先说到这里,接着是详细具体的编程实现方法。一、条形码的读取用过键盘口式的扫条码工具的朋友就知道,它就如同在鍵盘上按下数字鍵一样,基本不需任何编程和处理。但如果你使用的是其它接口的话,可能你就要为该设备编写通讯代码了。以下有一段简单的25针串口的条码读取器通

14、讯代码。OptionExplicitDimsDataAsStringPrivateSubForm_Load()WithMSComm1.CommPort=3设为COM3,试运行的系统而定,你可提供一个Combox让用户选择。.PortOpen=True打开通讯端口EndWithEndSubPrivateSubMSComm1_OnComm()DimEndPosAsIntegerSelectCaseMSComm1.CommEventCasecomEvReceive当有数据传送过来时sData=sData&Trim(MSComm1.Input)检索回车,通常读卡机每组数据結尾都返回一个回车作为结束符E

15、ndPos=InStr(1,sData,Chr(13)IfEndPos=0Then如果未结束就继续努力Else读完一组。lblBarCode.Caption=sData显示一组条形码WithlstBarCode.AddItemMid(sData,1,EndPos-1)添加一组条形码到列表EndWithsData=清空EndIfEndSelectEndSubPrivateSubcmdEnd_Click()MSComm1.PortOpen=False关闭端口EndEndSub二、条形码的生成看完以上关于条码读取的代码是否觉得很容易呢?对,在VB上编程本来就不难。以下关于条形码生成的代码也是很容易理

16、解,只需使用一个OFFICE的附带的BarCode控件就可以轻松打印出11种不同标准的条形码,足以满足我们的要求。想起我书架上的一本书中的一篇用TurboC编写条形码打印程序文章,长篇大论,那时不知看了n天,打了n小时字结果也不尽人意,现在真是幸福多了:)。废话说完,得回归正题。且看条形码生成的代码及有关说明。源代码主要由两个窗体(frmMain主窗体和frmOption条码设置窗体)和两个模块组成(modGetScreen.bas、SysDLG32.bas)。考虑到篇幅,这里只列出部分较为关键的代码。新建一个标准工程,添加一个名为(MicrosoftAccessBarCodeControl9

17、)的条形码部件,并添加一个条码控件到窗口,并将窗口改名为frmMain,如图所示。由于控件比较多,这里不便细说,详细内容请看源代码。模块modGetScreen.bas代码如下:OptionExplicit声明BitBlt、GetDesktopWindow、GetWindowDC、ReleaseDC这几个API函数略PublicRegUserAsBooleanSubGetObjImage1(ObjAsObject,OwnerFormAsPictureBox,Picture1AsPictureBox)hDCDimhWndDeskAsLongDimhDCDeskAsLong区域表达变量DimxAs

18、LongDimyAsLongDimwAsLongDimhAsLongx=Obj.LeftScreen.TwipsPerPixelXy=Obj.TopScreen.TwipsPerPixelYw=Obj.WidthScreen.TwipsPerPixelXh=Obj.HeightScreen.TwipsPerPixelYhDCDesk=OwnerForm.hdc取出图像CallBitBlt(Picture1.hdc,0,0,w,h,hDCDesk,x,y,vbSrcCopy)CallReleaseDC(hWndDesk,hDCDesk)EndSub主窗体frmMain.frm部分代码如下:Pri

19、vateSubcmdPrint_Click()生成条形码图像DimrAsLong,iAsInteger,tAsString,cfileAsString临时变量t=BarCodeFori=0ToVal(Times)-1BarCode1.Value=BarCode+iDoEventsPicture1.RefreshGetObjImage1BarCode1,Conel,Picture1IfRegUser=FalseThen如果未注册添加MASK标记Picture1.PaintPicturePicture2.Picture,300,300EndIfIfDir(SavePath,vbDirectory)

20、=ThenMkDirSavePathSavePath=SavePath&IIf(Right(SavePath,1),)cfile=SavePath&BarCode1.Value&.bmpSavePicturePicture1.Image,cfile将条形码保存为图像文件以便打印NextBarCode=tEndSub条形码设置窗体frmOption.frm代码如下:OptionExplicit条形码设置模块PrivateSubcboBig_Click()BarCode1.Style=cboBig.ListIndex改变标准EndSubPrivateSubcboDirection_Click()B

21、arCode1.Direction=cboDirection.ListIndex改变方向EndSubPrivateSubcboLine_Click()BarCode1.LineWeight=cboLine.ListIndex改变线宽EndSubPrivateSubcboSmall_Click()BarCode1.SubStyle=cboSmall.ListIndex改变样式EndSubPrivateSubCheck1_Click()BarCode1.ShowData=Check1.Value是否显示数据EndSubPrivateSubcmdChange_Click()设置长、宽大小BarWid

22、th=BarCode1.HeightBarHeight=BarCode1.WidthcmdRefresh_ClickEndSubPrivateSubcmdOK_Click()传送条形码设定到主界面WithfrmMain.BarCode1.LineWeight=BarCode1.LineWeight.Style=BarCode1.Style.SubStyle=BarCode1.SubStyle.Direction=BarCode1.Direction.Width=BarCode1.Width.Height=BarCode1.Height.ShowData=BarCode1.ShowDataMe.

23、HideEndWithWithfrmMain.Picture1.Width=.BarCode1.Width.Picture1.Height=.BarCode1.Height.Conel.Width=.BarCode1.Width.Conel.Height=.BarCode1.HeightEndWithEndSubPrivateSubcmdRefresh_Click()BarCode1.Width=BarWidthBarCode1.Height=BarHeightEndSubPrivateSubForm_Load()LoadBarInfoBarWidth=BarCode1.WidthBarHei

24、ght=BarCode1.HeightEndSubSubLoadBarInfo()初始化选项LoadBigClasscboBigLoadSmallClasscboSmallLoadLineSizecboLineLoadDirectioncboDirectionEndSubSubLoadBigClass(cboAsComboBox)条码标准Withcbo.AddItemUPC-A.AddItemUPC-E.AddItemEAN-13.AddItemEAN-8.AddItemCaseCode.AddItemCodabar(NW-T).AddItemCode-39.AddItemCode-128.A

25、ddItemU.S.Postnet.AddItemU.S.PostalFIM.AddItemJPPost.ListIndex=2EndWithEndSubSubLoadSmallClass(cboAsComboBox)条码样式Withcbo.AddItemStandard.AddItem2-DigitSupplement.AddItem5-DigitSupplement.AddItemPOSCaseCode.ListIndex=0EndWithEndSub许多人在编写数据库应用程序时,都想要加上条形码功能加强工作效率,尤其是销售管理,图书馆管理这类流量大的应用软件,但由于条形码技术难以掌握、标

26、谁又多以及过去的技术种种原因,使得许多人望而却步。本文介绍的一套简单实用的条形码解决方法,希望能帮助各位完善软件系统的功能。VB应用程序中打印条形码的两种方法条形码作为一种机器可识别的图形,它能快速、准确地标识某种产品或商品,在许多数据库应用中起作很重要的作用,如超市收银、车站售票等场合。当某件物品上带有的条形码被条码扫描器正确解读后,将会得到该物品的唯一标识字符串,通过检索数据库我们就可以很容易知道它的一些其它属性并作相应处理。虽然在Internet上能找到许多免费和不免费的条形码打印控件,但是这些控件除了使用不方便外,还有一个最大的缺点:它们的打印输出不能和我们的程序共存在一个打印页面上,

27、比如说在一个过程中,我们先向系统Printer中输出一些内容,然后再调用控件的条形码打印方法,最后打印的结果为两页!,如果现在我们要处理一张车票,上面不仅要打印条形码,还要有终点站和票价等信息,那么控件就变得不可用。对程序员来说,可能还是希望能了解条形码打印的原理,本文提出两种打印方法与同行们探讨。一、直接利用有条形码打印功能的打印机有许多打印机能够直接打印条形码,但在VB中,我们在时代熟悉的LPRINT语句已经不能再使用了,打印操作被Windows的Spool系统完全接管,输出是以“页”为单位,所有的打印输出都被Windows转换为图形发送给打印驱动程序。而要使打印机打印条形码就必须将对应的

28、ESC序列直接发送给它,因此我们就要想办法避开Windows的Spool系统,也就是说再程序中不能使用Printer对象和Printers集合处理打印输出,在VB中要将ESC指令直接发送给打印机至少有三种方法,前两种方法是调用WindowsAPI函数:Escape()和SpoolFile(),第三种是最容易的方法:打开打印机端口进行二进制存取,我们主要考虑这种方法。即使在Windows时代,”LPT1:”和”PRN”仍然是可用的,下面我们先作一个试验:打开一个DOS窗口,在提示符下输入COPYCONLPT1:回车,然后随便输入一些字符,最后按F6键,打印机就开始工作了,它将打印出你输入的那些字

29、符!下面的代码演示了直接将指令和字符发送给打印机:PrivateSubCommand1_Click()DimstrOutAsStringStrOut=“这是直接发送到打印机端口的字符串”打开打印机端口,其中的”LPT1:”可能需要根据你的打印机设置而改变Open“LPT1:”ForBinaryAccessWriteAs#1发送给打印机,注意语句的最后一个参数必须是变量Put#1,strOut关闭打印机端口Close#1EndSub各种打印机打印条形码的指令可能不同,比如将上面的变量strOut赋值为:strOut=Chr(28)&“P”&Chr(5)&Chr(2)&Chr(3)&Chr(3)&

30、Chr(6)&“012345”将在AR2400打印机上打印出内容为”012345”的CODE39格式的条形码。具体的打印控制指令请参考打印机手册。用这种方法的缺点:一是过份依赖打印机本身,而有条形码打印功能的打印机通常要比普通打印机昂贵,这会使构造应用系统不够经济;二是所有的打印输出都必须你自己处理,比如打印定位就很浪费时间。二、利用画图方式输出到普通打印机条形码的编码规则不外乎是通过线条和线条间间隙的宽窄不同来表示二进制的和,只要我们了解了条形码的编码规则,完全可以用画图的方式在普通打印机上得到可以接受的效果。下面我们就使用最普遍的CODE39码进行讨论。CODE39码的编码规则是:、每五条线表示一个字符;、粗线表示,细线表示;、线条间的间隙宽的表示,窄的表示;、五条线加上它们之间的四条间隙就是九位二进制编码,而且这九位中必定有三位是1,所以称为39码;、条形码的首尾各一个标识开始和结束在我们的程序中,给常用的字符都进行编码,解读时先取线条粗细,再取间隙宽窄,如:上图中的字符就可以解读为001101000,字符解读为110000100下面就是我们给出的子过程:将字符串strBarCode对应的条形码

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2