vb60條形碼源碼
1、vb實現一維條形碼例子
EAN是比較好實現的碼制,用微軟自帶的就可以,或者下載個EAN的條碼字體即可在一般的text中處理。連接ACCESS資料庫,因為是自己寫的程序,直連取記錄集,然後在記錄集中循環取值給條碼控制項,同時刷新控制項即可。你這個關鍵在於列印,用print 截屏即可 這樣最簡單。
2、VB 識別條形碼
一、條形碼的讀取
用過鍵盤口式的掃條碼工具的朋友就知道,它就如同在鍵盤上按下數字鍵一樣,基本不需任何編程和處理。但如果你使用的是其它介面的話,可能你就要為該設備編寫通訊代碼了。以下有一段簡單的25針串口的條碼讀取器通訊代碼。
Option Explicit
Dim sData As String
Private Sub Form_Load()
With MSComm1
.CommPort = 3 '設為COM3,試運行的系統而定,你可提供一個Combox讓用戶選擇。
.PortOpen = True '打開通訊埠
End With
End Sub
Private Sub MSComm1_OnComm()
Dim EndPos As Integer
Select Case MSComm1.CommEvent
Case comEvReceive '當有數據傳送過來時
sData = sData & Trim(MSComm1.Input)
'檢索回車,通常讀卡機每組數據結尾都返回一個回車作為結束符
EndPos = InStr(1, sData, Chr(13))
If EndPos = 0 Then '如果未結束就繼續努力
Else '讀完一組。
lblBarCode.Caption = sData '顯示一組條形碼
With lstBarCode
.AddItem Mid(sData, 1, EndPos - 1) '添加一組條形碼到列表
End With
sData = "" '清空
End If
End Select
End Sub
Private Sub cmdEnd_Click()
MSComm1.PortOpen = False '關閉埠
End
End Sub
二:條形碼的生成
在VB上編程本來就不難。以下關於條形碼生成的代碼也是很容易理解,只需使用一個OFFICE的附帶的 BarCode控制項就可以輕松列印出11種不同標準的條形碼,足以滿足我們的要求。想起我書架上的一本書中的一篇用Turbo C編寫條形碼列印程序文章,長篇大論,那時不知看了n天,打了n小時字結果也不盡人意,現在真是幸福多了:)。廢話說完,得回歸正題。且看條形碼生成的代碼及有關說明。
源代碼主要由兩個窗體(frmMain主窗體和frmOption條碼設置窗體)和兩個模塊組成(modGetScreen.bas、SysDLG32.bas)。考慮到篇幅,這里只列出部分較為關鍵的代碼。
新建一個標准工程,添加一個名為(Microsoft Access BarCode
Control9)的條形碼部件,並添加一個條碼控制項到窗口,並將窗口改名為frmMain,如圖所示。由於控制項比較多,這里不便細說,詳細內容請看源代碼。
模塊modGetScreen.bas代碼如下:
Option Explicit
聲明BitBlt、GetDesktopWindow、GetWindowDC、ReleaseDC這幾個API函數略
Public RegUser As Boolean
Sub GetObjImage1(Obj As Object, OwnerForm As PictureBox, Picture1
As PictureBox)
'hDC
Dim hWndDesk As Long
Dim hDCDesk As Long
'區域表達變數
Dim x As Long
Dim y As Long
Dim w As Long
Dim h As Long
x = Obj.Left Screen.TwipsPerPixelX
y = Obj.Top Screen.TwipsPerPixelY
w = Obj.Width Screen.TwipsPerPixelX
h = Obj.Height Screen.TwipsPerPixelY
hDCDesk = OwnerForm.hdc
'取出圖像
Call BitBlt(Picture1.hdc, 0, 0, w, h, hDCDesk, x, y,
vbSrcCopy)
Call ReleaseDC(hWndDesk, hDCDesk)
End Sub
主窗體frmMain.frm部分代碼如下:
Private Sub cmdPrint_Click()
'生成條形碼圖像
Dim r As Long, i As Integer, t As String,cfile As
String '臨時變數
t = BarCode
For i = 0 To Val(Times) - 1
BarCode1.Value = BarCode + i
DoEvents
Picture1.Refresh
GetObjImage1 BarCode1, Conel, Picture1
If RegUser = False Then '如果未注冊添加MASK標記
Picture1.PaintPicture Picture2.Picture, 300, 300
End If
If Dir(SavePath, vbDirectory) = "" Then MkDir SavePath
SavePath = SavePath & IIf(Right(SavePath, 1) <> "", "",
"")
cfile = SavePath & BarCode1.Value & ".bmp"
SavePicture Picture1.Image, cfile '將條形碼保存為圖像文件以便列印
Next
BarCode = t
End Sub
條形碼設置窗體frmOption.frm代碼如下:
Option Explicit
'條形碼設置模塊
Private Sub cboBig_Click()
BarCode1.Style = cboBig.ListIndex '改變標准
End Sub
Private Sub cboDirection_Click()
BarCode1.Direction = cboDirection.ListIndex '改變方向
End Sub
Private Sub cboLine_Click()
BarCode1.LineWeight = cboLine.ListIndex '改變線寬
End Sub
Private Sub cboSmall_Click()
BarCode1.SubStyle = cboSmall.ListIndex '改變樣式
End Sub
Private Sub Check1_Click()
BarCode1.ShowData = Check1.Value '是否顯示數據
End Sub
Private Sub cmdChange_Click()
'設置長、寬大小
BarWidth = BarCode1.Height
BarHeight = BarCode1.Width
cmdRefresh_Click
End Sub
Private Sub cmdOK_Click()
'傳送條形碼設定到主界面
With frmMain.BarCode1
.LineWeight = BarCode1.LineWeight
.Style = BarCode1.Style
.SubStyle = BarCode1.SubStyle
.Direction = BarCode1.Direction
.Width = BarCode1.Width
.Height = BarCode1.Height
.ShowData = BarCode1.ShowData
Me.Hide
End With
With frmMain
.Picture1.Width = .BarCode1.Width
.Picture1.Height = .BarCode1.Height
.Conel.Width = .BarCode1.Width
.Conel.Height = .BarCode1.Height
End With
End Sub
Private Sub cmdRefresh_Click()
BarCode1.Width = BarWidth
BarCode1.Height = BarHeight
End Sub
Private Sub Form_Load()
LoadBarInfo
BarWidth = BarCode1.Width
BarHeight = BarCode1.Height
End Sub
Sub LoadBarInfo() '初始化選項
LoadBigClass cboBig
LoadSmallClass cboSmall
LoadLineSize cboLine
LoadDirection cboDirection
End Sub
Sub LoadBigClass(cbo As ComboBox) '條碼標准
With cbo
.AddItem "UPC-A"
.AddItem "UPC-E"
.AddItem "EAN-13"
.AddItem "EAN-8"
.AddItem "Case Code"
.AddItem "Codabar (NW-T)"
.AddItem "Code-39"
.AddItem "Code-128"
.AddItem "U.S. Postnet"
.AddItem "U.S. Postal FIM"
.AddItem "JP Post"
.ListIndex = 2
End With
End Sub
Sub LoadSmallClass(cbo As ComboBox) '條碼樣式
With cbo
.AddItem "Standard"
.AddItem "2-Digit Supplement"
.AddItem "5-Digit Supplement"
.AddItem "POS Case Code"
.ListIndex = 0
End With
End Sub
許多人在編寫資料庫應用程序時,都想要加上條形碼功能加強工作效率,尤其是銷售管理,圖書館管理這類流量大的應用軟體,但由於條形碼技術難以掌握、標誰又多以及過去的技術種種原因,使得許多人望而卻步。本文介紹的一套簡單實用的條形碼解決方法,希望能幫助各位完善軟體系統的功能。
3、如何在VB程序下生成二維條碼
如何在VB程序下生成二維條碼,包括PDF417、QrCode、DataMatrix和漢信二維條碼,具體步騶如下:
工具/原料
准備VB開發環境,VS6.0開發環境
方法/步驟
創建VB工程,COPY二維條碼動態鏈接庫到您的工程中。您需要引用的動態庫有:EnCodePdf.dll,EnCodeQr.dll,EnDataMatrix和EnHanxin.dll。
大家可以參照下圖放置DLL和INI的目錄位置。
『動態鏈接庫引用
(說明:下面是所有四種條碼的介面引用申明,讀者可以適當剪裁)
』串口介面
Private Declare FunctionInitRead Lib 「EnCodePdf.dll」 (ByVal hcallwnd As Long, ByVal pathnameAs String) As Long
Private Declare FunctionCloseRead Lib 「EnCodePdf.dll」 () As Long
『生成PDF417介面
Private Declare SubSetPdfConFile Lib 「EnCodePdf.dll」 (ByVal confile As String)
Private Declare FunctionEnPdfText Lib 「EnCodePdf.dll」 (ByVal txtData As String, ByVal outfileAs String) As String
Private Declare FunctionEnCodePdf Lib 「EnCodePdf.dll」 (ByVal txtfile As String, ByVal outfileAs String) As String
Private Declare FunctionMakePdf417 Lib 「EnCodePdf.dll」 (ByVal txtfile As String, ByValpictfile As String, ByVal otherfile As String, ByVal outfile As String) AsString
』生成QrCode介面
Private Declare SubSetQrConFile Lib 「EnCodeQr.dll」 (ByVal confile As String)
Private Declare FunctionEnQrText Lib 「EnCodeQr.dll」 (ByVal txtData As String, ByVal outfileAs String) As String
Private Declare FunctionEnCodeQr Lib 「EnCodeQr.dll」 (ByVal txtfile As String, ByVal outfileAs String) As String
Private Declare FunctionMakeQrCode Lib 「EnCodeQr.dll」 (ByVal txtfile As String, ByVal pictfileAs String, ByVal otherfile As String, ByVal outfile As String) As String
『生成DataMatrix介面
Private Declare SubSetDmConFile Lib 「EnDataMatrix.dll」 (ByVal confile As String)
Private Declare FunctionEnDmText Lib 「EnDataMatrix.dll」 (ByVal txtData As String, ByValoutfile As String) As String
Private Declare FunctionEnDataMatrix Lib 「EnDataMatrix.dll」 (ByVal txtfile As String, ByValoutfile As String) As String
Private Declare FunctionMakeDataMatrix Lib 「EnDataMatrix.dll」 (ByVal txtfile As String, ByValpictfile As String, ByVal otherfile As String, ByVal outfile As String) AsString
』生成HanXin介面
Private Declare SubSetHxConFile Lib 「EnHanXin.dll」 (ByVal confile As String)
Private Declare FunctionEnHxText Lib 「EnHanXin.dll」 (ByVal txtData As String, ByVal outfileAs String) As String
Private Declare FunctionEnCodeHx Lib 「EnHanXin.dll」 (ByVal txtfile As String, ByVal outfileAs String) As String
Private Declare FunctionMakeHanXin Lib 「EnHanXin.dll」 (ByVal txtfile As String, ByValpictfile As String, ByVal otherfile As String, ByVal outfile As String) AsString
'WAPI介面
Private Declare FunctionSetCurrentDirectory Lib 「kernel32」 Alias「SetCurrentDirectoryA」 (ByVal lpPathName As String) As Long
Private Declare Lib 「kernel32」 Alias「WritePrivateProfileStringA」 (ByVal lpApplicationName As String,ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) AsLong
Private Declare FunctionGetPrivateProfileInt Lib 「kernel32」 Alias「GetPrivateProfileIntA」 (ByVal lpApplicationName As String, ByVallpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) AsLong
Private Declare Lib 「kernel32」 Alias「GetPrivateProfileStringA」 (ByVal lpApplicationName As String, ByVallpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String,ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare FunctionSetWindowLong Lib 「user32」 Alias 「SetWindowLongA」 (ByValhwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare FunctionSetParent Lib 「user32」 (ByVal hWndChild As Long, ByVal hWndNewParentAs Long) As Long
『生成圖像小波壓縮介面
'exports from nlcomp.dll 圖像壓縮函數
Private Declare FunctionSizeDIB Lib 「Wcomp.dll」 (ByVal oldmap As String, ByVal BmpHeight AsInteger, ByVal BmpWidth As Integer) As Long
Private Declare FunctionWcompress Lib 「Wcomp.dll」 (ByVal infile As String, ByVal outfile AsString, ByVal budget As Long) As Long
Private Declare FunctionWdecompress Lib 「Wcomp.dll」 (ByVal infile As String, ByVal outfile AsString) As Long
進行條形碼製作:
我們在引用API介面後,可以參照下面程序,實現介面調用
程序中txtfile表示文本文件名,binBmpFile表示輸入的圖像文件名
若需要裝載圖像可以採用Make開頭介面,若不需要則採用En開頭介面。
If (txtfile<> 「」 Or binBmpFile <> 「」) Then
If m_bWorkMode = 1 Then 'PDF417
SetPdfConFile (Edit_ConFileName.Text)
If (Edit_ImgFileName.Text <> 「」) Then
strBmpFile = MakePdf417(txtfile, binBmpFile,「」, 「」)
Else
strBmpFile = EnPdfText(Edit_Source.Text,「」)
End If
ElseIf m_bWorkMode = 2 Then 'Qr_Code
SetQrConFile (Edit_ConFileName.Text)
If (Edit_ImgFileName.Text <> 「」) Then
strBmpFile = MakeQrCode(txtfile, binBmpFile,「」, 「」)
Else
strBmpFile = EnQrText(Edit_Source.Text,「」)
End If
ElseIf m_bWorkMode = 3 Then ' DataMatrix
SetDmConFile (Edit_ConFileName.Text)
If (Edit_ImgFileName.Text <> 「」) Then
strBmpFile = MakeDataMatrix(txtfile,binBmpFile, 「」, 「」)
Else
strBmpFile = EnDmText(Edit_Source.Text,「」)
End If
Else
SetHxConFile (Edit_ConFileName.Text)
If (Edit_ImgFileName.Text <> 「」) Then
strBmpFile = MakeHanXin(txtfile, binBmpFile,「」, 「」)
Else
strBmpFile = EnHxText(Edit_Source.Text,「」)
End If
End If
打開關閉串口:
條碼編碼控制項一般自帶串口接收處理介面:
InitRead介面是初始化串口
CloseRead介面是關閉串口
If Cmd_OpenComm.Caption = 「連接串口」 Then
Call SetPdfConFile(Edit_ConFileName.Text)
If InitRead(Me.hwnd, App.Path + 「\」) = 1 Then
Cmd_OpenComm.Caption = 「斷開串口」
End If
Else 』關閉串口
If CloseRead() = 1 Then
Cmd_OpenComm.Caption = 「連接串口」
End If
End If
接收條碼識讀器內容:
串口收到識讀器信息後,以鍵盤消息的形式,觸發頁面消息。
我們調用FORM下,處理KeyDown事件。
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim FileNo As Integer
Dim strTmp As String
Dim strBmpFile As String
strBmpFile = App.Path & 「\temp.bmp」
If KeyCode = 255 Then
FileNo = FreeFile()
Open App.Path & 「\temp.txt」 For Input As #FileNo
Edit_Source.Text = 「」
Do While Not EOF(FileNo)
strTmp = 「」
Input #FileNo, strTmp
Edit_Source.Text = Edit_Source.Text & strTmp & Chr(13) & Chr(10)
Loop
Close #FileNo
If Dir(strBmpFile) <> 「」 Then
Kill (strBmpFile)
End If
If Dir(App.Path & 「\temp.img」) <> 「」 Then
If FileLen(App.Path & 「\temp.img」) > 10 Then
Call Wdecompress(App.Path & 「\temp.img」, strBmpFile)
End If
End If
If Dir(strBmpFile) <> 「」 Then
Image_Bar.Picture = LoadPicture(strBmpFile)
Else
Image_Bar.Picture = LoadPicture(「」)
End If
Cmd_Print.Enabled = False
End If
End Sub
4、VB程序中怎樣讀取掃描的條形碼內容,求代碼啊,
這個還是要看你用什麼去掃描條碼。
下面這個方案可行,我實現過,不知道硬體適不適合你的情況。
硬體:條碼掃描槍,串口的。(將掃槍接到串口,比如COM1)
軟體:直接用VB讀取串口(比如COM1)信息就好了。
所以,你只要在網上搜索一個VB讀取串口信息的例子,改改就好了。
其他介面(如網口)的掃槍我沒用過,不太清楚。
希望能幫到你。
5、vb6.0源代碼
你這里的RsAddUser是自己聲明的ADODB.Recordset對象
在變數聲明段,你應該可以找到
Dim RsAddUser As ADODB.Recordset
或者是
Private RsAddUser As ADODB.Recordset
而
RsAddUser.State是該對象的一個屬性,用來返回其處於打開或關閉的狀態。
6、VB應用程序中列印條形碼的方法
條形碼作為一種機器可識別的圖形,它能快速、准確地標識某種產品或商品,在許多資料庫應用中起作很重要的作用,如超市收銀、車站售票等場合。當某件物品上帶有的條形碼被條碼掃描器正確解讀後,將會得到該物品的唯一標識字元串,通過檢索資料庫我們就可以很容易知道它的一些其它屬性並作相應處理。雖然在Internet上能找到許多免費和不免費的條形碼列印控制項,但是這些控制項除了使用不方便外,還有一個最大的缺點:它們的列印輸出不能和我們的程序共存在一個列印頁面上,比如說在一個過程中,我們先向系統 Printer 中輸出一些內容,然後再調用控制項的條形碼列印方法,最後列印的結果為兩頁!,如果現在我們要處理一張車票,上面不僅要列印條形碼,還要有終點站和票價等信息,那麼控制項就變得不可用。對程序員來說,可能還是希望能了解條形碼列印的原理,本文提出兩種列印方法與同行們探討。
一、直接利用有條形碼列印功能的列印機
有許多列印機能夠直接列印條形碼,但在 VB 中,我們在DOS時代熟悉的LPRINT語句已經不能再使用了,列印操作被Windows的Spool系統完全接管,輸出是以「頁」為單位,所有的列印輸出都被Windows轉換為圖形發送給列印驅動程序。而要使列印機列印條形碼就必須將對應的ESC序列直接發送給它,因此我們就要想辦法避開Windows的Spool系統,也就是說再程序中不能使用Printer對象和Printers集合處理列印輸出,在VB中要將ESC指令直接發送給列印機至少有三種方法,前兩種方法是調用Windows API 函數:Escape()和SpoolFile(),第三種是最容易的方法:打開列印機埠進行二進制存取,我們主要考慮這種方法。
即使在Windows時代,」LPT1:」和」PRN」仍然是可用的,下面我們先作一個試驗:打開一個DOS窗口,在提示符下輸入COPY CON LPT1:回車,然後隨便輸入一些字元,最後按F6鍵,列印機就開始工作了,它將列印出你輸入的那些字元!下面的代碼演示了直接將指令和字元發送給列印機:
Private Sub Command1_Click()
Dim strOut As String
StrOut = 「這是直接發送到列印機埠的字元串」
『 打開列印機埠,其中的」LPT1:」可能需要根據你的列印機設置而改變
Open 「LPT1:」 For Binary Access Write As #1
『 發送給列印機,注意語句的最後一個參數必須是變數
Put #1, ,strOut
『 關閉列印機埠
Close #1
End Sub
各種列印機列印條形碼的指令可能不同,比如將上面的變數 strOut賦值為:
strOut = Chr(28) & 「P」 & Chr(5) & Chr(2) & Chr(3) & Chr(3) & Chr(6) & 「012345」
將在 AR2400 列印機上列印出內容為」012345」的 CODE39 格式的條形碼。具體的列印控制指令請參考列印機手冊。
用這種方法的缺點:一是過份依賴列印機本身,而有條形碼列印功能的列印機通常要比普通列印機昂貴,這會使構造應用系統不夠經濟;二是所有的列印輸出都必須你自己處理,比如列印定位就很浪費時間。
二、利用畫圖方式輸出到普通列印機
條形碼的編碼規則不外乎是通過線條和線條間間隙的寬窄不同來表示二進制的1和0,只要我們了解了條形碼的編碼規則,完全可以用畫圖的方式在普通列印機上得到可以接受的效果。下面我們就使用最普遍的CODE39碼進行討論。
CODE39碼的編碼規則是:
1、 每五條線表示一個字元;
2、 粗線表示1,細線表示0;
3、 線條間的間隙寬的表示1,窄的表示0;
4、 五條線加上它們之間的四條間隙就是九位二進制編碼,而且這九位中必定有三位是1,所以稱為39碼;
5、 條形碼的首尾各一個*標識開始和結束
在我們的程序中,給常用的字元都進行編碼,解讀時先取線條粗細,再取間隙寬窄,如:
上圖中的字元*就可以解讀為 001101000,字元3解讀為 110000100
下面就是我們給出的子過程:
注釋: 將字元串 strBarCode 對應的條形碼輸出到預設列印機
Private Sub PrintBarCode( _
ByVal strBarCode As String, _
Optional ByVal intXPos As Integer = 0, _
Optional ByVal intYPos As Integer = 0, _
Optional ByVal intPrintHeight As Integer = 10, _
Optional ByVal bolPrintText As Boolean = True _
)
注釋: 參數說明:
注釋: strBarCode - 要列印的條形碼字元串
注釋: intXPos, intYPos - 列印條形碼的左上角坐標(預設為(0,0),坐標刻度為:毫米)
注釋: intHeight - 列印高度(預設為一厘米,坐標刻度為:毫米)
注釋: bolPrintText - 是否列印人工識別字元(預設為true)
注釋: "0"-"9","A-Z","-","%","$"和"*" 的條碼編碼格式,總共 40 個字元
Static strBarTable(39) As String
注釋: 初始化條碼編碼格式表
strBarTable(0) = "001100100" 注釋: 0
strBarTable(1) = "100010100" 注釋: 1
strBarTable(2) = "010010100" 注釋: 2
strBarTable(3) = "110000100" 注釋: 3
strBarTable(4) = "001010100" 注釋: 4
strBarTable(5) = "101000100" 注釋: 5
strBarTable(6) = "011000100" 注釋: 6
strBarTable(7) = "000110100" 注釋: 7
strBarTable(8) = "100100100" 注釋: 8
strBarTable(9) = "010100100" 注釋: 9
strBarTable(10) = "100010010" 注釋: A
strBarTable(11) = "010010010" 注釋: B
strBarTable(12) = "110000010" 注釋: C
strBarTable(13) = "001010010" 注釋: D
strBarTable(14) = "101000010" 注釋: E
strBarTable(15) = "011000010" 注釋: F
strBarTable(16) = "000110010" 注釋: G
strBarTable(17) = "100100010" 注釋: H
strBarTable(18) = "010100010" 注釋: I
strBarTable(19) = "001100010" 注釋: J
strBarTable(20) = "100010001" 注釋: K
strBarTable(21) = "010010001" 注釋: L
strBarTable(22) = "110000001" 注釋: M
strBarTable(23) = "001010001" 注釋: N
strBarTable(24) = "101000001" 注釋: O
strBarTable(25) = "011000001" 注釋: P
strBarTable(26) = "000110001" 注釋: Q
strBarTable(27) = "100100001" 注釋: R
strBarTable(28) = "010100001" 注釋: S
strBarTable(29) = "001100001" 注釋: T
strBarTable(30) = "100011000" 注釋: U
strBarTable(31) = "010011000" 注釋: V
strBarTable(32) = "110001000" 注釋: W
strBarTable(33) = "001011000" 注釋: X
strBarTable(34) = "101001000" 注釋: Y
strBarTable(35) = "011001000" 注釋: Z
strBarTable(36) = "000111000" 注釋: -
strBarTable(37) = "100101000" 注釋: %
strBarTable(38) = "010101000" 注釋: $
strBarTable(39) = "001101000" 注釋: *
If strBarCode = "" Then Exit Sub 注釋: 不列印空串
注釋: 保存列印機 ScaleMode
Dim intOldScaleMode As ScaleModeConstants
intOldScaleMode = Printer.ScaleMode
注釋: 保存列印機 DrawWidth
Dim intOldDrawWidth As Integer
intOldDrawWidth = Printer.DrawWidth
注釋: 保存列印機 Font
Dim fntOldFont As StdFont
Set fntOldFont = Printer.Font
Printer.ScaleMode = vbTwips 注釋: 設置列印用的坐標刻度為緹(twip=1)
Printer.DrawWidth = 1 注釋: 線寬為 1
Printer.FontName = "宋體" 注釋: 列印在條碼下方字元的字體和大小
Printer.FontSize = 10
Dim strBC As String 注釋: 要列印的條碼字元串
strBC = Ucase(strBarCode)
注釋: 將以毫米表示的 X 坐標轉換為以緹表示
Dim x As Integer
x = Printer.ScaleX(intXPos, vbMillimeters, vbTwips)
注釋: 將以毫米表示的 Y 坐標轉換為以緹表示
Dim y As Integer
y = Printer.ScaleY(intYPos, vbMillimeters, vbTwips)
注釋: 將以毫米表示的高度轉換為以緹表示
Dim intHeight As Integer
intHeight = Printer.ScaleY(intPrintHeight, vbMillimeters, vbTwips)
注釋: 是否在條形碼下方列印人工識別字元
If bolPrintText = True Then
注釋: 條碼列印高度要減去下面的字元顯示高度
intHeight = intHeight - Printer.TextHeight(strBC)
End If
Const intWidthCU As Integer = 30 注釋: 粗線和寬間隙寬度
Const intWidthXI As Integer = 10 注釋: 細線和窄間隙寬度
Dim intIndex As Integer 注釋: 當前處理的字元串索引
Dim i As Integer, j As Integer, k As Integer 注釋: 循環控制變數
注釋: 添加起始字元
If Left(strBC, 1) <> "*" Then
strBC = "*" & strBC
End If
注釋: 添加結束字元
If Right(strBC, 1) <> "*" Then
strBC = strBC & "*"
End If
注釋: 循環處理每個要顯示的條碼字元
For i = 1 To Len(strBC)
注釋: 確定當前字元在 strBarTable 中的索引
Select Case Mid(strBC, i, 1)
Case "*"
intIndex = 39
Case "$"
intIndex = 38
Case "%"
intIndex = 37
Case "-"
intIndex = 36
Case "0" To "9"
intIndex = CInt(Mid(strBC, i, 1))
Case "A" To "Z"
intIndex = Asc(Mid(strBC, i, 1)) - Asc("A") + 10
Case Else
MsgBox "要列印的條形碼字元串中包含無效字元!當前版本只支持字元 注釋:0注釋:-注釋:9注釋:,注釋:A注釋:-注釋:Z注釋:,注釋:-注釋:,注釋:%注釋:,注釋:$注釋:和注釋:*注釋:"
End Select
注釋: 是否在條形碼下方列印人工識別字元
If bolPrintText = True Then
Printer.CurrentX = x
Printer.CurrentY = y + intHeight
Printer.Print Mid(strBC, i, 1)
End If
For j = 1 To 5
注釋: 畫細線
If Mid(strBarTable(intIndex), j, 1) = "0" Then
For k = 0 To intWidthXI - 1
Printer.Line (x + k, y)-Step(0, intHeight)
Next k
x = x + intWidthXI
注釋: 畫寬線
Else
For k = 0 To intWidthCU - 1
Printer.Line (x + k, y)-Step(0, intHeight)
Next k
x = x + intWidthCU
End If
注釋: 每個字元條碼之間為窄間隙
If j = 5 Then
x = x + intWidthXI * 3
Exit For
End If
注釋: 窄間隙
If Mid(strBarTable(intIndex), j + 5, 1) = "0" Then
x = x + intWidthXI * 3
注釋: 寬間隙
Else
x = x + intWidthCU * 2
End If
Next j
Next i
注釋: 恢復列印機 ScaleMode
Printer.ScaleMode = intOldScaleMode
注釋: 恢復列印機 DrawWidth
Printer.DrawWidth = intOldDrawWidth
注釋: 恢復列印機 Font
Set Printer.Font = fntOldFont
End Sub
最理想的情況是將它做成一個控制項,在控制項中提供一個列印方法,該方法實現與上
那個過程大致相同,只是不能在控制項中直接使用VB的Printer對象,否則VB會將你在控制項中的列印輸出處理為一個單獨的頁面,而是應該將Printer.hDc傳給它,通過調用那些需要指定 HDC 的Windows API函數實現與容器的列印輸出在一個頁面上,比如我們可以這樣定義這個控制項的列印方法:
注釋: PrintIt 方法將對應的條形碼輸出到預設列印機
Public Sub PrintIt(ByVal PrintDC As Long, _
Optional ByVal intXPos As Integer = 0, _
Optional ByVal intYPos As Integer = 0, _
Optional ByVal intPrintHeight As Integer = 10)
既然不能使用Printer對象,那麼畫線和輸出文字也不能使用Printer對象的Line和Print方法,在我們的程序中至少要申明以下三個Windows API函數:
『 移動畫筆的位置
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long
『 從畫筆的當前位置到(x,y)畫一條線
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
『 在(x,y)處輸出一個字元串
Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
『 MoveToEx() 函數需要的參數
Private Type POINTAPI
xp As Long
yp As Long
End Type
Dim papi As POINTAPI
畫線操作為(原來的Printer.Line函數):
MoveToEx PrintDC, x + k, y, papi
LineTo PrintDC, x + k, y + intHeight + 1
列印字元為(原來的Printer.Print函數):
TextOut PrintDC, x, y + intHeight, Mid(strBC, i + 1, 1), 1
7、怎樣用vb做出能輸入數字生成條形碼的程序
有一個控制項,忘了叫什麼了。網上搜!
8、vb 商品條形碼資料庫建立和數據錄入的方法!!
方法一:(我知道的金蝶軟體就是這樣處理的)
一對多
條碼表結構(至少兩個欄位): 商品 條碼
另外條碼是有規律的,6902538004045 6902538004052
我具體的不知道,但6902538004是一樣的,或許問下供貨商可以有答案
舉例
商品表:t_goods
fitemid fname funit
1 脈動 瓶
2 。。 。。
條碼表:t_no
fitemid fnumber
1 6902538004045
1 6902538004052
刷出檢索
select a.* from t_goods a
inner join t_no on a.fitemid=b.fitemid
where b.fnumber='掃描到的條碼'
方法二:
fitemid fname funit fnumber
1 脈動 瓶 6902538004045;6902538004052;
條形碼欄位格式:6902538004045;6902538004052; (或類似的)
檢索時用
select * from t_item where fnumber like('掃描到的條碼'+';'%)
9、VB二維條碼生成
你學習的話
用一個OFFICE的附帶的BarCode控制項即可,輸出是圖像格式
http://www.programfan.com/blog/article.asp?id=2505
不過專業的條碼列印還專是用VB的Printer控制項Line函數屬以畫圖方式輸出最好
我曾開發過多種標準的條形碼控制項,不過是商業軟體不好開放
這里有個39碼的例子,你不妨看看
http://www.3800hk.com/Article/cxsj/vb/bcslvb/2005-08-06/Article_47920.html