ผู้เขียน หัวข้อ: [VB6] การพิมพ์ชื่อที่อยู่ผู้รับออกซองจดหมายขนาด 23x11 ซม. ด้วย ActiveReports 2.0  (อ่าน 230 ครั้ง)

ออฟไลน์ ทองก้อน ทับทิมกรอบ

  • Administrator
  • *****
  • กระทู้: 245
  • เพศ: ชาย
  • Webmaster G2GNet
[VB6] การพิมพ์ชื่อที่อยู่ผู้รับออกซองจดหมายขนาด 23x11 ซม. ด้วย ActiveReports 2.0

หากใครทำงานสาย IT Support งานเล็กๆน้อยๆในลักษณะแบบนี้ ใช้แค่ Microsoft Visual Basic 6.0 ก็เหลือเฝือ แล้วล่ะครับ ... แนวทางในการพัฒนาต่อก็เช่น ปรับฟอนต์หรือขนาดตัวอักษร จัดระยะการพิมพ์ทั้งจากซ้ายและด้านบน รวมไปถึงระบุชื่อผู้ส่ง ฯลฯ ต่อจากนั้นก็ใส่ฐานข้อมูลลูกค้าลงไป โอ้ย!!! เยอะแยะไปหมดล่ะครับ หากเรารู้จักการพัฒนาแบบก้าวไปทีละขั้น ...


Components --> Data Dynamics ActiveReports Viewer 2.0


การออกแบบบน ActiveReports 2.0


Run Time สำหรับ M$ Visual Basic 6

มาดูโค้ดกันเถอะ

ฟอร์มหลัก frmPrintEnvelope

' / -----------------------------------------------------------------------------------------------
' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
' / eMail : thongkorn@hotmail.com
' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
' / Facebook: www.facebook.com/g2gnet
' / Purpose : Print out standard envelope 23x11 cm. with ActiveReports
' / Microsoft Visual Basic 6.0 Service Pack 6
' / -----------------------------------------------------------------------------------------------
Option Explicit

Private Sub cmdPreview_Click()
    ' ประกาศตัวแปรแบบ Object เพื่อรับงานไปพิมพ์
    Dim rptPrint As Object
    ' ส่วนสำคัญในการทำรายงานด้วย Active Report คือการตั้งค่า หรือ การผูกรายงานเข้ากับ Object
    Set rptPrint = New arPrintEnvelope   ' มาจากชื่อไฟล์รายงาน (Designer)
    ' ARViewPrintEnvelope ตัวนี้คือ Control ที่วางไว้อยู่บนฟอร์ม frmAR2PrintEnvelope
    Set Me.ARViewPrintEnvelope.object = rptPrint
   
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    ' ก่อนจะใช้ Sub Program นี้ได้ ... พี่น้องต้องกำหนดค่าของ Form ให้คุณสมบัติ KeyPreview = True ก่อน
    Select Case KeyCode
        Case vbKeyF1: MsgBox "No help now."
        Case vbKeyF7:
                    Call cmdPreview_Click
        Case vbKeyF10:
                    Call cmdExit_Click
   End Select
End Sub

Private Sub Form_Load()
On Error GoTo ErrorHandler
   
    ' ตั้งตำหน่งกึ่งกลางจอภาพ ... การใช้ \ หรือ การหารตัดเศษ จะทำงานได้เร็วกว่าการหาร /
    Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
   
    With ARViewPrintEnvelope
        .Zoom = 75   ' ค่า % การแสดงผล
        ' และอื่นๆอีก ...
    End With
   
    txtAddress.Text = "กรุณาส่ง" & vbCrLf & _
                                    "นายทองก้อน นารีแขยง" & vbCrLf & _
                                    "142 ม.11 ซ.ฉัตรทอง 5 ถ.กลางเมือง" & vbCrLf & _
                                    "ต.เมืองเก่า อ.เมือง" & vbCrLf & _
                                    "จ.ขอนแก่น 40000"
   
ExitProc:
    Exit Sub
   
ErrorHandler:
    MsgBox "Error : " & Err.Number & vbCrLf & Err.Description, vbOKOnly + vbExclamation, "รายงานความผิดพลาด"
    Resume ExitProc
End Sub

Private Sub Form_Resize()
    On Error Resume Next
    ARViewPrintEnvelope.Width = Me.ScaleWidth - 15
    ARViewPrintEnvelope.Height = Me.ScaleHeight - ARViewPrintEnvelope.Top - Picture1.Height
    Picture1.Width = ARViewPrintEnvelope.Width
    Picture1.Top = Me.ScaleHeight - Picture1.Height
    cmdPreview.Left = Me.ScaleWidth - cmdPreview.Width - 90
    cmdExit.Left = cmdPreview.Left
End Sub

Private Sub Form_Unload(Cancel As Integer)
On Error Resume Next
    ' ก่อนจบโปรแกรม ควรลบไฟล์ขยะออกไปให้หมด (Temporary File)
    If Dir$(App.Path & "\*.tmp") <> "" Then Kill App.Path & "\*.tmp"
    End
End Sub

Private Sub cmdExit_Click()
    Unload Me
End Sub


โค้ด ActiveReports 2.0 - arPrintEnvelope.dsr

Option Explicit

' / -----------------------------------------------------------------------------------------------
' โปรแกรมย่อยในการตั้งค่าเริ่มต้น (Initialize) ต่างๆ ก่อนที่จะทำการพิมพ์ออกไป
' / -----------------------------------------------------------------------------------------------

Private Sub ActiveReport_Initialize()
   
    ' ตั้งค่ากระดาษในแนวนอน
    PageSettings.Orientation = ddOLandscape
   
    ' ซองจดหมาย หรือ Envelope #10, ขนาด 4 1/8 x 9 1/2 in
    PageSettings.PaperSize = 20
    ' อันที่จริงใช้ User Defined แทนเอาก็ได้ เพราะเครื่องพิมพ์ทุกวันนี้มันทำ Custom Size ได้
   
    ' ปรับระยะขอบต่างๆ
    PageSettings.LeftMargin = 300
    PageSettings.RightMargin = 300
    PageSettings.BottomMargin = 100
    PageSettings.TopMargin = 300
   
    ' เคลียร์ค่าการพิมพ์รายชื่อ ที่อยู่ลูกค้า
    txtRecipient.Text = ""
   
    ' กำหนดตำแหน่งการพิมพ์แบบ Run Time ... อย่าลืมว่ามันเป็นหน่วย Twips
    ' หากอยากได้หน่วยวัดแบบอื่นก็เทียบบัญญัติไตรยางค์เอาครับ ... 1440 Twips = 1 นิ้ว หรือ 2.54 ซม.
    ' ปรับตำแหน่งการพิมพ์ที่อยู่ทางซ้าย

    txtRecipient.Left = 4420
    ' ขึ้นกับการปรับความสูงของ Detail และ Header ด้วยน่ะครับ
    txtRecipient.Top = 1885
   
End Sub

' / -----------------------------------------------------------------------------------------------
' Detail คือส่วนที่พิมพ์ข้อมูล รายละเอียดต่างๆ ของการทำรายงานด้วย Active Report
' / -----------------------------------------------------------------------------------------------

Private Sub Detail_Format()
    On Error Resume Next
   
    ' ใช้ TextBox ตัวเดียวก็พอในการพิมพ์ที่อยู่ผู้รับ ... แต่อย่าลืมตั้งค่า Properties ให้ MultiLine = True
    ' การอ้างถึงค่าแบบข้ามฟอร์ม เพราะลักษณะของ ActiveReport มันเหมือนเป็นฟอร์มๆหนึ่งของ VB6

    txtRecipient.Text = txtRecipient.Text & frmAR2PrintEnvelope.txtAddress
   
End Sub


Private Sub ActiveReport_ReportEnd()
    Unload Me
End Sub



บันทึกการเข้า
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

ออฟไลน์ naien

  • Newbie
  • *
  • กระทู้: 36
ขอบคุณครับ

บันทึกการเข้า

ออฟไลน์ Mr.Den

  • Jr. Member
  • **
  • กระทู้: 73
  • เพศ: ชาย
ขอบพระคุณอย่างสูงครับอาจารย์

บันทึกการเข้า