條形碼技術廣泛應用于各行各業,你隨便拿起一本書、一包薯片都可以在外包裝上找到,利用條碼讀取機便可將這一條條黑白相間、粗細不同的垂直線條識別而轉換為具體的數值,并將這個數值返回到計算機中進行處理。
正是有了條形碼技術,人們很方便就能取得該商品的有關信息,如商品名稱、規格、價格等,因為每種商品都有其對應的條形碼。通過條形碼,計算機(終端、服務器)就可以迅速返回用戶,從數據庫中讀取約定的商品、信息使得銷售、進貨、存貨等等管理更有效率,也對防止假冒偽劣有一定的抑制作用。
條碼的編碼方式有多種,不同行業,不同國家,標準也不盡相同。條形碼通過線條的粗細來表達其數值。至于接口方式一般也有多種,如鍵盤口的、串行口的。一般傳感裝置是光罩式的,也有筆式的。 上面籠籠統統地談了一些關于條形碼的知識,可幫助你更好地閱讀以下更深入的內容。條形碼有關概念先說到這里,接著是詳細具體的編程實現方法。
一、條形碼的讀取
用過鍵盤口式的掃條碼工具的朋友就知道,它就如同在鍵盤上按下數字鍵一樣,基本不需任何編程和處理。但如果你使用的是其它接口的話,可能你就要為該設備編寫通訊代碼了。以下有一段簡單的25針串口的條碼讀取器通訊代碼。
OptionExplicit
DimsDataAsString
PrivateSubForm_Load()
WithMSComm1
.CommPort=3'設為COM3,試運行的系統而定,你可提供一個Combox讓用戶選擇。
.PortOpen=True '打開通訊端口
EndWith
EndSub
PrivateSubMSComm1_OnComm()
DimEndPosAsInteger
SelectCaseMSComm1.CommEvent
CasecomEvReceive'當有數據傳送過來時
sData=sData&Trim(MSComm1.Input)
'檢索回車,通常讀卡機每組數據結尾都返回一個回車作為結束符
EndPos=InStr(1,sData,Chr(13))
IfEndPos=0Then'如果未結束就繼續努力
Else'讀完一組。
lblBarCode.Caption=sData'顯示一組條形碼
WithlstBarCode
.AddItemMid(sData,1,EndPos-1)'添加一組條形碼到列表
EndWith
sData=""'清空
EndIf
EndSelect
EndSub
PrivateSubcmdEnd_Click()
MSComm1.PortOpen=False'關閉端口
End
EndSub
二、條形碼的生成
看完以上關于條碼讀取的代碼是否覺得很容易呢?對,在VB上編程本來就不難。以下關于條形碼生成的代碼也是很容易理解,只需使用一個OFFICE的附帶的BarCode控件就可以輕松打印出11種不同標準的條形碼,足以滿足我們的要求。
想起我書架上的一本書中的一篇用TurboC編寫條形碼打印程序文章,長篇大論,那時不知看了n天,打了n小時字結果也不盡人意,現在真是幸福多了:)。廢話說完,得回歸正題。且看條形碼生成的代碼及有關說明。
源代碼主要由兩個窗體(frmMain主窗體和frmOption條碼設置窗體)和兩個模塊組成(modGetScreen.bas、SysDLG32.bas)。考慮到篇幅,這里只列出部分較為關鍵的代碼。
新建一個標準工程,添加一個名為(MicrosoftAccessBarCodeControl9)的條形碼部件,并添加一個條碼控件到窗口,并將窗口改名為frmMain。由于控件比較多,這里不便細說,詳細內容請看源代碼。
模塊modGetScreen.bas代碼如下:
OptionExplicit
聲明BitBlt、GetDesktopWindow、GetWindowDC、ReleaseDC這幾個API函數略
PublicRegUserAsBoolean
SubGetObjImage1(ObjAsObject,OwnerFormAsPictureBox,Picture1AsPictureBox)
'hDC
DimhWndDeskAsLong
DimhDCDeskAsLong
'區域表達變量
DimxAsLong
DimyAsLong
DimwAsLong
DimhAsLong
x=Obj.LeftScreen.TwipsPerPixelX
y=Obj.TopScreen.TwipsPerPixelY
w=Obj.WidthScreen.TwipsPerPixelX
h=Obj.HeightScreen.TwipsPerPixelY
hDCDesk=OwnerForm.hdc
'取出圖像
CallBitBlt(Picture1.hdc,0,0,w,h,hDCDesk,x,y,vbSrcCopy)
CallReleaseDC(hWndDesk,hDCDesk)
EndSub
主窗體frmMain.frm部分代碼如下:
PrivateSubcmdPrint_Click()
'生成條形碼圖像
DimrAsLong,iAsInteger,tAsString,cfileAsString'臨時變量
t=BarCode
Fori=0ToVal(Times)-1
BarCode1.Value=BarCode i
DoEvents
Picture1.Refresh
GetObjImage1BarCode1,Conel,Picture1
IfRegUser=FalseThen'如果未注冊添加MASK標記
Picture1.PaintPicturePicture2.Picture,300,300
EndIf
IfDir(SavePath,vbDirectory)=""ThenMkDirSavePath
SavePath=SavePath&IIf(Right(SavePath,1)<>"","","")
cfile=SavePath&BarCode1.Value&".bmp"
SavePicturePicture1.Image,cfile'將條形碼保存為圖像文件以便打印
Next
BarCode=t
EndSub
條形碼設置窗體frmOption.frm代碼如下:
OptionExplicit
'條形碼設置模塊
PrivateSubcboBig_Click()
BarCode1.Style=cboBig.ListIndex'改變標準
EndSub
PrivateSubcboDirection_Click()
BarCode1.Direction=cboDirection.ListIndex'改變方向
EndSub
PrivateSubcboLine_Click()
BarCode1.LineWeight=cboLine.ListIndex'改變線寬
EndSub
PrivateSubcboSmall_Click()
BarCode1.SubStyle=cboSmall.ListIndex'改變樣式
EndSub
PrivateSubCheck1_Click()
BarCode1.ShowData=Check1.Value'是否顯示數據
EndSub
PrivateSubcmdChange_Click()
'設置長、寬大小
BarWidth=BarCode1.Height
BarHeight=BarCode1.Width
cmdRefresh_Click
EndSub
PrivateSubcmdOK_Click()
'傳送條形碼設定到主界面
WithfrmMain.BarCode1
.LineWeight=BarCode1.LineWeight
.Style=BarCode1.Style
.SubStyle=BarCode1.SubStyle
.Direction=BarCode1.Direction
.Width=BarCode1.Width
.Height=BarCode1.Height
.ShowData=BarCode1.ShowData
Me.Hide
EndWith
WithfrmMain
.Picture1.Width=.BarCode1.Width
.Picture1.Height=.BarCode1.Height
.Conel.Width=.BarCode1.Width
.Conel.Height=.BarCode1.Height
EndWith
EndSub
PrivateSubcmdRefresh_Click()
BarCode1.Width=BarWidth
BarCode1.Height=BarHeight
EndSub
PrivateSubForm_Load()
LoadBarInfo
BarWidth=BarCode1.Width
BarHeight=BarCode1.Height
EndSub
SubLoadBarInfo()'初始化選項
LoadBigClasscboBig
LoadSmallClasscboSmall
LoadLineSizecboLine
LoadDirectioncboDirection
EndSub
SubLoadBigClass(cboAsComboBox)'條碼標準
Withcbo
.AddItem"UPC-A"
.AddItem"UPC-E"
.AddItem"EAN-13"
.AddItem"EAN-8"
.AddItem"CaseCode"
.AddItem"Codabar(NW-T)"
.AddItem"Code-39"
.AddItem"Code-128"
.AddItem"U.S.Postnet"
.AddItem"U.S.PostalFIM"
.AddItem"JPPost"
.ListIndex=2
EndWith
EndSub
SubLoadSmallClass(cboAsComboBox)'條碼樣式
Withcbo
.AddItem"Standard"
.AddItem"2-DigitSupplement"
.AddItem"5-DigitSupplement"
.AddItem"POSCaseCode"
.ListIndex=0
EndWith
EndSub





