Lập trình xử lý giao diện
Có 2 loại menu: - Menu thả xuống(Drop-down menu): là dạng menu thông dụng nhất. - Menu bật ra (Popup menu): Thường hiển thị khi ta nhấn nút phải chuột Menu cũng là một loại điều khiển, nhưng windows sẽ kiểm soát việc ...
Có 2 loại menu:
- Menu thả xuống(Drop-down menu): là dạng menu thông dụng nhất.
- Menu bật ra (Popup menu): Thường hiển thị khi ta nhấn nút phải chuột
Menu cũng là một loại điều khiển, nhưng windows sẽ kiểm soát việc vẽ menu. Lập trình viên chỉ quản lý phần xử lý các sự kiện mà thôi.
Dùng trình soạn thảo menu để tạo menu
Menu không chứa trong hộp công cụ như những điều khiển khác, mà được thiết kế bằng trình soạn thảo menu. Từ menu tools, chọn Menu editor để mở rộng chương trình này hoặc dùng Ctrl + E hoặc nhấn biểu tượng trong menu của Visual basic
Chú ý nếu chưa có biểu mẫu thì biểu tượng này không xuất hiện trên thanh công cụ.
Các thuộc tính của menu
Thuộc tính của menu không chứa trong cửa sổ thuộc tính như các điều khiển khác mà đặt trong trình soạn thảo menu.
Thuộc tính caption:Là chuỗi ký tự hiển thị trên menu.
Thuộc tính name: Phải được đặt duy nhất và dễ nhớ. Có 2 cách đặt tên:
- Nhóm các mục có cùng cha trên menu vào chung một dãy các điều khiển và dùng chung một tên. Cách này được Visual basic hết sức khuyến khích.
- Mỗi mục có một tên riêng, nhưng nên bắt đầu bằng mnu. ví dụ mnuFile
Thuộctínhindex:Dùng với dãy các điều khiển menu. Trong đó, vì có nhiều mục cùng tên nên index được dùng cho phân biệt giữa chúng với nhau.
Thuộctínhshortcut:Người sử dụng có thể nhấn chuột để chọn menu theo cách bình thường, hoặc dùng phím tắt. VD: nhấn Ctrl+C thay vì chọn Copy.
Thuộc tính Windows list: dùng trong các ứng dụng MDI. Đây là những ứng dụng có một biểu mẫu chính và nhiều biểu mẫu con. Thuộc tính windowsList ra lệnh cho Visual basic hiển thị tiêu đề của các cửa sổ con trên menu.
Thuộc tính Checked:Nếu chọn thuộc tính này, trên menu sẽ hiển thị một dấu bên cạnh. Tuy nhiên, thuộc tính này không được gán cho những mục menu đang chứa menu con.
Thuộctínhenable:Nếu thuộc tính này không được chọn người sử dụng không thể chọn và đó được.
ThuộctínhVisible:Nếu thuộc tính này không được chọn mục này sẽ biến mất khỏi màn hình.
Thuộc tính NegotiatePosition: Quản lý vị trí gắn menu trong trường hợp sử dụng các đối tượng ActivateX.
Táchnhómmenu:Nếu menu có khá nhiều mục, tốt nhất ta nên chia chúng thành nhiều nhóm nhỏ.
Viết chương trình điều khiển menu
Để lập trình cho menu, ta mở cửa sổ thiết kế biểu mẫu và nhấn chuột lên mục mà ta muốn xử lý.
Pop-up menu
Tạo pop-up menu
Bạn tạo ra một menu file có Open, Save, Save as...
Mở cửa sổ code, trong sự kiện mouseUp của biểu mẫu, đưa vào dòng lệnh
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbRightButton Then PopupMenu mnuFile, vbPopupMenuLeftAlign End If End Sub
Tắt thuộc tính Visible của menu file.
Chạy chương trình, khi ta nhấn chuột một menu pop-up sẽ hiện thị.
Menu động
Mảng điều khiển
Là một mảng với các phần tử là những điều khiển. Lần đầu bạn gặp mảng điều khiển là khi bạn copy điều khiển trên biểu mẫu. Visual basic sẽ hỏi:
Nếu ta dán một điều khiển trùng tên với một điều khiển khác, lable1 chẳng hạn, đã có sẵn, Visual basic cho rằng ta muốn tạo mảng điều khiển. Nếu nhấn Yes, VB sẽ đặt tên cho mảng lable1, và thuộc tính index lần lượt là 0 và 1. Nếu thêm một điều khiển nữa, Visual basic tự đông tăng index. Nó không nhắc lại vì ta đã có mảng điều khiển. Mặc dù trùng tên nhưng ta có thể xác định các phần tử một cách dễ dàng nhờ thuộc tính index mà Visual basic tạo cho nó.
Hộp thoại( dialog) là một trong những cách thức để windows giao tiếp với người sử dụng, có 4 kiểu hộp thoại:
- Thông điệp
- Hộp nhập
- Các hộp thoại thông dụng
- Hộp thoại hiệu chỉnh.
Thông điệp(Message box)
Là dạng hộp thoại đơn giản nhất, gồm hai loại:
- Chỉ cung cấp thông tin
- Tương tác với người sử dụng.
Chiều dài thông điệp
Windows tự động cắt chuỗi khi nó quá dài, nhưng đôi khi việc này không đúng ý muốn của lập trình viên. Ta có thể làm bằng tay:
MsgBox "This is a multi-line" & chr$(10) & "message."
Hàm chr$() trả về ký tự có mã ASCII là tham số truyền vào chr$(10) trả về dòng ký tự mới.
Các loại thông điệp
Hằng số | Thể hiện |
vbOKOnly | OK |
vbOKCancel | OK, Cancel |
vbAbortRetryIgnore | Abort, Retry , Ignore |
vbYesNoCancel | Yes, No, Cancel |
vbYesNo | Yes, No |
vbRetryCancel | Retry, Cancel |
Hộp nhập(Input box)
Input box ít được dùng. Lý do là:
- Không có cách nào để kiểm định dữ liệu mà người sử dụng đưa vào khi họ chưa nhấn Enter. Nếu dùng biểu mẫu do chính mình thiết kế, ta có thể đưa vào hộp văn bản và viết chương trình để xử lý sự kiện liên quan đến việc kiểm tra dữ liệu mà với Input box không thể làm được.
- InputBox chỉ cho người sử dụng nhập rất ít thông tin. Muốn lấy ra được nhiều thông tin, nên dùng biểu mẫu tự thiết kế.
Các hộp thoại thông dụng(Common dialog)
Bởi vì các hộp thoại này xuất hiện ở mọi nơi, nên thay vì phải viết chương trình nhiều lần, Windows chứa chúng trong một DLL, Comdlg32.Dll hay Comdlg32.ocx
Có 6 h ộ p thoại:
- Mở tập tin
- Lưu tập tin
- Chọn màu
- Chọn fonts
- In ấn
- Trợ giúp
Tuy nhiên khi thiết kế mẫu ta chỉ thấy duy nhất một điều khiển là CommonDialog.
Tên | Phương thức |
Open file | Showopen |
Save file | Showsave |
Color | Showcolor |
Font | ShowFont |
ShowPrint | |
Help | ShowHelp |
Hộp thoại hiệu chỉnh
Ưu điểm của hộp thoại này là ta có thể thiết kế theo ý thích. Trở ngại của nó khi thi hành là từng biểu mẫu sử dụng tài nguyên hệ thống như bộ nhớ, thời gian CPU. Nếu dùng nhiều hộp thoại hiệu chỉnh trong ứng dụng có thể mất dần tài nguyên và khả năng chống lại treo máy là rất yếu.
Trong ứng dụng đơn giản
Là tính năng chuẩn của các ứng dụng chạy trên windows. Nó cho phép truy cập nhanh đến các chức năng của menu. Tạo toolbar được hỗ trợ cho phiên bản profestional và Enterprice.
Nhúng đối tượng
Khi nhúng một đối tượng vào nơi chứa và đối tượng đang được chọn, menu và toolbar của đối tượng sẽ được hiển thị trong nơi chứa.
Ta có thể cho phép hiển thị menu hay toolbar của đối tượng nhúng bằng thuộc tính NegotiateMenus của biểu mẫu. Khi thuộc tính này là True (mặc định), và nơi chứa có dùng menu hoặc thuộc tính này là False, menu của đối tượng không thể “trộn” được.
Lưu ý thuộc tính này không có trong biểu mẫu MDI.
Thuộc tính NegotiateToolbars của biểu mẫu MDI quyết định toolbar của đối tượng nhúng có được đặt trong biểu mẫu chứa hay không. Nhưng nó đòi hỏi nơi chứa phải có toolbar. Nếu thuộc tính này là True toolbar của đối tượng nhúng được hiển thị trong nơi chứa. Nếu là False Toolbar được hiển thị “di động” trong nơi chứa.
Lưu ý rằng thuộc tính này chỉ áp dụng cho biểu mẫu MDI.
Nếu biểu mẫu MDI có toolbar, nghĩa là nó có một hộp hình. Thuộc tính Negotiate của hộp hình quyết định toolbar của nơi chứa vẫn hiển thị hoặc sẽ bị thay thế bằng toolbar của đối tượng nhúng khi nó được chọn. Nếu Negotiate là True, toolbar nhngs trộn vào toolbar chính. Ngược lại toolbar nhúng thay thế toolbar chính.
Điều khiển thanh trạng thái (statusBar) cung cấp một cửa sổ, thường ở phần cuối cùng của cửa sổ chính, trên đó, ứng dụng có thể hiển thị các trạng thái dữ liệu khác nhau. StatusBar có thể được chia tối đa thành 16 panel dùng để chứa hình ảnh hay văn bản. Thuộc tính kiểm soát cách thể hiện của từng panel bao gồm Width, Alignment (của văn bản và hình ảnh) và Bevel. Ngoài ra ta có thể dùng một trong 7 giá trị của Style để tự động hiển thị dữ liệu thông dụng như ngày, giờvà trạng thái bàn phím.
Vào lúc thiết kế, ta có thể tạo các bảng báo và hiệu chỉnh cách thể hiện của chúng bằng cách đổi các giá trị trong tab panel của hộp thoại Property page. Hộp thoại này được mở thông qua cửa sổ thuộc tính của điều khiển Statusbar.
Vào lúc thi hành, các đối tượng Panel có thể được cấu hình lại để phản ánh các chức năng khác nhau, tuỳ theo trạng thái của ứng dụng.
Thanh công cụ và thanh trạng thái cung cấp những công cụ giúp tạo ra một giao diện tiết kiệm mà đầy đủ thông tin.
Sự kiện chuột
Sự kiện | Giải thích |
MouseDown | Xảy ra khi người sử dụng nhấn một nút chuột bất kỳ. |
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à hình |
Biểu mẫu hoặc điều khiển có thể bắt sự kiện chuột khi con trỏ chuột đi qua.
Tham số truyền
Tham số | Giải thích |
Button | Cho biết nút chuột nào được nhấn |
Shift | Cho biết phím SHIFT, CTRL hay ALT được nhấn |
x.y | Vị trí con trỏ chuột, với hệ toạ độ của đối tượng bắt sự kiện. |
Hiệu chỉnh con trỏ chuột
Ta có thể dùng thuộc tính MousePointer và MouseIcon để hiện thị một biểu tượng con trỏ màn hình hay con trỏ chuột hiệu chỉnh.
Thuộc tính MousePointer cho phép chọn một trong 16 kiểu con trỏ. Sau đây là một vài con trỏ thường dùng.
Con trỏ chuột | Hằng | Mô tả |
vbHourglass | Thể hiện một hoạt động đang tiền hành và yêucầu người sử dụng chờ. | |
vbSizePointer | Thông báo chức năng thay đổi, ví dụ nó chongười sử dụng biết rằng có thể hiệu chỉnh cửa sổ. | |
vbNoDrop | Cảnh báo với NSD rằng hành động này khôngthể thi hành được. |
Giá trị mặc định của thuộc tính MousePointer là 0-Default và hiển thị theo kiểu Windows quy định.
Sự kiện bàn phím
Sự kiện chuột và bàn phím có vai trò chủ yếu trong hoạt động tương tác giữa người sử dụng và chương trình.
Mặc dù hệ điều hành cung cấp một số chức năng cơ bản cho bàn phím nhưng ta có thể khai thác và phát triển các thế mạnh của chúng.
Ta có thể kiểm soát phím nhấn theo 2 mức: điều khiển hoặc biểu mẫu. Mức điều khiển cho phép lập trình với điều khiển, mưc biểu mẫu cho phép ta lập trình với ứng dụng.
Sự kiện bàn ph í m | Xảy ra |
KeyPress | Khi một phím có mã ASCII được nhấn |
KeyDown | Khi một phím bất kỳ được nhấn |
KeyUp | Khi một phím bất kỳ được thả. |
Chỉ có sự kiện đang forcus mới bắt sự kiện bàn phím. Đối với biểu mẫu, nó chỉ bắt được khi nó được kích hoạt và mọi điều khiển trên biểu mẫu đều không có forcus. Điều này chỉ xảy ra với biểu mẫu trống hoặc biểu mẫu có điều khiển bị cấm. Tuy nhiên nếu quy định thuộc tính KeyPreview của biểu mẫu thành True, biểu mẫu sẽ nhận mọi sự kiện bàn phím của mọi điều khiển trên nó trước khi các điều khiển này nhận được. Cách này hữu dụng khi ta muốn thi hành cùng một hoạt động khi một phím bất kỳ được nhấn, bất kể điều khiển nào đang forcus.
KeyDown và KeyUp có thể phát hiện những tình huống mà KeyPress không thể phát hiện:
- Tổ hợp phím SHIFT, CTRL và ALT
- Phím định hướng (← → ↑ ↓) lưu ý rằng một số điều khiển (nút lệnh, nút tuỳ chọn, và hộp đánh dấu) không bắt sự kiện phím định hướng. Thay vào đó, các phím này gây ra sự dịch chuyển của một điều khiển khác.
- PAGEUP và PAGEDOWN
- Phân biệt được phím số ở bàn phím phải với phím số ở bàn phím trái
- Đáp ứng khi thả phím
- Phím chức năng không trùng với menu.
Sự kiện bàn phím không loại trừ nhau. Khi người sử dụng nhấn một phím, cả KeyDown và KeyPress cùng phát. Khi người sử dụng nhấn một trong những phím mà KeyPress không phát hiện được, chỉ có keydown và xảy ra, đó là KeyUp.
Trước khi dùng KeyUp, KeyDown phải đảm bảo rằng KeyPress không làm được.
Sự kiện này phát hiện các phím có mã ASCII chuẩn: Chữ cái, chữ số, dấu ngắt câu, Enter, TAB và BACKSPAGE. Nói chung, viết chương trình cho sự kiện KeyPress thì dễ hơn.