两步精通VB.NET条形码编程

开发 后端
在我们的VB.NET项目中,经常会遇到涉及到条形码编程的问题,VB.NET条形码编程是很多程序员比较困惑的事,究竟什么是条形码,如何在VB.NET中进行条形码编程?本文也许会给你一个答案。

现在的商品包装、超市收银等很多位置都会出现条形码,在我们的VB.NET项目中也经常会遇到涉及到VB.NET条形码编程的工作,这里从条形码的应用和原理出发,向大家介绍如何进行VB.NET的条形码编程。

条形码技术广泛应用于各行各业,你随便拿起一本书、一包薯片都可以在外包装上找到,利用条码读取机便可将这一条条黑白相间、粗细不同的垂直线条识别而转换为具体的数值,并将这个数值返回到计算机中进行处理。正是这样,有了条形码技术,人们很方便就能取得该商品的有关信息如商品名称、规格、价格等,因为每种商品都有其对应的条形码,这个条形码计算机(终端、服务器)中就可以迅速返回用户,从数据库中读取约定的商品,信息使得销售、进货、存货等等管理更有效率,也对防止假冒伪劣又一定的抑制作用。

条码的编码方式有多种,不同行业,不同国家标准也不尽相同。条形码通过线条的粗细来表达其数值。至于接口方式一般也有多种,如键盘口的、串行口的。一般传感装置是光罩式的,也有笔式的。
上面笼笼统统地谈了一些关于条形码的知识,可帮助你更好地阅读以下更深入的内容。条形码有关概念先说到这里,接着是详细具体的编程实现方法。

一、VB.NET条形码编程中的读取

用过键盘口式的扫条码工具的朋友就知道,它就如同在鍵盘上按下数字鍵一样,基本不需任何编程和处理。但如果你使用的是其它接口的话,可能你就要为该设备编写通讯代码了。以下有一段简单的25针串口的条码读取器通讯代码。

  1. Option Explicit  
  2. Dim sData As String 
  3. Private Sub Form_Load()  
  4. With MSComm1   
  5.    .CommPort = 3 '设为COM3,试运行的系统而定,你可提供一个Combox让用户选择。  
  6.    .PortOpen = True '打开通讯端口  
  7. End With 
  8. End Sub 
  9.     
  10. Private Sub MSComm1_OnComm()  
  11.     
  12.   Dim EndPos As Integer 
  13.   Select Case MSComm1.CommEvent  
  14.     Case comEvReceive '当有数据传送过来时  
  15.       sData = sData & Trim(MSComm1.Input)  
  16.       '检索回车,通常读卡机每组数据結尾都返回一个回车作为结束符  
  17.       EndPos = InStr(1, sData, Chr(13))  
  18.       If EndPos = 0 Then '如果未结束就继续努力  
  19.       Else '读完一组。  
  20.         lblBarCode.Caption = sData '显示一组条形码  
  21.         With lstBarCode  
  22.           .AddItem Mid(sData, 1, EndPos - 1) '添加一组条形码到列表  
  23.         End With 
  24.         sData = "" '清空  
  25.       End If 
  26.   End Select 
  27. End Sub 
  28.  
  29.        
  30. Private Sub cmdEnd_Click()  
  31.   MSComm1.PortOpen = False '关闭端口  
  32.   End 
  33. End Sub 

二、VB.NET条形码编程中的生成

看完以上关于条码读取的代码是否觉得很容易呢?对,在VB上编程本来就不难。以下关于条形码生成的代码也是很容易理解,只需使用一个OFFICE的附带的BarCode控件就可以轻松打印出11种不同标准的条形码,足以满足我们的要求。想起我书架上的一本书中的一篇用Turbo C编写条形码打印程序文章,长篇大论,那时不知看了n天,打了n小时字结果也不尽人意,现在真是幸福多了:)。废话说完,得回归正题。且看条形码生成的代码及有关说明。

源代码主要由两个窗体(frmMain主窗体和frmOption条码设置窗体)和两个模块组成
(modGetScreen.bas、SysDLG32.bas)。考虑到篇幅,这里只列出部分较为关键的代码。#p#

新建一个标准工程,添加一个名为(Microsoft Access BarCode Control9)的条形码部件,并添加一个条码控件到窗口,并将窗口改名为frmMain,如图所示。由于控件比较多,这里不便细说,详细内容请看源代码。

模块modGetScreen.bas代码如下:

Option Explicit

声明BitBlt、GetDesktopWindow、GetWindowDC、ReleaseDC这几个API函数略

  1. Public RegUser As Boolean    
  2. Sub GetObjImage1(Obj As Object, OwnerForm As PictureBox, Picture1 As PictureBox)  
  3.   'hDC  
  4.   Dim hWndDesk As Long 
  5.   Dim hDCDesk As Long 
  6.   '区域表达变量  
  7.   Dim x As Long 
  8.   Dim y As Long 
  9.   Dim w As Long 
  10.   Dim h As Long 
  11.        
  12.   x = Obj.Left  Screen.TwipsPerPixelX  
  13.   y = Obj.Top  Screen.TwipsPerPixelY  
  14.   w = Obj.Width  Screen.TwipsPerPixelX  
  15.   h = Obj.Height  Screen.TwipsPerPixelY  
  16.   hDCDesk = OwnerForm.hdc  
  17.   '取出图像  
  18.   Call BitBlt(Picture1.hdc, 0, 0, w, h, hDCDesk, x, y, vbSrcCopy)  
  19.   Call ReleaseDC(hWndDesk, hDCDesk)  
  20.        
  21. End Sub 

主窗体frmMain.frm部分代码如下:

  1. Private Sub cmdPrint_Click()  
  2. '生成条形码图像  
  3.   Dim r As Long, i As Integer, t As String,cfile As String '临时变量  
  4.   t = BarCode  
  5.   For i = 0 To Val(Times) - 1  
  6.       
  7.     BarCode1.Value = BarCode + i  
  8.     DoEvents   
  9.     Picture1.Refresh  
  10.      
  11.     GetObjImage1 BarCode1, Conel, Picture1  
  12.       
  13.     If RegUser = False Then '如果未注册添加MASK标记  
  14.       Picture1.PaintPicture Picture2.Picture, 300, 300  
  15.     End If 
  16.       
  17.     If Dir(SavePath, vbDirectory) = "" Then MkDir SavePath  
  18.       
  19.     SavePath = SavePath & IIf(Right(SavePath, 1) <> """""")  
  20.       
  21.     cfile = SavePath & BarCode1.Value & ".bmp" 
  22.  
  23.     SavePicture Picture1.Image, cfile '将条形码保存为图像文件以便打印  
  24.   Next 
  25.   BarCode = t  
  26.        
  27. End Sub 

条形码设置窗体frmOption.frm代码如下:

Option Explicit

'条形码设置模块

  1. Private Sub cboBig_Click()  
  2.   BarCode1.Style = cboBig.ListIndex '改变标准  
  3. End Sub 
  4.  
  5.        
  6. Private Sub cboDirection_Click()  
  7.   BarCode1.Direction = cboDirection.ListIndex '改变方向  
  8. End Sub 
  9.  
  10.        
  11. Private Sub cboLine_Click()  
  12.   BarCode1.LineWeight = cboLine.ListIndex '改变线宽  
  13. End Sub 
  14.  
  15.        
  16. Private Sub cboSmall_Click()  
  17.   BarCode1.SubStyle = cboSmall.ListIndex '改变样式  
  18. End Sub 
  19.  
  20.        
  21. Private Sub Check1_Click()  
  22.   BarCode1.ShowData = Check1.Value '是否显示数据  
  23. End Sub 
  24.  
  25.        
  26. Private Sub cmdChange_Click()  
  27. '设置长、宽大小  
  28. BarWidth = BarCode1.Height  
  29. BarHeight = BarCode1.Width  
  30. cmdRefresh_Click  
  31. End Sub 
  32.  
  33.        
  34. Private Sub cmdOK_Click()  
  35. '传送条形码设定到主界面  
  36.   With frmMain.BarCode1  
  37.     .LineWeight = BarCode1.LineWeight  
  38.     .Style = BarCode1.Style  
  39.     .SubStyle = BarCode1.SubStyle  
  40.     .Direction = BarCode1.Direction  
  41.     .Width = BarCode1.Width  
  42.     .Height = BarCode1.Height  
  43.     .ShowData = BarCode1.ShowData  
  44.     Me.Hide  
  45.   End With 
  46.   With frmMain  
  47.     .Picture1.Width = .BarCode1.Width  
  48.     .Picture1.Height = .BarCode1.Height  
  49.     .Conel.Width = .BarCode1.Width  
  50.     .Conel.Height = .BarCode1.Height  
  51.   End With 
  52. End Sub 
  53.  
  54.        
  55. Private Sub cmdRefresh_Click()  
  56.   BarCode1.Width = BarWidth  
  57.   BarCode1.Height = BarHeight  
  58. End Sub 
  59.  
  60.        
  61. Private Sub Form_Load()  
  62. LoadBarInfo  
  63. BarWidth = BarCode1.Width  
  64. BarHeight = BarCode1.Height  
  65. End Sub 
  66.  
  67.        
  68. Sub LoadBarInfo() '初始化选项  
  69. LoadBigClass cboBig  
  70. LoadSmallClass cboSmall  
  71. LoadLineSize cboLine  
  72. LoadDirection cboDirection  
  73. End Sub 
  74. Sub LoadBigClass(cbo As ComboBox) '条码标准  
  75.   With cbo  
  76.     .AddItem "UPC-A" 
  77.     .AddItem "UPC-E" 
  78.     .AddItem "EAN-13" 
  79.     .AddItem "EAN-8" 
  80.     .AddItem "Case Code" 
  81.     .AddItem "Codabar (NW-T)" 
  82.     .AddItem "Code-39" 
  83.     .AddItem "Code-128" 
  84.     .AddItem "U.S. Postnet" 
  85.     .AddItem "U.S. Postal FIM" 
  86.     .AddItem "JP Post" 
  87.     .ListIndex = 2  
  88.   End With 
  89. End Sub 
  90. Sub LoadSmallClass(cbo As ComboBox) '条码样式  
  91.   With cbo  
  92.     .AddItem "Standard" 
  93.     .AddItem "2-Digit Supplement" 
  94.     .AddItem "5-Digit Supplement" 
  95.     .AddItem "POS Case Code" 
  96.     .ListIndex = 0  
  97.   End With 
  98.  
  99. End Sub 

许多人在编写数据库应用程序时,都想要加上条形码功能加强工作效率,尤其是销售管理,图书馆管理这类流量大的应用软件,但由于条形码技术难以掌握、标谁又多以及过去的技术种种原因,使得许多人望而却步。本文介绍的一套简单实用的条形码解决方法,希望能帮助各位完善软件系统的功能。

 

【编辑推荐】

  1. 浅谈VB.NET语言与.NET开发语言关系
  2. 浅析VB.NET语言到底带来了什么
  3. 讲解VB.NET语言学习经验
  4. 简单讲述VB.NET多重继承
  5. VB.NET调用Window API经验总结
责任编辑:佚名 来源: IT传媒网
相关推荐

2009-11-03 13:02:28

VB.NET Wind

2011-07-07 16:53:56

iOS 条形码扫描

2009-10-21 16:40:43

Oracle用户表空间

2009-10-20 09:42:16

VB.NET编程

2012-06-14 13:09:50

PHP

2009-10-28 15:38:30

VB.NET网络

2009-10-23 17:03:18

VB.NET事件编程

2015-10-28 13:33:50

二维码条形码扫描源码

2023-08-15 19:24:37

Python条形码

2009-11-02 15:16:07

VB.NET编程

2009-11-10 13:08:13

VB.NET编程技巧

2010-01-14 17:11:17

VB.NET枚举

2009-10-14 15:34:29

VB.NET窗体编程模

2009-11-02 15:08:58

VB.NET Obje

2009-10-21 09:46:13

VB使用ArrayLi

2009-10-30 13:12:40

VB.NET创建类

2012-03-19 09:16:02

JavajZebra

2009-11-02 14:55:52

VB.NET Obje

2009-11-10 15:30:46

VB.NET编程原则

2009-10-29 11:41:27

VB.NET写Obje
点赞
收藏

51CTO技术栈公众号