Bước 3: Hàm PaintPicture cho phép ta copy rất nhanh một khối dữ liệu đồ họa, nói nôm na là một khu vực trong một hình đồ họa trên form, PictureBox đến một nơi khác. Thí dụ ta copy một hình từ chỗ nầy đến chỗ khác trong form, hay từ form/PictureBox ra đối tượng Printer để sau đó ta in nó ra.
Ta nhấp đúp lên PictureBox Icon trong ToolBox để đặt một PictureBox lên form với các thuộc tính sau:
Name: picDohoa.
Visible: False (để ta không thấy nó lúc chạy chương trình).
Bước 4: Bây giờ ta load một hình vào thuộc tính Picture của picDohoa bằng cách chọn một tập tin hình ảnh từ cửa sổ Properties. Ở đây ta chọn INTL_NO.BMP từ folder \Program Files\Microsoft Visual Studio\Common\Graphics\Bitmaps\Assorted
![]() |
![]() |
Hình II.3: Lựa chọn tập tin ảnh
Trong chương trình nầy ta muốn hễ khi đè nút trái của Mouse xuống và di chuyển chuột thì khi con trỏ chuột đi đến đâu, hình INTL_NO được vẽ đến đó.
Bước 5: Ta sẽ dùng một biến để đánh dấu nút-trái-của-Mouse-Down, đặt tên là IsMousedown. Khi nhận được sự kiện MouseDown ta đặt IsMouseDown thành True, và khi nhận được sự kiện MouseUp ta đặt lại IsMouseDown thành False. Mỗi lần nhận được sự kiện MouseMove thì nếu IsMouseDown là True ta sẽ vẽ hình INTL_NO.
Trong phần [General]\[Declaration], khai báo biến sau:
Dim IsMouseDown As Boolean
Bước 6: Đầu tiên biến này phải được khởi tạo là False trong sự kiện Form_Load:
Private Sub Form_Load()
IsMouseDown = False
End Sub
Bước 7: Ta xử lý các sự kiện MouseUp, MouseDown, MouseMove của Form như sau:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
IsMouseDown = True
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If IsMouseDown Then
' Vẽ hình tại vị trí X, Y
PaintPicture picDohoa.Picture, X, Y, picDohoa.Width, picDohoa.Height
End If
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
IsMouseDown = False
End Sub
Bước 8: Chọn Form1 trong cửa sổ Project Explorer, ta sẽ xử lý sự kiện khi ta nhấp chọn mục Xoa man hinh trên menu như sau:
Private Sub mnuXoa_Click()
Cls
End Sub
Bước 9: Khi ta nhấp chọn mục Thoat trên menu, chương trình tự động đóng lại ⇒ sự kiện mnuThoat_Click được xử lý:
Private Sub mnuThoat_Click()
End
End Sub
Bước 10: Lưu dự án lại, chạy chương trình, thử kéo chuột trên Form. Quan sát kết quả.
HÀM PSET
Bước 11: Ta dùng hàm PSet (Point Set) để vẽ một pixel lên form. Ta cần cho biết PSet ở đâu và với màu gì, tức là ta cho nó tọa độ X,Y của pixel và một màu được tính từ hàm RGB.
Dưới đây là đoạn mã để vẽ pixels đủ màu lên form một cách bất chừng (randomly) về vị trí và màu sắc khi người dùng chọn mục Pixel trên menu:
Private Sub mnuPixel_Click()
Dim i As Integer
' Tọa độ vẽ (X, Y)
Dim iXCoord As Integer
Dim iYCoord As Integer
' Màu cơ bản
Dim iRed As Integer
Dim iGreen As Integer
Dim iBlue As Integer
' Sinh các số ngẫu nhiên
Randomize
' Vẽ 2000 điểm ngẫu nhiên
For i = 1 To 2000
' Lấy tọa độ X (ngẫu nhiên)
' Note that Rnd(1) returns a real number between 0 and 1, eg: 0.384
iXCoord = Int(Rnd(1) * ScaleWidth)
' Lấy tọa độ Y (ngẫu nhiên)
iYCoord = Int(Rnd(1) * ScaleHeight)
' Lấy giá trị ngẫu nhiên từ 0 – 254 cho mỗi màu cơ bản
iRed = Int(Rnd(1) * 255)
iGreen = Int(Rnd(1) * 255)
iBlue = Int(Rnd(1) * 255)
' Vẽ 1 pixel tại tọa độ iXCoord, iYCoord
PSet (iXCoord, iYCoord), RGB(iRed, iGreen, iBlue)
Next
MsgBox ("Ve xong!")
End Sub
Trong thí dụ trên ta dùng hàm Randomize để sinh sẵn trong bộ nhớ các số thực bất chừng từ 0 đến 0.999. Sau đó mỗi lần ta gọi hàm Rnd(1) là nó sẽ trả về một số thực bất kỳ từ bộ số do hàm Randomize sinh ra. Do đó, Rnd(1) * ScaleWidth sẽ cho ta một số thực có trị số từ 0 đến ScaleWidth. Muốn đổi số thực đó ra số nguyên, ta dùng hàm Int.
Bước 12: Lưu dự án lại, chạy chương trình. Nhấp chọn Pixel trên menu.






{ 0 nhận xét }