Visual Basic 6.0 (VB6) 程式語言案例學習 (10. 條碼列印程式)
Visual Basic 6.0 (VB6) 程式語言案例學習 (10. 條碼列印程式)¶
10.1 問題¶
隨著科技進步神速,條碼列印已經不再是商家專用,或者需要特殊技巧的一件事情了。透過一般的印表機搭配條碼列印程式就可以輕鬆的列印條碼貼紙,這對於普遍的使用者來說,是一件很好的事情。條碼輸入設備感應越做越好,好一點的設備,無論是正掃反掃側掃都可以判斷正確無誤,這次遇到的問題,是要替光碟資產做條碼歸檔,利用市面上隨處可見的條碼貼紙,一張A4大小的貼紙,就可輕鬆的製作條碼。
10.2 需求¶
表格 10‑1 「條碼列印程式」系統目的分析表
版本:1.0 | 要做什麼 | 不要做什麼(不要做不代表不會做) |
---|---|---|
能做什麼 | (第一格:必要項目) | (第二格:次要項目) |
可自行編輯要列印的資料。 | 可預覽列印。 | |
可將編輯的英文及數字資料轉為條碼。 | ||
可調整字級大小。 | ||
不能做什麼(不能做代表不需要做) | (第三格:不必要項目) | (第四格:不需要項目) |
可讀入Excel檔案。 | 可大量印製。 |
表格 10‑2 「條碼列印程式」系統目標分析表
版本: | 重要 | 不重要 |
---|---|---|
優先 | (重) | (急) |
可自行編輯要列印的資料。 | 可預覽列印。 | |
可將編輯的英文及數字資料轉為條碼。 | 不急迫 | |
(輕) | (緩) | |
可調整字級大小。 | 無。 |
表格 10‑3 「條碼列印程式」系統規格表
規格項目 | 規格內容 | 備註 |
---|---|---|
資料輸入 | 以文字檔編輯的方式。 | … |
字級大小 | 可設定字級大小。 | … |
預覽列印 | 可預覽列印。 | … |
10.3 特色¶
透過小而巧的程式,簡單的操作,就可以列印具有條碼的貼紙。
10.4 使用工具¶
語言 | 軟體 |
---|---|
MS Visual Basic | MS Visual Basic 6.0、MS Access |
10.5 系統架構¶
其實如何將英文數字轉換為條碼的過程相當簡單,因為隨處可見的條碼字型檔,下載之後就可以使用了,系統只是幫助您將字型檔案載入到系統中,而後將英文及數字使用條碼字型,如此簡單的動作就完成了條碼轉換的工作了。
為求便利,透過文書編輯軟體依照一定的格式,編輯欄位,然後再藉由程式匯入,並利用DataReport的功能,設定要列印的內容。整個程式相當小巧,但對於使用者來說相當方便。
10.6 程式實作¶
程式非常之短,只有101行,筆者每一行都加上註解,因此相當容易了解才是。
'設定所有變數必須宣告才能使用 Option Explicit '使用GDI32 API載入字型 Private Declare Function AddFontResource Lib "gdi32" Alias "AddFontResourceA" _ (ByVal lpFileName As String) As Long '使用GDI32 API移除字型 Private Declare Function RemoveFontResource Lib "gdi32" Alias "RemoveFontResourceA" _ (ByVal lpFileName As String) As Long '載入字型副程式 Private Sub A() Dim retval As Long retval = AddFontResource(App.Path & "\A.RES") If retval = 0 Then Exit Sub End If End Sub '移除字型副程式 Private Sub B() Dim retval As Long retval = RemoveFontResource(App.Path & "\A.RES") If retval = 0 Then Exit Sub End If End Sub '按下開啟 List.txt 按鈕事件副程式 Private Sub Command1_Click() '錯誤處理 On Error GoTo err_Command1_Click: '宣告檔案代碼變數 Dim intFN As Integer '宣告資料庫連結字串變數 Dim strCnn As String '宣告資料庫連結物件 Dim objCnn As ADODB.Connection '設定資料庫連結字串 strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & App.Path & "\db1.mdb" & ";" & _ "Mode=Read|Write|Share Deny None;" & _ "Persist Security Info=False;" '設定資料庫連結物件 Set objCnn = New ADODB.Connection '開啟資料庫 objCnn.Open strCnn '宣告SQL字串 Dim strSQL As String '宣告資料錄物件 Dim objRst As ADODB.Recordset '設定SQL查詢字串 strSQL = "Select * From [資料表1]" '設定資料錄物件 Set objRst = New ADODB.Recordset '開啟查詢資料表 objRst.Open strSQL, objCnn, adOpenKeyset, adLockOptimistic '刪除資料表中所有內容 Do Until objRst.EOF objRst.Delete adAffectCurrent objRst.Update objRst.MoveNext Loop '宣告讀取文字檔字串 Dim strA As String '宣告計數器變數 Dim lngI As Long '計數器歸零 lngI = 0 '自動分配檔案代碼 intFN = FreeFile '開啟檔案 Open App.Path & "\List.txt" For Input As #intFN '讀取檔案內容 Do Until EOF(intFN) '讀取檔案內容 Input #intFN, strA '計數器累加 lngI = lngI + 1 '當字串大於22時 If Len(strA) > 22 Then '利用循環計數公式 Select Case ((lngI - 1) Mod 4) + 1 '新增資料到第一張標籤貼紙 Case 1 objRst.AddNew objRst("A") = Left(strA, 19) objRst("B") = Mid$(strA, 20, Len(strA) - 19) objRst("C") = Left(strA, 19) '新增資料到第二張標籤貼紙 Case 2 objRst("A1") = Left(strA, 19) objRst("B1") = Mid$(strA, 20, Len(strA) - 19) objRst("C1") = Left(strA, 19) '新增資料到第三張標籤貼紙 Case 3 objRst("A2") = Left(strA, 19) objRst("B2") = Mid$(strA, 20, Len(strA) - 19) objRst("C2") = Left(strA, 19) '新增資料到第四張標籤貼紙 Case 4 objRst("A3") = Left(strA, 19) objRst("B3") = Mid$(strA, 20, Len(strA) - 19) objRst("C3") = Left(strA, 19) objRst.Update End Select End If Loop '更新資料庫 objRst.Update '關閉檔案 Close #intFN '設定報表資料來源 Set DataReport1.DataSource = objRst '設定條碼字型 DataReport1.Sections("Section1").Controls("Text2").Font.Name = "3 of 9 Barcode" DataReport1.Sections("Section1").Controls("Text5").Font.Name = "3 of 9 Barcode" DataReport1.Sections("Section1").Controls("Text8").Font.Name = "3 of 9 Barcode" DataReport1.Sections("Section1").Controls("Text11").Font.Name = "3 of 9 Barcode" '設定字型大小 DataReport1.Sections("Section1").Controls("Text2").Font.Size = Val(Text2.Text) DataReport1.Sections("Section1").Controls("Text5").Font.Size = Val(Text2.Text) DataReport1.Sections("Section1").Controls("Text8").Font.Size = Val(Text2.Text) DataReport1.Sections("Section1").Controls("Text11").Font.Size = Val(Text2.Text) '設定字型大小 DataReport1.Sections("Section1").Controls("Text1").Font.Size = Val(Text1.Text) DataReport1.Sections("Section1").Controls("Text4").Font.Size = Val(Text1.Text) DataReport1.Sections("Section1").Controls("Text7").Font.Size = Val(Text1.Text) DataReport1.Sections("Section1").Controls("Text10").Font.Size = Val(Text1.Text) '設定字型大小 DataReport1.Sections("Section1").Controls("Text3").Font.Size = Val(Text3.Text) DataReport1.Sections("Section1").Controls("Text6").Font.Size = Val(Text3.Text) DataReport1.Sections("Section1").Controls("Text9").Font.Size = Val(Text3.Text) DataReport1.Sections("Section1").Controls("Text12").Font.Size = Val(Text3.Text) '預覽列印 DataReport1.Show 1 '關閉資料錄 objRst.Close '釋放資料錄 Set objRst = Nothing '關閉資料庫 objCnn.Close '釋放資料庫 Set objCnn = Nothing '跳離副程式 Exit Sub '錯誤處理標籤 err_Command1_Click: '顯示錯誤訊息 MsgBox Err.Description, vbOKOnly, "錯誤" '結束程式 End End Sub '程式初始化載入事件副程式 Private Sub Form_Initialize() '載入條碼字型 Call A End Sub '程式結束事件副程式 Private Sub Form_Terminate() '移除條碼字型 Call B End Sub
Step 1:如圖10-1,文字檔List.Txt是條碼文字檔的格式。
圖 10‑1
Step 2:如圖 10-2,是程式執行的畫面。
圖 10‑2
Step 3:如圖 10-3,是預覽條碼的畫面。
圖 10‑3
10.7 修改重點¶
程式過於小巧,也代表著孩有發展的空間,例如:採用Excel匯入資料的方式,就是一個很好的改良模式;或者採用Access資料庫管理,便可增加資產管理的功能。讓這支程式變成元件化,就可以隨意加入其它的應用程式中,讓其他程式也具有列印條碼的能力。
10.8 結論¶
這支程式非常符合使用者的需求,因為使用者以往是透過DOS程式在做列印條碼的工作,而DOS程式的介面相當不好調整,而且無法即時預覽,只有在印列錯誤的時候才知道要手動停止。而今可以再列印之前先預覽,檢查是否有錯誤,在做列印的決定,這對於使用者是相當方便的一件事情。
Lai Tai-Yu (賴岱佑)