H ng d n l p trình VB.NET ướ Ch ng 18: Làm vi c v i máyươ
in
Ch ng ươ 18:
Làm vi c v i máy in
--------oOo--------
N i dung th o lu n:
- In đ h a trong ch ng trình VB ươ
- In văn b n trong ch ng trình VB ươ
- In tài li u nhi u trang trong ch ng trình VB ươ
- S d ng h p tho i Print, Page Setup, Print Preview
Trong ch ng này chúng ta s h c cách tích h p ch c năng in n vào trong form cũngươ
nh cách x lý in n đ h a, in văn b n và tài li u nhi u trang.ư
Chú ý:
- L p đ i t ng PrintDocument cung c p nhi u ch c năng in n h n ượ ơ
- Chúng ta s d ng các đi u khi n h p tho i PrintDialog, PrintPreViewDialog và
PageSetupDialog đ th c thi tác v in n.
- Đ in tài li u nhi u trang, chúng ta ph i t o ra th t c s s ki n PrintPage
x thao tác in m i l n t ng trang tài li u. Tuy nhiên h u nh các ch c năng ư
in n chúng ta đ u đ c h tr trong th vi n System.Drawing.Printing. ượ ư
1. S d ng l p Printdocument
Printdocument l p b n th ng xuyên s d ng khi in n. ườ Vi c s d ng l p này b ng
cách ch n nó trên toolbox thêm vào d án nh các đi u khi n khác. L p này n m ư
trong th vi n System.Drawing.Printing. B n c n imports ra đ u ch ng trình khiư ươ
mu n s d ng. Bài t p MyPrintsGraphics sau đây s h ng d n cách s d ng đ i ướ
t ng này.ượ
1.1. S d ng đi u khi n PrintDocument
Tìm hi u ch ng trình: ươ
Ch ng trìnhươ s bao g m m t textbox cho phép nh p đ ng d n c a file graphic c n in ườ
m t nút nh n cho phép in ra. ta không n i máy in nên ta s l u ra m t file đ nh ư
d ng *.mdi.
Thi t k giao di n:ế ế
B n t o m i m t Solution và thêm vào m t d án cùng tên MyPrintsGraphics thi t ế
k giao di n nh hình d i đây. Trong đó các đ i t ng có thu c tính nh sau:ế ư ướ ượ ư
Biên so n: Ph m Đ c L p - 1 - Add: cnt-44-dh, VIMARU
H ng d n l p trình VB.NET ướ Ch ng 18: Làm vi c v i máyươ
in
- TextBox1: thu c tính text là đ ng d n đ n file graphics c a b n. đây là file ườ ế
NFS2SER.ICO tôi đã chép vào th m c ch a d án.ư
- Label1 và nút nh n có text nh hình. ư
B n cũng thêm vào đi u khi n PrintDocument1 t ToolBox.
Vi t mã:ế
Tr c h t ta t o m i m t module tên ướ ế ModulePrinting.vb ch a hàm PrintGraphic
hàm ph c v in n s đ c tri u g i trong th t c Button1_Click. N i dung c a module ượ
nh sau:ư
Imports System.Drawing.Printing
Module ModulePrinting
Public Sub PrintGraphic(ByVal sender As Object, _
ByVal ev As PrintPageEventArgs)
'V nh đ h a b ng DrawImage
ev.Graphics.DrawImage _
(Image.FromFile(Form1.TextBox1.Text), _
ev.Graphics.VisibleClipBounds)
'Xác đ nh không còn trang khác
ev.HasMorePages = False
End Sub
End Module
Th t c này h t nhân c a tác v in n t ng trang khi s ki n PrintPage c a đi u
khi n PrintDocument1 x y ra sau l i g i PrintDocument1.Print(). Trong đó, ev dùng đ
tham chi u đ n các thông s PrintDocument truy n vào. Ta dùng ế ế ev đ l y v đ i
t ng Graphics dùng v ra máy in đ ng th i s d ng ph ng th c DrawImage đ vượ ươ
nh. Thu c tính HasMorePage đ t là false đ ch in trong m t trang.
Tr l i c a s thi t k form1. B n vào ch đ Code Editor đ t khai báo sau đ u ế ế ế
Form1:
Biên so n: Ph m Đ c L p - 2 - Add: cnt-44-dh, VIMARU
H ng d n l p trình VB.NET ướ Ch ng 18: Làm vi c v i máyươ
in
Imports System.Drawing.Printing
Ti p theo ta t o th t c Button1_Click nh sau:ế ư
Private Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Try
AddHandler PrintDocument1.PrintPage, _
AddressOf ModulePrinting.PrintGraphic
PrintDocument1.Print()
Catch ex As Exception
MessageBox.Show _
("Sorry-there is problem printing", ex.ToString)
End Try
End Sub
Phát bi u AddHandler yêu c u th t c x PrintGraphic trong Module s đ c tri u ượ
g i khi s ki n PrintPage c a đi u khi n PrintDocument x y ra. Hàm AddressOf dùng
đ ch đ nh đ a ch c a th t c PrintGraphic trong ModulePrint.vb. Đây k thu t
chuy n giao (delegate) trong các ngôn ng c a n n .NET. B n chuy n đ a ch c a hàm
cho đ i t ng và đ i t ng s tri u g i hàm. ượ ượ
Ch y ch ng trình: ươ
n F5 đ ch y ch ng trình. B n th nh p m i m t đ ng d n đ n đ i t ng in ươ ườ ế ượ
hay click vào nút nh n đ in luôn. K t qu : ế
Biên so n: Ph m Đ c L p - 3 - Add: cnt-44-dh, VIMARU
H ng d n l p trình VB.NET ướ Ch ng 18: Làm vi c v i máyươ
in
B n ch n n i l u file *.mdi. n nút save đ l u. B n cũng th d ng tác v in ơ ư ư
b ng cách n nút Cacel.
1.2. In văn b n t đ i t ng TextBox ượ
Bài t p sau chúng ta s in đo n văn b n trong m t ô textbox. Ta s không dùng tr c ti p ế
đ i t ng PrintDocument n a t o nó b ng mã ch ng trình. Ta cũng dùng ph ng ượ ươ ươ
th c Graphics.DrawString thay cho ph ng th c DrawImage tr c đây. ươ ướ
Bài t p MyTextPrinting:
Tìm hi u ch ng trình: ươ
Ch ng trình g m m t ô textbox m t nút nh n. Ô textbox cho phép nh p đo n vănươ
b n và nút nh n s ti n hành in đo n văn b n có trong textbox đó ra. ế
Thi t k giao di n:ế ế
B n t o m i m t Solution thêm vào m t d án cùng tên MyTextPrinting, thi t k ế ế
giao di n nh hình: ư
Biên so n: Ph m Đ c L p - 4 - Add: cnt-44-dh, VIMARU
H ng d n l p trình VB.NET ướ Ch ng 18: Làm vi c v i máyươ
in
Trong đó các thu c tính c a các đi u khi n nh sau: đ i t ng TextBox1: ScrollBars ư ượ
Both, MultiLine – True. Các đ i t ng và thu c tính c a nó nh hình. ượ ư
Vi t mã:ế
Tr c h t mu n s d ng in n ta c n đ t khai báo sau đ u ch ng trình:ướ ế ươ
Imports System.Drawing.Printing
Khai báo m t hàm ph c v in đo n văn b n trong ô textbox. B n t o ngay trong c a s
code editor c a form1.vb d i dòng khai báo form1 nh sau: ướ ư
Private Sub PrinText(ByVal sender As Object, _
ByVal ev As PrintPageEventArgs)
's d ng DrawString đ v chu i c n in
ev.Graphics.DrawString(TextBox1.Text, _
New Font("Arial", 11, FontStyle.Regular), _
Brushes.Black, 120, 120)
'Cho bi t không còn trang ti p theoế ế
ev.HasMorePages = False
End Sub
T o th t c Button1_Click nh sau: ư
Try
'Khai báo bi n PrintDoc có ki u PrintDocumentế
Dim PrintDoc As New PrintDocument()
AddHandler PrintDoc.PrintPage, AddressOf Me.PrinText
'B t đ u in
PrintDoc.Print()
Catch ex As Exception
MessageBox.Show("Sorry-There is a problem printing", _
ex.ToString())
End Try
Biên so n: Ph m Đ c L p - 5 - Add: cnt-44-dh, VIMARU