Option Explicit
Dim rptPrint As Object
' ส่วนของฟอร์ม
' ===================================================================
Private Sub Form_Load()
On Error GoTo ErrHandler
Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
Me.KeyPreview = True ' ต้องไปใช้กับเหตุการณ์ Form_KeyDown
' เคลียร์ค่า
txtBarCode.Text = ""
txtQuantity.Text = ""
' กำหนดให้เมนูการพิมพ์รูปแบบบาร์โค้ดเป็นแบบ Code128B ไว้ก่อน
mnuCodeFormat(1).Checked = True
' BarcodeFormat เป็นตัวแปรแบบ Global ที่ผมเอาไปไว้ที่ gBarCode Module
' เพื่อต้องการให้ทุกๆฟอร์ม รวมทั้ง Actyive Report - arBarcode มองเห็นด้วย
BarcodeFormat = "Code 128B"
ExitProc:
Exit Sub
ErrHandler:
MsgBox Err.Number & " : " & Err.Description
Resume ExitProc
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyF7: cmdPreview_Click
Case vbKeyF10: cmdExit_Click
End Select
End Sub
' ===================================================================
' ส่วนของการป้อนข้อมูลรหัสบาร์โค้ด (รับค่า 0 - 9 และตัวอักษรอังกฤษตัวใหญ่เท่านั้น)
Private Sub txtBarCode_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0
SendKeys "{TAB}"
Else
' สามารถกดตัวอักขระ 0 - 9, A - Z และ a - z ก็ได้... ไปดูใน gBarCode.Bas ครับผม
' แต่ KeyAscii ต้องรับค่ากลับมาเป็น Integer เสมอน่ะครับ ... พี่น้อง
KeyAscii = Asc(UCase(Chr(CheckAlphaNumericUCase(KeyAscii))))
' กรณีของตัวอักษรตัวเล็ก a - z ที่ผมนำมาใช้งานด้วย
' หากต้องการใช้ตัวอักษรตัวเล็ก Code 128B จะรับได้เท่านั้น ส่วน Code 39/128A จะไม่ได้
' แต่ผมมีวิธีการแก้ปัญหา โดยกดคีย์ตัวเล็กแล้วให้แปลงเป็นตัวใหญ่แทนไงล่ะครับ
' กฏเกณฑ์ธรรมชาติ ... ไล่จากขวามาซ้ายน่ะครับ
' จากเหตุการณ์ txtBarCode_KeyPress
' สมมุติกด a มา นั่นคือจะทำให้ (Ascii Code ของ a คือ 97)
' CheckAlphaNumericUCase(97))
' เปลี่ยน Ascii Code ให้กลายเป็นตัวอักขระด้วยฟังค์ชั่น Chr (Character)
' Chr(CheckAlphaNumericUCase(97)) = a
' แปลงเป็นตัวษรตัวใหญ่ ... ด้วยฟังค์ชั่น UCase (Upper Case)
' UCase(Chr(CheckAlphaNumericUCase(97))) = A
' แปลงตัวอักขระให้เป็น Ascii Code ด้วยฟังค์ชั่น Asc
' Asc(UCase(Chr(CheckAlphaNumericUCase(97)))) = 65
' เพราะว่า KeyAscii เป็นตัวแปรชนิดเลขจำนวนเต็ม (Integer)
' หรือ KeyAscii = 65 ... หรือ ตัวอัษร A ... มะแหล่มมั้ยครับพี่น้อง
End If
End Sub
' ===================================================================
' อยู่ใน gBarCode.bas น่ะครับ ผมตัดมาให้เห็นถึงการทำงาน
Function CheckAlphaNumericUCase(Index As Integer) As Integer
Select Case Index
' 0 - 9 (ASCII 48 - 57), A - B (ASCII 65 - 90), a - z (ASCII 97 - 122)
Case 48 To 57, 65 To 90, 97 To 122
CheckAlphaNumericUCase = Index
' หรือ ไม่ต้องมี Statement ในการคืนค่าตามข้างบนก็ได้ เพราะสั่งทีเดียวตามด้านล่างสุด
Case 8 ' Back Space
Case 13 ' Enter
Case Else
Index = 0
End Select
' Return - คืนค่ากลับ
CheckAlphaNumericUCase = Index
End Function
' ===================================================================
' ส่วนของการป้อนจำนวนบาร์โค้ด (รับตัวเลขเท่านั้น)
Private Sub txtQuantity_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0
cmdPreview_Click
Else
' อันนี้ให้รับเฉพาะค่าตัวเลข 0 - 9 เท่านั้น
KeyAscii = CheckDigitOnly(KeyAscii)
End If
End Sub
' ส่วนของการสั่งพิมพ์รหัสบาร์โค้ด
Private Sub cmdPreview_Click()
If Trim(txtBarCode.Text) = "" Or Trim(txtBarCode.Text) = "0" Or Len(Trim(txtBarCode.Text)) = 0 Then
MsgBox "กรุณาป้อนค่ารหัสบาร์โค้ดให้เรียบร้อยก่อนด้วย.", vbOKOnly + vbInformation, "รายงานสถานะ"
txtBarCode.SetFocus
Exit Sub
ElseIf Trim(txtQuantity.Text) = "" Or Trim(txtQuantity.Text) = "0" Or Len(Trim(txtQuantity.Text)) = 0 Then
MsgBox "กรุณาป้อนจำนวนรหัสบาร์โค้ดให้เรียบร้อยก่อนด้วย.", vbOKOnly + vbInformation, "รายงานสถานะ"
txtQuantity.SetFocus
Exit Sub
End If
'
' Set ARViewer
Set rptPrint = New arBarcode ' ชื่อ Active Report Designer
Set Me.ARViewBarCode.object = rptPrint ' ผูกเข้ากับ ARViewer
End Sub
|