Title Forum
IndexIndex  CalendarCalendar  GalleryGallery  Trợ giúpTrợ giúp  Tìm kiếmTìm kiếm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  
News & Announcements
  • Gallery & Others
  • Top posters
 N.H.M (706)
 nhuantrung0210 (323)
 TjaGoChangLj (227)
 GVRFnu-Bjn (190)
 lisaidong (122)
 phongngan1997 (94)
 puppy:x* (85)
 anhcudo01 (69)
 taoghetmay (68)
 anhlathe47 (45)
Similar topics

Share | 
 

 Chương Mười Hai - Dùng Đồ Họa Phần II (Học visual basic 6.0)

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
TjaGoChangLj
Administrator
Administrator


Thanked : 14


Bài gửiTiêu đề: Chương Mười Hai - Dùng Đồ Họa Phần II (Học visual basic 6.0)   16/6/2011, 1:53 pm

Khóa Hàm Thụ Visual Basic 6.0


Chương Mười Hai - Dùng Đồ Họa (Phần II)





In trên màn ảnh


VB6 có method Print cho ta in thẳng trên Form, PictureBox hay Printer. Ba loại control nầy được coi như những khung vải
mà họa sĩ vẽ lên.

Bạn hãy khởi động một chương trình VB6 mới. Đặt lên form một PictureBox tên Picture1 và một button tên CmdPrintTenLines
với Caption Print Ten Lines. DoubleClick lên button nầy và viết code dưới đây:

<blockquote>
Private Sub CmdPrintTenLines_Click()
Dim i As Integer
' String variable used for display
Dim strLine As String
' Write 10 lines, one under the other
For i = 1 To 10
strLine = "This is line " & CStr(i)
Me.Print strLine ' Print on Form
Picture1.Print strLine ' Print on Picture1
Next
End Sub
</blockquote>
Bạn hãy chạy thử program rồi click nút Print Ten Lines. Trong trường hợp nầy ta dùng default Font và Color để in 10 hàng.
Sau mỗi Print, chương trình tự động xuống hàng.

Kế đó, thêm một button tên CmdPrintFontSizes với Caption Print Font Sizes. DoubleClick lên button nầy và viết code dưới đây:

<blockquote>
Private Sub CmdPrintFontSizes_Click()
Dim i As Integer
' Print numbers 1 to 10, one after the other on the same line
For i = 1 To 10
' Define Font size
Me.Font.Size = Me.Font.Size + i
' Define Color using Function QBColor
Me.ForeColor = QBColor(i)
' Print without moving to next line. Note the semicolon ";"
Me.Print Str(i);
Next
End Sub
</blockquote>
Trong Sub CmdPrintFontSizes_Click, ta thay đổi
cở kiểu chữ để cho các con số được in ra lớn lên dần dần và thay đổi màu của các con số bằng cách dùng function QBColor. Để in các con số liên tục không
xuống hàng ta dùng method Print với semicolon (;). Bạn hãy chạy chương trình lại. Click nút Print Ten Lines
rồi click nút Print Font Sizes, kết quả sẽ giống như dưới đây:


<blockquote></blockquote>
Bây giờ bạn thử minimize cửa sổ của chương trình, kế đó restore nó lại kích thước cũ. Bạn sẽ thấy các hàng ta in lúc nãy
không còn trong form hay PictureBox nữa.

Lý do là khi ta Print lên form hay PictureBox, các hình ấy được vẽ trong graphic địa phương chớ không được VB6 kể là
một phần của cửa sổ. Muốn tránh trở ngại nầy ta phải dặn VB6 nhớ vẽ lại bằng cách set property AutoRedraw của form và
Picture1 ra True.

<blockquote></blockquote>
Hệ thống tọa độ


Khi đặt một Object hay vẽ một cái gì lên màn ảnh (screen) hay form .v.v.. ta cần phải
chỉ định Object ấy nằm chỗ nào kể từ (with reference to) cái góc Trên Trái (Top Left) của màn ảnh hay form.

Cái góc Trên Trái là Trung tâm tọa độ của screen hay form. Ở đó tọa độ X và Y đều bằng 0, ta viết là 0,0.
Nếu ta đi lần qua phải theo chiều rộng của screen thì tọa độ X tăng lên. Nếu ta đi dọc
xuống dưới theo chiều cao của screen thì tọa độ của Y tăng lên.

Kế đến là đơn vị đo lường ta dùng để biểu diễn khoảng cách. Trong bài
trước ta đã nói đến độ mịn của màn ảnh (screen resolution) dựa
vào pixel. Ta có thể dùng đơn vị pixel để nói một Object có tọa độ X và Y mỗi chiều bao nhiêu pixels
tính từ trung tâm tọa độ.

Như thế, ngay cả trên cùng một màn ảnh khi ta tăng độ mịn nó lên thì một Object đã được đặt
lên màn ảnh theo đơn vị pixel sẽ xích qua trái và lên trên một ít vì kích thước một pixel bây giờ nhỏ hơn lúc trước một chút.

Hình dưới đây minh họa các kích thước của màn ảnh và Form.
<blockquote></blockquote>
Điểm cần biết là có những phần như title barborder của một form ta không thể vẽ lên được. Do đó
diện tích còn lại của form được gọi là Client Area. Chiều rộng và chiều cao của Client Area được
gọi là ScaleWidthScaleHeight.

Nếu muốn khoảng cách từ một Object đến trung tâm tọa độ, hay kích thước của chính
Object, không hề thay đổi dù ta có tăng, giảm độ mịn của màn ảnh hay in hình ra printer
(thí dụ ta muốn nó luôn luôn dài 5cm chẳng hạn) thì ta dùng hệ thống tọa độ theo đơn vị twips của form.

Twips là Default Coordinate System của VB6. Trong hệ thống nầy mỗi điểm là tương đương với
1/567 centimeter. Do đó, nếu bạn vẽ một dường dài 567 twips nó sẽ hiển thị dài 1cm trên màn ảnh, và
khi bạn in nó ra, nó cũng dài 1cm trên giấy. Tức là độ dài thật của Object không tùy thuộc vào loại
màn ảnh (độ mịn cao hay thấp) hay printer. Người ta nói nó là Device independent
coordinate system (Hệ thống tọa độ độc lập với dụng cụ). Nói một cách khác Twips cho ta thật sự
what you see is what you get (WYSIWYG - thấy sao có vậy), rất thích hợp với Desktop
publishing.

Bạn có thể thay đổi hệ thống tọa độ của một form bằng cách edit property ScaleMode qua cửa sổ Properties như sau:

<blockquote></blockquote>
Ghi chú: Thay đổi trị số ScaleMode không có hiệu lực ngay mà chỉ ảnh hưởng những gì được thiết kế sau đó.

Giống như khi ta Edit Text trong Notepad, Text Cursor (thanh | chớp chớp) là vị trí hiện tại, nơi sẽ hiển thị cái chữ ta
đánh sắp tới, trong graphic ta có một Cursor vô hình, nơi sẽ hiển thị cái gì ta sắp Print.
Ta chỉ định vị trí của graphic cursor ấy bằng cách cho trị số của CurrentXCurrentY.

Bạn hãy khởi động một dự án VB6 mới và viết code cho Event Resize của form chính như sau:

<blockquote></blockquote>
Thử chạy chương trình và Resize form. Mỗi khi bạn Resize form, chữ X sẽ được dời đến vị trí khoảng chính giữa của Client Area của form.
<blockquote></blockquote>
Dùng Graphics


Đã có một chút căn bản về graphics của VB6, bây giờ ta có thể đặt những graphics lên form. Có hai cách để làm chuyện ấy:

  • Dùng Graphical Controls: Ta có PictureBoxImage có thể chứa hình ảnh. Trong khi LineShape
    có thể vẽ đường thẳng hay các hình chữ nhật, tròn .v.v.. trên form, lúc thiết kế.
  • Dùng Graphics Methods: Đây là những mệnh lệnh cho ta vẽ trực tiếp lên form lúc run-time. Các mệnh lệnh
    VB6 cho ta là Cls, Pset, Point, LineCircle.

<blockquote></blockquote>
Tùy theo hoàn cảnh, bạn có thể lựa chọn cách nào tiện dụng.
PictureBox và Image


Dùng PictureBox hay Image là cách dễ nhất để hiển thị một graphic trong form. Lúc thiết kế,
bạn có thể đánh thẳng tên của graphic vào property Picture trong cửa sổ Properties. Form cũng nhận
property Picture. Bạn cũng có thể click lên bên phải chữ property Picture để browse và chọn
một graphic, thường là Bitmap hay Icon.

<blockquote></blockquote>
Sự khác biệt chí giữa Image và PictureBox là Image có property Stretch mà ta có thể set thành True
để kéo dãn graphic ra cho chiếm trọn diện tích của Image. Image là một grapgic control lightweight (nhẹ ký), tức
là nó không đòi hỏi nhiều memory và chạy nhanh hơn PictureBox. Lý do là PictureBox là một container, tức
là nó có thể chứa các controls khác. Ngoài ra, PictureBox cũng cho phép ta vẽ lên trên nó giống như trên form.

Trong hình dưới đây, trong lúc thiết kế ta đặt một PictureBox và một Image cùng một cỡ lên cùng một form.
Kế đó ta assign cùng một picture hình happy.bmp cho cả hai. Riêng với Image, ta set property
Stretch của nó ra True.
<blockquote></blockquote>
Chỉ định hình ảnh lúc run-time


Trong lúc program đang chạy, ta có thể thay đổi hình ảnh chứa trong PictureBox hay Image bằng cách
dùng Function LoadPicture. Nhớ là ta không thể assign trực tiếp vào Property Picture của
hai graphical controls nầy. Lý do là Property Picture chỉ là một cách thân thiện cho ta chỉ định
một graphic trong lúc thiết kế. Khi một hình ảnh đã được chỉ định rồi, VB6 chứa cả hình ấy vào
file có cùng tên với file của form nhưng với extension .frx. Tức là nếu tên của form là Form1
thì graphic của Property Picture được chứa chung với các graphics khác của form trong file Form1.frx.

Do đó, vì VB6 program chứa luôn graphic chung với nó, ta không cần phải nhắc đến tên của graphic file khi dùng
hay deploy, tức là không cần đính kèm tên graphic file trong Setup file cho người ta install.
Dưới đây là code mẫu để lúc run-time ta load một graphic tên sad.bmp nằm trong Subfolder tên images của App.path
vào Image control tên Image1.

<blockquote>
Private Sub CmdLoad_Click()
Dim LocalDir As String
' Assign Folder where program resides to LocalDir
LocalDir = App.Path
' Append right backslash if last character is not ""
If Right(LocalDir, 1) <> "" Then
LocalDir = LocalDir & ""
End If
' Load graphic "sad.bmp" from SubFolder "images" into Image1
Image1.Picture = LoadPicture(LocalDir & "imagessad.bmp")
End Sub
</blockquote>
Dĩ nhiên, nếu ta muốn load graphic lúc run-time thì phải cung cấp graphic file riêng.


Control Shape


Control Shape cho phép bạn vẽ những hình đơn giản như đường thẳng, hộp, vòng tròn trên
form, lúc thiết kế. Sau khi DoubleClick lên control Shape trong Toolbox để thêm một control Shape vào form,
bạn chọn loại Shape của nó từ cửa sổ Properties
rồi nắm vào một góc của Shape trên form drag lớn nhỏ tùy ý.

Muốn sơn bên trong một Shape, bạn chọn màu từ property FillColor. Property FillColor cũng giống
như BackColor của các controls khác, nhưng nó chỉ có hiệu lực khi bạn cho property FillStyle một
trị số khác hơn là 1- Transparent (trong suốt), thí dụ như 0- Solid (dày đặc).

<blockquote></blockquote>
Control Line


Tương tự với các properties Fill của Shape, đối với Line bạn có các properties BorderColor, BorderStyle và BorderWidth.
Border color chỉ định màu của chính đường thẳng, BorderStyle để cho bạn lựa đường liên tục hay
gạch chấm, và BorderWidth để làm cho đường dày to hơn. Các properties nầy cũng áp dụng cho chu vi (đường
bao quanh) của các hình chữ nhật, tròn .v.v.

<blockquote></blockquote>
Bạn có thể tải về chương trình Graphics.zip tại đây.
Chữ Ký Cá Nhân

Về Đầu Trang Go down
Xem lý lịch thành viên
 

Chương Mười Hai - Dùng Đồ Họa Phần II (Học visual basic 6.0)

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
Vn-Screen Forum :: Công Nghệ Thông Tin :: Khu Lập Trình :: Visual Basic-
VN-SCREEN.DARKBB.COM
Design by N.H.M - Developed by Vn-Screen Member
Free forum | © phpBB | Free forum support | Liên hệ | Report an abuse | Free blog