In ấn trong VB6

Người đăng: Tốt đỏ 5/10/09

Tên bài viết: In ấn trong VB6

Tác giả: phongvanvu
Nguồn : http://www.caulacbovb.com/forum/viewtopic.php?f=22&t=764
Tóm tắt:Mặc dù máy tính là một thế giới không dùng giấy, nhưng việc in ấn vẫn là một trong những chức năng quan trọng của ứng dụng và thông dụng nhất trong các chương trình. Mặc dù VB cho phép in ấn dễ dàng nhưng thực sự đây không phải là thế mạnh của VB, bài này giới thiệu cách dùng các chức năng cần thiết cho việc in ấn.

 Các khái niệm
VB cung cấp đối tượng Printer và Printers cho cho tất cả các ứng dụng VB khi chạy. Đối tượng Printers cung cấp thông tin về toàn bộ các máy in đã cài trên máy tính. Đối tượng Printer điều khiển việc xuất ra máy và nhận thông tin như tên máy in.
Trước hết, hãy xem các bước cơ bản để in trong VB. Đầu tiên, chúng ta sẽ gửi một thông tin đơn giản ra máy in, chúng ta chỉ cần gọi:

Mỗi lần bạn gọi hàm Print, kết quả xuất sẽ chuyển xuống dòng kế tiếp. Vậy:
  1. Printer.Print “Hello”
  2. Printer.Print “Goodbye”

Sẽ hiển thị
Hello
Goodbye
Trên giấy.
Nếu bạn muốn in trên một trang mới, bạn chỉ cần gọi hàm NewPage:

Khi bạn muốn kết thúc xuất dữ liệu ra máy in, bạn chỉ cần gọi hàm EndDoc;

Windows sẽ đẩy văn bản của bạn ra máy in.
In văn bản
Khi dùng đối tượng Printer, bạn cũng có thể định dạng cho văn bản như dùng đối tượng Font với các thuộc tính kèm theo như FontSize, FontBold, FontItalic,FontStrikeThru và FontUnderline. Để đổi font, chỉ cần chọn thuộc tính FontName. Ví dụ:

Thay đổi font thành Tahoma. Thay đổi cỡ font, gọi Printer.FontSize. Phần lớn các tùy chọn định dạng khác thuộc dạng True False rất dễ để áp dụng. Mã sau là một minh họa đơn giản:
  1. With Printer
  2.     Printer.Print "Normal Line"
  3.     .FontBold = True
  4.     Printer.Print "Bold Line"
  5.     .FontItalic = True
  6.     Printer.Print "Bold and Italic Line"
  7.     .FontBold = False
  8.     .FontItalic = False
  9.     Printer.Print "Second Normal Line"
  10.     .EndDoc
  11. End With

Lưu ý:
Dù tôi dùng phát biểu With, tôi vẫn phải dùng Printer.Print. Đây là một khác biệt trong VB vì hàm Print không gắn với bất kỳ đối tượng nào. Nếu bạn tìm trong Object Browser ( nhấn F2), bạn sẽ không tìm thấy nó. Print là hàm mà VB gắn với đối tượng đứng trước nó. Ví dụ PictureBox1.Print sẽ xuất văn bản vào PictureBox. Như vậy, hành vi của Print phụ thuộc vào đối tượng đứng trước nó. Tuy nhiên, cha đẻ của VB đã không thiết kế để kèm theo nó với phát biểu With.
Xem tất cả các lựa chọn của font nhấn F2 gọi Object Browser chọn Printer từ Classes.
Canh lề trong VB là khá đơn giản. VB không cho phép canh lề. Nhưng chúng ta có thể tính điểm giữa của trang trừ đi độ dài văn bản sẽ là canh giữa. Ví dụ, mã sau in số trang vào giữa của trang.
  1. sMsg = "Page " & Printer.Page ' In số trang
  2. HWidth = Printer.TextWidth(sMsg) / 2 ' Lấy nửa trang rộng.
  3. HHeight = Printer.TextHeight(sMsg) /2 ' Lấy nửa trang cao.
  4. Printer.CurrentX = Printer.ScaleWidth / 2 - HWidth
  5. Printer.CurrentY = Printer.ScaleHeight / 2 - HHeight
  6. Printer.Print sMsg

Mã trên dùng CurrentX và CurrentY để đặt vị trí xuất ra của văn bản. Nếu bạn muốn văn bản được in ở giữa ngay đầu, đơn giản không đặt CurrentY nữa.
In hình ảnh
Xuất hình ảnh ra máy in cũng như xuất hình ảnh ra PictureBox. Chúng ta sẽ tìm hiểu một vài lệnh cơ bản ở đây nhưng trước hết hãy lưu ý tới 2 lệnh CurrentX và CurrentY. Nó cho biết tọa độ xuất ra máy in. VB tự động thay đổi hai giá trị này sau khi xuất. Cho ví dụ, nếu bạn vẽ một đường thẳng trên giấy khi bạn ngừng vẽ ngòi bút sẽ ở cuối đường thẳng nơi bạn dừng vẽ chứ không phải ở đầu. Cũng vậy với CurrentX và CurrentY. Nếu bạn gọi hàm Line, đường thẳng sẽ được vẽ và CurrentX với CurrentY chỉ tới cuối đường thẳng. Bạn có thể thay đổi tọa độ cho văn bản hoặc đường thẳng tiếp theo.
Lưu ý:
VB in ra giấy và vẽ vào form như nhau. Nên nếu bạn thực hành và muốn tiết kiệm giấy hoặc bạn không có máy in, hãy chuyển Printer.Function thành Function. Ngoài ra, bỏ dòng Printer.EndDoc đi. Đặt backcolor của form là màu trắng cho dễ nhìn1 và autoredraw là true. Dữ liệu in ra giấy và in ra form là như nhau. Bạn cũng có thể dùng cách này để tạo PrintScreen.
Lệnh Line
Lệnh này vẽ đường thẳng, dùng cú pháp:
  1. Printer.Line [Step] (x1, y1) [Step] - (x2, y2), [color], [B][F]

Trong đó:
(x1,y1) – điểm bắt đầu đoạn thẳng.
(x2,y2) – điểm kết thúc đoạn thẳng.
Step – tùy chọn – nếu có nó thì nó sẽ vẽ thêm x pixel từ bên phải CurrentX và y pixel dưới CurrentY. Bạn cứ thử sẽ dễ hiểu hơn. Đây là minh họa

Tương tự như
  1. Printer.Line (x1 + Printer.CurrentX, y1 + Printer.CurrentY)

Color – màu đoạn thẳng
B – tùy chọn vẽ hình hộp.
F – tùy chọn tô màu hộp. Nói rõ sau.
Xem một số ví dụ:
  1. Printer.Line (1000, 2000)-(5000, 3000), vbRed
  2. Printer.EndDoc

Vẽ một đoạn chéo từ trên xuống dưới.
Dùng kết hợp Line và Step để vẽ hình chữ nhật:
  1. Printer.Line (1000, 2000)-(5000, 2000), vbRed
  2. 'Draw down from end of first line
  3. 'don't change X pos
  4. 'change Y pos by 4000
  5. Printer.Line Step(0, 0)-Step(0, 2000), vbRed
  6. 'draw across 'change X pos by -4000
  7. 'don't change Y pos
  8. Printer.Line Step(0, 0)-Step(-4000, 0), vbRed
  9. 'draw up
  10. 'don't change X pos
  11. 'change Y pos by -4000
  12. Printer.Line Step(0, 0)-Step(0, -2000), vbRed
  13. Printer.EndDoc

Dĩ nhiên, dùng tùy chọn B, vẽ hình chữ nhật dễ hơn nhiều:
  1. Printer.Line (1000, 2000)-(5000, 4000), vbRed, B
  2. Printer.EndDoc

Lệnh Circle
Lệnh tiếp sau là Circle sẽ giúp bạn vẽ hình tròn, hình elip hay cung tròn.
Cú pháp:
  1. Printer.Circle [Step] (x, y), radius, [color, start, end, aspect]

Trong đó:
Step – tương tự như lệnh Line.
(x,y) – tâm hình tròn.
Radius – bán kính hình tròn
Color – màu hình tròn. RGB()
Start – vị trí bắt đầu cung tròn theo radian
End – vị trí kết thúc cung tròn theo radian
Aspect – độ biến dạng của hình tròn. 1 vẽ hình tròn, 1.5 vẽ hình elip
Chú ý: Radian là đơn vị đo góc. 1 Radian =180 độ/ pi. Pi=3.14….
Xem ví dụ:
  1. Printer.Circle (3000, 3000), 1000, RBG(100, 30, 30)

Vẽ hình tròn.
Để tô màu hình tròn, cần dùng lựa chọn FillStyle sẽ nói sau.
Dùng end và start, bạn có thể vẽ cung tròn.
Lưu ý:
Radian có quan hệ với pi, hằng số pi liên quan tới tham số end và start. Vậy hãy thêm miêu tả sau vào dự án của bạn:

Mã này
  1. Printer.Circle (3000, 3000), 1000, vbBlue, 0, pi

Vẽ nửa hình tròn.
Nếu bạn vẽ giá trị âm, VB vẽ thêm các đoạn thẳng tới tâm hình tròn. Ví dụ:
  1. Printer.Circle (3000, 3000), 1000, vbBlue, -1, -pi

Cuối cùng, dùng lựa chọn aspect để vẽ hình elip:
  1. Printer.Circle (3000, 3000), 1000, vbBlue, , , 0.5

Hình ảnh
Hàm khác là PaintPicture cho bạn vẽ file hình ảnh tới đối tượng printer.
Cú pháp:
  1. Printer.PaintPicture picture, x1, y1, [width1], [height1], [x2], [y2], [width2], [height2], [opcode]

Trong đó:
picture là lấy từ Form.Picture hoặc PictureBox.Picture hoặc LoadPicture.
X1,y1 là tọa độ để vẽ hình ảnh.
Width1, Height1: chiều cao, độ rộng hình ảnh xuất ra.
X2, y2, width2, height2: lấy một phần của hình ảnh.
Mã sau vẽ hình ảnh ra máy in lề là 1000 twip:
Printer.PaintPicture Picture1.Picture, 1000, 1000
Mã này:
  1. PaintPicture LoadPicture("C:sample.jpg"), 1000, 1000

Nạp hình ảnh rồi vẽ nó.
Cuối cùng:
  1. Printer.PaintPicture Picture1.Picture, 1000, 1000, 2000, 2000

Vẽ hình với kích thước định sẵn.
Các lựa chọn đồ họa
Lệnh Line và Circle cho bạn vẽ hình và đặt màu đường vẽ nhưng không cho bạn đặt độ rộng nét vẽ và tô màu bên trong.
Dùng chúng khá đơn giản. Xem dưới đây:
FillColor – Màu tô tô (RGB). Dùng hàm RGB hoặc hằng số màu để tạo nó.
FillMode – chế độ mẫu tô. Nhấn F2 chọn FillStyleConstants trong Classes.
DrawMode – chế độ vẽ. Trừ khi bạn hiểu rõ, nếu không hãy để chúng là 13-CopyPen. Các giá trị khác có thể dẫn tới kết quả không mong muốn. Xem các giá trị tại DrawModeConstants trong Object Browser.
DrawWidth – độ rộng của đường vẽ.
DrawStyle – kiểu đường vẽ như liền nét, dấu chấm… Xem DrawStyleConstants trong Object Browser.
Scale Mode – đặt đơn vị đo lường ngầm định là twip. 1444 twip=1 inch=2.54 cm.
Các lựa chọn in
Ngoài các chọn lựa đồ họa, cũng có một số thuộc tính ảnh hưởng trực tiếp tới in ấn. Đây là một số:
Copies – Số bản in.
DeviceName – Tên máy in.
DriverName – tên driver máy in.
Duplex – máy in ở chế độ Duplex hay không?
hDC – giá trị duy nhất gọi là A handle to the printers device context ( chưa biết từ tương đương trong tiếng Việt).
Orientation – hướng giấy. vbProrLandscape hay vbProrPortrait được dùng.
Page – Số của trang hiện tại. ( chỉ đọc)
PaperBin – hộc giấy dùng khi in. Xem PrinterObjectConstants xem các giá trị bắt đầu bằng vbPRBN.
PaperSize – cỡ giấy để in. Xem vbPRPS như trên.
Port – Tên cổng máy in ( chỉ đọc).
PrintQuality – Chất lượng bản in ( độ phân giải máy in). Xem vbPRPQ như trên.
TrackDefault – sẽ tự in ra máy in ngầm định khi thay đổi trong ControlPanel.
Zoom – Tỷ lệ phóng to thu nhỏ chỉ thực hiện khi máy in hỗ trợ.
Gặp lại các bạn trong những bài tiếp theo.
@vietteiv,anhtuyenbk: Xin lỗi nhé, tại soạn trước bằng MSWord nên không để ý.:)

(Theo http://www.caulacbovb.com/forum/viewtopic.php?f=22&t=764) gửi bởi phongvanvu )

1 Responses to In ấn trong VB6

  1. Nặc danh Says:
  2. cam on bai viec kha hay cua ban

     

Đăng nhận xét