----การควบคุมตารางเป็นหนึ่งในการควบคุมที่พบบ่อยที่สุดใน Visual Basic ซึ่งมีให้ใช้งานตั้งแต่ VB3.0 ถึง VB5.0 นอกจากนี้ยังเป็นหนึ่งในเครื่องมือยอดนิยมสำหรับผู้ที่ชื่นชอบ VB สามารถใช้เพื่อแสดงและเรียกดูข้อมูลในรูปแบบของตาราง โดยเฉพาะอย่างยิ่งสำหรับแอปพลิเคชันฐานข้อมูล การผูกโดยตรงสามารถแสดงและเรียกดูข้อมูลฐานข้อมูลได้ อย่างไรก็ตาม แมลงวันในครีมคือกริดไม่มีฟังก์ชันแก้ไขและพิมพ์ และตำแหน่งของคอลัมน์ไม่สามารถแลกเปลี่ยนกัน ผู้เขียนได้พยายามเพิ่มฟังก์ชันเหล่านี้ลงในกริดเพื่อให้ดียิ่งขึ้นและมีประสิทธิภาพยิ่งขึ้น วิธีการปรับปรุงและโปรแกรมต้นฉบับมีดังต่อไปนี้ ผู้อ่านจำเป็นต้องเขียนโปรแกรมต้นฉบับตามขั้นตอนเพื่อให้ Grid ของคุณมีฟังก์ชันการพิมพ์ ผู้เขียนแก้ไขโปรแกรมนี้โดยใช้ VB5.0 ในสภาพแวดล้อม HP5/100Window95 และส่งต่อ
----มีสามวิธีในการเพิ่มการพิมพ์ลงในตัวควบคุมกริด: 1. พิมพ์ตัวควบคุมโดยตรง 2. รับรู้ฟังก์ชันการพิมพ์ผ่าน PRinter และ 3. รับรู้การพิมพ์โดยการเรียก MS-Word และ MS-Excel
----ขั้นแรก ให้เปิดแอปพลิเคชัน เพิ่มตัวควบคุม DATA1 ใน FORM1 ตั้งค่าคุณลักษณะ CONNECT ของ DATA1 เป็น dBASEIII จากนั้นตั้งค่าคุณลักษณะ DATABASENAME เป็น D:/PJXM.DBF จากนั้นเพิ่ม MSFLEXGRID space GRID1 ใน FORM1 และตั้งค่าแอตทริบิวต์ DATASOURCE ของ GRID1 เป็น DATA1 ด้วยวิธีนี้ ข้อมูลของฐานข้อมูล PJXM.DBF จะถูกแสดงใน GRID1
----วิธีที่ 1: พิมพ์วิธีการของแบบฟอร์มโดยตรง เพิ่มปุ่มคำสั่ง (คำสั่ง) ใน FORM1 ตั้งค่าแอตทริบิวต์ CAPTION เป็นการพิมพ์โดยตรง จากนั้นเขียนโค้ดต่อไปนี้:
คำสั่งย่อย_คลิก
Form1.แบบฟอร์มการพิมพ์
จบซับ
----ด้วยวิธีนี้ ข้อมูลของ GRID1 จึงสามารถพิมพ์ออกมาได้โดยการพิมพ์แบบฟอร์ม FORM1 แต่น่าเสียดายที่พิมพ์ได้เฉพาะส่วนข้อมูลที่แสดงใน GRID1 เท่านั้น หากไม่แสดงออกมา ยิ่งกว่านั้น วิธีการพิมพ์นี้ ก็เหมือนกับหน้าจอมาก นอกจากนี้ยังไม่สามารถควบคุมแบบอักษรได้อย่างยืดหยุ่น ฯลฯ
----วิธีที่ 2: พิมพ์ผ่าน PRINTER วิธีนี้
----1. เพิ่มปุ่มคำสั่งการพิมพ์ (command1) และฟังก์ชัน (prnt1) เพื่อให้ทราบถึงฟังก์ชันการพิมพ์ เขียนโค้ดต่อไปนี้ลงในฟังก์ชันมาตรฐานหรือกระบวนการที่มีการเปลี่ยนแปลงเล็กน้อย
Functionprnt1(xAsInteger,yAsInteger,
แบบอักษร AsSingle, txtAsString)
เครื่องพิมพ์ CurrentX=x
เครื่องพิมพ์ปัจจุบัน Y=y
printer.FontBold=เท็จ
printer.FontSize=แบบอักษร
เครื่องพิมพ์ Printtxt
EndFunction
คำสั่งย่อย1_คลิก
Dimfntเป็นโสด
ดิมปาซินจำนวนเต็ม
Pp=0'ตั้งค่าหมายเลขหน้าเริ่มต้น 0
Dimstry,strx,strx1,stry1,linw,page1,pAsInteger
Statica(8)AsInteger' กำหนดจำนวนคอลัมน์ที่จะพิมพ์
ss$="ใบแจ้งยอดเงินฝากการชำระหนี้ภายใน"'กำหนดส่วนหัว
กาน=0
ฟอริ=0ถึง8
a(i)=1500' กำหนดความกว้างของแต่ละคอลัมน์
kan=kan a(i)'คำนวณความกว้างรวมของตาราง
ต่อไป
page1=50' กำหนดจำนวนบรรทัดต่อหน้า
strx=200
strx1=200' กำหนดตำแหน่งเริ่มต้นในทิศทาง X
สตรี = 1400
stry1=1400' กำหนดตำแหน่งเริ่มต้นในทิศทาง Y
linw=240' กำหนดความกว้างของเส้น
fnt=8'กำหนดขนาดตัวอักษร
printer.fontname="宋体"'กำหนดแบบอักษร
dd=prnt1(4000,700,18,ss$)'พิมพ์ชื่อ
เครื่องพิมพ์ Line (strx-50, stry-30)
-(strx kan-10,stry-30)
Forj=0Togridrow-1'gridrow คือจำนวนบรรทัดที่จะพิมพ์
grid1.row=เจ
strx=strx1
เครื่องพิมพ์สาย (strx-50, stry-30)
-(strx kan-10,stry-30)
พี=พี 1
ฟอริ=0ถึง8
grid1.col=i
dd=prnt1(strx,stry,fnt,grid1.text)
strx=strx ก(i)
ต่อไป
Ifp>หน้า1จากนั้นก็หน้าถัดไป
พี=0
strx=strx1
'linelastline
เครื่องพิมพ์ Line (strx-50, stry linw)
-(strx kan-10,สตรีลินว์)
stry=stry1
'ไลน์คอล
ฟอร์น=0ถึง8
เครื่องพิมพ์สาย (strx-30, stry-30)
-(strx-30,stry (หน้า 1 2)*linw)
strx=strx ก(n)
ต่อไป
เครื่องพิมพ์สาย (strx-30, stry-30)
-(strx-30,stry (หน้า 1 2)*linw)
หน้า=หน้า 1
foot$="th" cstr(pp) "เพจ"
dd=prnt1(strx-30-1000,stry (หน้า 1 2)
*linw 100,10,foot$)'พิมพ์หมายเลขมุมหน้า
เครื่องพิมพ์หน้าใหม่'หน้าถัดไป
dd=prnt1(4000,700,18,ss$)'พิมพ์ชื่อ
strx=strx1
stry=stry1
เครื่องพิมพ์สาย (strx-50, stry-30) -
(strx kan-10,stry-30)'พิมพ์แถวแรก
อื่น
stry=stry linw
สิ้นสุดถ้า
ต่อไป
เซนต์=stry
Ifp<page1Then' ทำเครื่องหมายบรรทัดว่างที่เหลืออยู่ในหน้าสุดท้าย
Foro=pTopage1 1
strx=strx1
เครื่องพิมพ์ Line (strx-50, stry-30)
-(strx kan-10,stry-30)
stry=stry linw
ต่อไป
สิ้นสุดถ้า
stry=stry1
strx=strx1
stry=stry1'linecol
ฟอร์น=0ถึง8
เครื่องพิมพ์สาย (strx-30, stry-30) -
(strx-30,stry (หน้า 1 2)*linw)
strx=strx ก(n)
ต่อไป
เครื่องพิมพ์สาย (strx-30, stry-30) -
(strx-30,stry (หน้า 1 2)*linw)
หน้า=หน้า 1
foot$="th" cstr(pp) "หน้า"
dd=prnt1(strx-30-1000,stry (หน้า 1 2)
*linw 100,10,foot$)'พิมพ์หมายเลขมุมหน้า
เครื่องพิมพ์EndDoc'สิ้นสุดการพิมพ์
จบซับ
----วิธีนี้สามารถปรับแบบอักษร ลักษณะแบบอักษร รูปร่างเส้น หน้า ขนาดกระดาษ ฯลฯ ได้อย่างง่ายดายผ่านการเขียนโปรแกรมที่ยืดหยุ่น สามารถพิมพ์ผลงานออกมาได้อย่างน่าพอใจ ถ้า MICROSOFTWORD และ MICROEXCEL ได้รับการติดตั้งบนคอมพิวเตอร์ของคุณ วิธีที่น่าตื่นเต้นที่สุดในการใช้งานก็คือการส่งตาราง GRID ไปยัง MICROSOFTWORD และ MICROEXCEL ผ่าน VB สร้างตาราง MICROSOFTWORD และ MICROEXCEL ด้วยวิธีนี้ คุณสามารถใช้ประโยชน์จากฟังก์ชันการพิมพ์และการแก้ไขของ MICROSOFTWORD และ MICROEXCEL ได้อย่างเต็มที่ เพื่อพิมพ์ผลลัพธ์ที่สมบูรณ์แบบยิ่งขึ้น แนะนำทีละอันด้านล่าง
----วิธีที่ 3: พิมพ์โดยสร้างแบบฟอร์ม MICROSOFTWORD
----1. เขียนในแถลงการณ์:
DimmswordAsObject
----2. เพิ่มปุ่มคำสั่งพิมพ์ (command2) และตั้งค่า CAPTION เป็น "สร้างตาราง WORD"
"Format" เขียนโค้ดต่อไปนี้
คำสั่งย่อยส่วนตัว2_คลิก()
screen.MousePointer=11
Setmsword=CreateObject("word.basic")
DimAppID,ค่าส่งคืน
appID=เชลล์("d:/office97/office/WINWORD.EXE",1)
'เรียกใช้ MicrosoftWord
msword.AppActivate"MicrosoftWord"
'msword.AppActivate"MicrosoftWord",1
เต็ม
Screen.MousePointer=0
สิ้นสุดย่อย
----2. เขียนกระบวนการต่อไปนี้แบบเต็ม()
ซับเต็ม()
DimiAsInteger, jAsInteger,
colAsInteger, แถว AsInteger
DimcellcontentAsString
ฉันซ่อน
cols=4'จำนวนคอลัมน์ในตาราง
row=gridrow' พิมพ์จำนวนแถวในตาราง
msword.filenewdefault
msword.MsgBox"กำลังสร้างรายงาน MS_WORD
กรุณารอสักครู่...","",-1
msword.leftpara
msword.screenupdating0
msword.tableinserttable,col,แถว,,,16,167
msword.startofdocument
forj=0togridrow'จำนวนแถวในตาราง
grid1.row=เจ
Fori=1Tocols
Gri1d.col=i
IfIsNull(grid1.text)แล้ว
เนื้อหาเซลล์$=""
อื่น
เนื้อหาเซลล์$=grid1.text
สิ้นสุดถ้า
msword.Insertcellcontent$
msword.nextcell
เน็กซ์ตี
เน็กซ์จ
msword.tabledeleterow
msword.startofdocument
msword.tableselectrow
msword.tableheadings1
msword.centerpara
'msword.startdocument
msword.screenrefresh
msword.screenupdating1
msword.MsgBox"สิ้นสุด",-1
ฉัน.แสดง
สิ้นสุดย่อย
----วิธีที่ 4: พิมพ์แบบฟอร์มโดยส่งไปที่ MICROSOFTEXCEL
----1. เพิ่มปุ่มคำสั่งพิมพ์ (command3) และตั้งค่า CAPTION เป็น "สร้างตาราง EXCEL"
"Format" เขียนโค้ดต่อไปนี้
คำสั่งย่อยส่วนตัว3_คลิก()
DimiAsInteger
DimjAsInteger
DimxlAppAsExcel.application
DimxlBookAsExcel.สมุดงาน
DimxlSheetAsExcel.แผ่นงาน
SetxlApp=CreateObject("Excel.Application")
xlApp.Visible=จริง
'SetxlBook=xlApp.Workbooks.Add
'OnErrorResumeถัดไป'
SetxlBook=xlApp.Workbooks.Add'Open("d:/text2.xls")
SetxlSheet=xlBook.Worksheets(1)
xlSheet.Cells(6,1)="ฉัน"
Fori=0Togridrow
grid1.Row=i
ฟอร์จ=0ถึง6
Grid1.Col=j
IfIsNull(Grid1.Text)=Falseแล้ว
xlSheet.Cells(i 5,j 1)=Grid1.Text
สิ้นสุดถ้า
เน็กซ์จ
เน็กซ์ตี
ExitSub->