Xử lý các sự kiện chuột và bàn phím

Một phần của tài liệu Tin học xây dựng (Trang 60)

I.3.1 Sự kiện chuột

Form hoặc điều khiển có thể nhận biết sự kiện chuột khi có con trỏ chuột đi ngang qua. Có 3 sự kiện chuột chủ yếu, đó là

Sự kiện Giải thích

MouseDown Xảy ra khi người sử dụng ấn chuột (chuột trái hoặc phải)

MouseUp Xảy ra khi người sử dụng thả một nút chuột bất kỳ

MouseMove Xảy ra khi con trỏ chuột di chuyển đến một điểm mới trên màn hình. Các tham số

Tham số Giải thích

Button Cho biết phím chuột nào được ấn

Shift Cho biết SHIFT hay CTRL hay ALT được ấn

X, Y Xác định vị trí của con trỏ chuột đối với hệ tọa độ của điều khiển

Ví dụ 1: Sử dụng sự kiện MouseDown để vẽ các đoạn thẳng nối tiếp nhau mỗi khi ta dùng chuột chấm một điểm trên Form. Ta có thể thực hiện điều đó với đoạn mã lệnh xử lý sự

kiện Form_MouseDown như sau:

Private Sub Form_MouseDown(Button As Integer, & Shift As Integer, X As Single, Y As Single)

Line -(X, Y) End Sub

Ví dụ 2: Sử dụng sự kiện MouseUp để hiển thị một thông điệp cho biết nút chuột nào vừa được thả. Sự kiện Form_MouseUp được xử lý:

Private Sub Form_MouseUp (Button As Integer, & _ Shift As Integer, X As Single, Y As Single) If Button = 1 Then

Print “Ban vua tha phim chuot trai” End If

If Button = 2 Then

Print “Ban vua tha phim chuot phai” End If

If Button = 4 Then

Print “Ban vua tha phim chuot giua” End If

Bộ môn Tựđộng hóa Thiết kế Cầu đường Page 39

I.3.2 Sự kiện bàn phím

Bàn phím cũng có 3 sự kiện, đó là sự kiện KeyPress (khi một phím có mã ASCII bất kỳ

được ấn), KeyDown (khi một phím bất kỳ được ấn), KeyUp (khi một phím bất kỳ được

thả)

Các sự kiện KeyDown, KeyUp có thể phát hiện một số tình huống mà sự kiện KeyPress

không phát hiện:

- Khi người dùng bấm một tổ hợp phím SHIFT, CTRL và ALT.

- Phím định hướng.

- PAGEUP và PAGEDOWN. (adsbygoogle = window.adsbygoogle || []).push({});

- Phân biệt được phím sốở bên phải bàn phím và phím sốở bên trái bàn phím.

- Đáp ứng khi thả phím.

- Phím chức năng không trùng với menu.

Các sự kiện bàn phím là không loại trừ nhau. Tức là một phím được ấn thì có thể là cả hai

sự kiện KeyPress và KeyDown cùng được phát ra. Nhưng nếu là một phím mà KeyPress

không phát hiện được thì chỉ có KeyDown và KeyUp xảy ra.

I.4 S dng Multiple document interface (MDI)

Một sốứng dụng lớn bao gồm hàng chục Form trở lên thì việc quản lý, cũng như thao tác trên các Form này là rất khó khăn, sự khó khăn này thường xuất hiện khi quản lý ứng dụng theo kiểu đơn tài liệu (Single Document), chính vì thếđể quản lý 1 ứng dụng hiệu quả, ta cần thiết kếứng dụng theo kiểu giao diện đa tài liệu (Multiple Document Interface).

I.4.1 Khái niệm

Ứng dụng đa tài liệu hay là 1 ứng dụng trong đó có 1 Form chứa các Form khác (gọi là Form Parent), các Form được chứa bởi Form Parent gọi là Form Child .

Việc sử dụng MDI trong ứng dụng tuỳ thuộc yêu cầu và mục đích của người lập trình, sử

dụng MDI nhằm mục đích quản lý các Form dùng chung 1 số Menu, giúp chuyển đổi qua lại dể dàng giửa các Form.

Có rất nhiều ứng dụng quản lý theo kiểu MDI, ví dụ: Microsoft Access, AutoCAD, Microsoft Excel…

Trong ngành xây dựng, sử dụng MDI trong trường hợp cần trình bày nhiều bảng kết quả, bản vẽ, và các giao diện nhập xuất số liệu cùng một lúc.

Bộ môn Tựđộng hóa Thiết kế Cầu đường Page 40

I.4.2 Thiết lập ứng dụng MDI

Để quản lý ứng dụng theo kiểu MDI, ta phải xác định rỏ Form nào là Form chứa (Form Parent), Form nào là Form được chứa (Form Child).

Trong mỗi dự án VB, chỉ có thể tạo được 1 MDI Form. Cách tạo ứng dụng sử dụng MDI.

- Tạo 1 dự án MdiApplication trong Visual Basic 6.

- Sau khi tạo 1 dự án thành công VB sẽ tựđộng kết xuất cho ta Form1, ta đổi tên thành frmChild. Đặt thuộc tính MDIChild = True.

- Tạo MDI Form (Project|Add MDI Form) đặt tên là frmMain. Form này có màu nền xám.

- Chạy thử chương trình ta thấy frmChild xuất hiện trong của sổ của frmMain. Việc tạo giao diện trong ứng dụng MDI hoàn toàn tương tự trong ứng dụng thông thường.

I.5 To giao din Wizard (Thut sĩ)

Một trong những giao diện được Microsoft dùng nhiều nhất cho các sản phẩm của mình là Wizard và đây cũng là loại giao diện chúng ta thường gặp nhất.

Wizard được hiểu là cách chia nhỏ những giao diện phức tạp thành một chuỗi các giao diện đơn giản. Việc làm này giúp người sử dụng dễ dàng hơn trong thao tác và tăng tính chuyên nghiệp cho chương trình.

Bộ môn Tựđộng hóa Thiết kế Cầu đường Page 41

Những lưu ý khi tạo Wizard UI

Không có định nghĩa chính xác Wizard UI là gì nhưng nếu xem những ứng dụng của nó

như “Create Form by using wizard” của MS Access ta sẽ thấy những đặc điểm sau đây của wizard.

1. Người sử dụng thao tác với một chuỗi các Form nhỏ, gọn gàng, thông suốt. 2. Từng trang có tiêu đề và mô tả giúp người dùng biết mình cần phải làm gì. (adsbygoogle = window.adsbygoogle || []).push({});

3. Từng trang yêu cầu người dùng hoàn thành một hoặc hai thao tác.

4. Ở dưới các trang có nút Tiến và Lùi (Nếu đó không phải là trang đầu hoặc cuối) 5. Tất cả các trang sẽ có nút Cancel để người dùng có thể thoát khỏi wizard

6. Trang cuối cùng có nút Finsh (Kết thúc). Đôi khi các trang khác cũng có.

7. Nếu chọn Lùi hoặc Tiến, wizard vẫn lưu lại những thông số ta đã nhập vào. 8. Các trường dữ liệu trên Form thường có những giá trị mặc định thường dùng. Khi xây dựng một giao diện Wizard nên tuân thủ những đặc điểm trên.

Các trang của wizard không nên thiết kế trên nhiều Form khác nhau, gây lãng phí bộ nhớ

và phức tạp trong quá trình xử lý, bên cạnh đó cũng tránh được việc thiết kế lại các điều khiển giống nhau.

Bộ môn Tựđộng hóa Thiết kế Cầu đường Page 42

CHƯƠNG II XĐỒ HA

Mục tiêu:

Chương này giới thiệu về các đối tượng, điều khiển đồ họa cơ bản trong VB.

Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau: - Sử dụng các phương thức đồ họa vẽ thiết lập bản vẽ.

- Sử dụng các điều khiển đồ họa xây dựng giao diện. - Xây dựng các phương thức biến đổi tọa độ.

Kiến thức có liên quan:

- Các cấu trúc lập trình trong VB. - Cách thức xử lý sự kiện.

Trong Visual Basic 6.0, các phương thức và thuộc tính được sử dụng để vẽ trên Form hoặc

PictureBox. Đồ họa trong Visual Basic 6.0 dựa trên Windows Graphics Device Interface (GDI) APIs - Application Programming Interface.

II.1 Ta độ màn hình

Góc trái trên của màn hình có tọa độ là (0,0) có nghĩa là X = 0 và Y = 0. Như vậy tức là

khi di chuyển sang phải màn hình thì X tăng lên cũng như di chuyển xuống dưới thì Y tăng lên.

Hình minh họa các kích thước của màn ảnh và Form.

Bộ môn Tựđộng hóa Thiết kế Cầu đường Page 43

Cách định nghĩa h ta độ người dùng

Đểđịnh nghĩa hệ tọa độ người dùng ta sử dụng phương thức Scale với thông sốđầu vào là tọa độ hai góc của vùng.

ctl .Scale (x1, y1)-(x2, y2)

Visual Basic sẽ thiết lập các thuộc tính sau của đối tượng ctl

Property Value

ctl.ScaleLeft x1 ctl.ScaleWidth x2 - x1 ctl.ScaleTop y1 ctl.ScaleHeight y2 - y1 Thường sử dụng 2 đơn vị tọa độ chủ yếu sau: Twips và Pixel.

Twips: Đây là hệ tọa độ mặc định dùng cho Form. Mỗi điểm sẽ bằng 1/567 cm. Đây là hệ tọa độ không bịảnh hưởng bởi thiết bị, kết quả vẽ sẽ như nhau trên màn hình VGA, trên

máy in hay trên màn hình có độ phân giải cao khác. Ví dụ khi vẽ 1 đường dài 567twips nó

sẽ hiển thị dài 1cm trên màn ảnh và khi in nó cũng dài 1cm trên giấy. (adsbygoogle = window.adsbygoogle || []).push({});

Pixel: Đây là hệ tọa độ phổ biến nhất, mỗi một điểm trên màn hình sẽ bằng chính xác với một Pixel, như vậy khi sử dụng hệ tọa độ này sẽ giúp cho các ứng dụng đồ họa thực hiện được nhanh hơn vì không phải thông qua quá trình đổi hệ tọa độ.

II.2 Màu (Color)

VB6 cung cấp 4 cách để chọn màu hiển thị cho đối tượng đồ họa: 1. Chọn trực tiếp một con số hay chọn một màu từ bảng Palette.

Bộ môn Tựđộng hóa Thiết kế Cầu đường Page 44

3. Dùng Function QBColor để chọn một trong 16 màu.

Function QBColor xuất phát từ thời Quick Basic (QBasic) của Microsoft. Trong QBasic ta

có thể dùng các con số 1,2,3 .. để chỉđịnh các màu Blue, Green, Cyan ... Ví dụ:

Các màu với Function QBColor.

Trị số Màu Trị số Màu

0 Black 8 Gray

1 Blue 9 Light Blue

2 Green 10 Light Green

3 Cyan 11 Light Cyan

4 Red 12 Light Red

5 Magenta 13 Light Magenta

6 Yellow 14 Light Yellow

7 White 15 Bright White

4. Dùng Function RGB để trộn ba màu Red, Green và Blue.

Một màu được biểu diễn bằng sự pha trộn của ba thành phần màu căn bản, mỗi màu bằng một byte có trị số từ 0 đến 255. 0 là không dùng màu ấy, 255 là dùng tối đa màu ấy.

II.3 Các thuc tính đồ ha ca Form và PictureBox

AutoRedraw – Tựđộng vẽ lại các phần đồ họa • DrawStyle – Kiểu đường hiển thị

DrawWidth – Độ rộng của đường

FillColor – Màu tô cho circles, lines và boxes.

FillStyle – Mẫu tô cho circle, lines và boxes • ScaleHeight – Chiều cao vùng client

ScaleWidth – Chiều rộng của vùng client • ScaleLeft – Giá trị bắt đầu trái của vùng client • ScaleTop – Giá trị bắt đầu trên của vùng client • ScaleMode – Đơn vị của vùng client

II.4 Các phương thc đồ ha

Các điều khiển được vẽ lên Form lúc thiết kế nhưng các phương thức đồ họa cho phép vẽ trực tiếp khi ứng dụng thi hành.

II.4.1 Phương thức Print

Phương thức Print cho phép in trực tiếp trên Form, PictureBox hay Printer.

Cú pháp [Object.]Print [Spc(n) | Tab(n) | expression charpos] (adsbygoogle = window.adsbygoogle || []).push({});

trong đó :

Object tên của đối tượng nhận kết quả vẽ (Printer, Form, PictureBox), default là

form hiện hành.

Spc(n) qui định n ký tự trống được in ra.

Tab(n) qui định n ký tự Tab được in ra, mỗi Tab đưa pointer in qua phải thêm 1 cột (vị trí các cột được qui định trước).

Bộ môn Tựđộng hóa Thiết kế Cầu đường Page 45

expression là biểu thức chuỗi hay số cần in.

charpos qui định vị trí in dữ liệu kế tiếp. Nếu charpos = ";" thì dữ liệu in kế tiếp sẽ được in liền ngay. Nếu charpos = "," thì sẽ thêm 1 Tab trước khi in dữ liệu kế. Nếu không có charpos sau cùng thì vị trí in sẽ dời xuống đầu dòng kế tiếp.

Thông tin về font chữ phải được thiết lập trước thủ tục Print thông qua các thuộc tính sau của đối tượng vẽ : FontName, FontSize, FontItalic, FontBold,...

Nên thiết lập thuộc tính CurrentX, CurrentY để qui định rõ ràng vị trí in của mỗi lệnh Print.

Ví dụ:

Private Sub CmdPrintFontSizes_Click() Dim i As Integer For i = 1 To 10 'Định nghĩa cỡ Font Me.Font.Size = Me.Font.Size + i 'Định nghĩa màu sử dụng hàm QBColor Me.ForeColor = QBColor(i) 'In trên một dòng, sử dụng dấu chấm phẩy ";" Me.Print Str(i); Next End Sub Kết quả:

II.4.2 Phương thức PSet

Phương thức này thao tác trên từng điểm và có công dụng gán một màu nào đó cho một

điểm trên đối tượng.

Cú pháp : [Object.]PSet [Step] (x, y), [color]

Object tên của đối tượng nhận kết quả vẽ (Printer, Form, PictureBox), default là

form hiện hành.

Step Tùy chọn. Nếu từ khóa Step được dùng thì (x,y) là tọa độ tương đối so với vị trí hiện hành được xác định bởi 2 thuộc tính CurrentX, CurrentY của đối tượng vẽ. Nếu từ khóa Step không được dùng thì (x,y) là tọa độ so với điểm gốc (0,0).

(x, y) Tọa độ của điểm.

Color giá trị kiểu Long miêu tả màu vẽ theo hệ màu RGB (hoặc dùng hàm

QBColor() hoặc dùng hàm RGB(r,g,b) để xác định màu vẽ).

Bộ môn Tựđộng hóa Thiết kế Cầu đường Page 46

II.4.3 Phương thức Line

Phương thức Line dùng để vẽ một đường thẳng trong quá trình thực thi chương trình.

Cú pháp: [objName.]Line [Step] (x1, y1) - [Step] (x2, y2), [color], [B][F]

Object tên của đối tượng nhận kết quả vẽ (Printer, Form, PictureBox), default là

form hiện hành.

(x1,y1) miêu tả tọa độđiểm đầu của đoạn thẳng cần vẽ trên đối tượng nhận kết quả. Nếu từ khóa Step được dùng trước tọa độ (x1,y1) thì nó là tọa độ tương đối so với vị trí hiện hành được xác định bởi 2 thuộc tính CurrentX, CurrentY của đối tượng nhận kết quả. Nếu từ khóa Step không được dùng thì (x1,y1)

là tọa độ so với điểm gốc (0,0). (adsbygoogle = window.adsbygoogle || []).push({});

(x2,y2) miêu tả tọa độ điểm cuối của đoạn thẳng cần vẽ. Ý nghĩa của (x2,y2) cũng giống như (x1,y1).

Color giá trị kiểu Long miêu tả màu vẽ theo hệ màu RGB.

B F nếu không có thông số B thì thủ tục Line sẽ vẽđoạn thẳng qua 2 điểm. nếu có thông số B, thủ tục Line sẽ vẽ hình chữ nhật mà 2 đỉnh chéo được xác định bởi 2 điểm.

Trong trường hợp này nếu có thông số F, hình chữ nhật sẽđược tô cùng màu với màu vẽ, ngược lại thuộc tính FillColor và FillStyle của đối tượng nhận kết quả sẽ qui định màu được tô.

Đểđơn giản ta có 3 cách chỉđịnh tọa độ 2 đầu đoạn thẳng muốn vẽ:

1. Cho biết tọa độ của đầu và cuối đường thẳng:

Ví dụ: Line (50, 100)-(3000, 4000)

Khi đường này được vẽ xong thì vị trí của con trỏđồ họa là vị trí cuối của đường này, tức là CurrentX=3000 và CurrentY=4000.

2. Chỉ cho biết tọa độ cuối đường thẳng:

Ví dụ: Line -(3600, 4500), vbMagenta

Trong trường hợp này vị trí của con trỏđồ họa (CurrentX, CurrentY) được lấy làm tọa độ của đầu đường thẳng khi vẽ.

3. Dùng chữStep để nói sự khác biệt từ CurrentX và CurrentY:

Ví dụ: Line Step(400, 600)-Step(800, -500), vbGreen

Nếu trước khi execute dòng code này CurrentX=3600 và CurrentY=4500 thì dòng code

tương đương với: Line (4000,5100)-(4800,4600), vbGreen Các ví dụ sử dụng phương thức Line

Vẽ tam giác: Cách 1

Private Sub CmdTrianI_Click() Line (700, 500)-(2800, 2400) Line (2800, 2400)-(1800, 900) Line (1800, 900)-(700, 500) End Sub

Cách 2

Private Sub CmdTrianII_Click() Line (700, 500)-(2800, 2400), vbRed Line -(1800, 900), vbRed

Line -(700, 500), vbRed End Sub

Bộ môn Tựđộng hóa Thiết kế Cầu đường Page 47 Vẽ hình chữ nhật

Private Sub Rectangle(ByVal X1 As Integer, ByVal Y1 As Integer, ByVal X2 As Integer, ByVal Y2 As Integer)

' Draw a rectangle Line (X1, Y1)-(X2, Y1) Line -(X2, Y2)

Line -(X1, Y2) Line -(X1, Y1) End Sub

Hình chữ nhật 4 góc tròn:

Private Sub RoundCornerRectangle(ByVal X1 As Integer, ByVal Y1 As

Integer, ByVal X2 As Integer, ByVal Y2 As Integer)

Const Delta = 50

' Draw a rectangle with round corner Line (X1 + Delta, Y1)-(X2 - Delta, Y1) Line -Step(Delta, Delta)

Line -(X2, Y2 - Delta) Line -Step(-Delta, Delta) Line -(X1 + Delta, Y2) Line -Step(-Delta, -Delta) Line -(X1, Y1 + Delta) Line -Step(Delta, -Delta) End Sub (adsbygoogle = window.adsbygoogle || []).push({});

Tô màu hình chữ nhật sử dụng phương thức Pset:

Private Sub Shade(ByVal X1 As Integer, ByVal Y1 As Integer, ByVal X2 As Integer, ByVal Y2 As Integer)

Const Delta = 50 Dim i As Integer Dim j As Integer

' Make sure that X1 is less than X2 ' Swap values of X1, X2 if X1 > X2 If X2 < X1 Then Temp = X1 X1 = X2 X2 = Temp End If

' Make sure that Y1 is less than Y2 ' Swap values of Y1, Y2 if Y1 > Y2 If Y2 < Y1 Then Temp = Y1 Y1 = Y2 Y2 = Temp End If ' Vẽ các điểm cách nhau 50 Pixel

For i = X1 + Delta To X2 - Delta Step 50 For j = Y1 + Delta To Y2 - Delta Step 50 PSet (i, j)

Next Next End Sub

Bộ môn Tựđộng hóa Thiết kế Cầu đường Page 48

II.4.4 Phương thức Circle

VB cung cấp phương thức Circle cho phép ta vẽ đường tròn, đường cong, cung tròn,

ellipse …

Để vẽ một đường tròn ta dùng phương thức Circle do VB cung cấp.

Cú pháp: Object.Circle (X, Y), Radius, [color]

Object Đối tượng mà phương thức làm việc.

(x, y) Tọa độ tâm đường tròn.

Radius Bán kính của đường tròn

Color Màu đặt cho đường tròn. .

Để vẽ một cung tròn, ta cũng sử dụng phương thức Circle, tuy nhiên ta cần cung cấp thêm 2 thông sốđó là điểm bắt đầu và điểm kết thúc của cung tròn. Thông thường chúng ta quen

Một phần của tài liệu Tin học xây dựng (Trang 60)