| 加入桌面 | 手机?/a> | 无图?/a>
 
当前位置: 首页 » 知识 » 条码知识 » 正文

c语言条形码的输入

已解决 悬赏分:0 - 解决时间 2007-03-29 01:07
请问高手在c语言中如何输入条形码?
比如图书馆借书时扫描仪扫描书的条形码,用c语言怎么编写啊?
78 次关注     提问者: rgdxyy  
  支持(0)  |   反对(0) 最佳答案
一、条形码的读取
用过键盘口式的扫条码工具的朋友就知道,它就如同在键盘上按下数字键一样,基本不需任何编程和处理。但如果你使用的是其它接口的话,可能你就要为该设备编写通讯代码了。以下有一段简单的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


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


[ 知识搜索 ]  [ ]  [ 告诉好友 ]  [ 打印本文 ]  [ 关闭窗口 ]

 
问题搜索
     
相关问题
等待您来回答
 
 
Powered by 0512IT
购物车(0)    站内信(0)     新对话(0)