Giáo trình Lập trình với Visual Basic (Phần 2) - Nghề: Lập trình máy tính - Trình độ: Lành nghề

pdf 51 trang Gia Huy 17/05/2022 3040
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Lập trình với Visual Basic (Phần 2) - Nghề: Lập trình máy tính - Trình độ: Lành nghề", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfgiao_trinh_lap_trinh_voi_visual_basic_phan_2_nghe_lap_trinh.pdf

Nội dung text: Giáo trình Lập trình với Visual Basic (Phần 2) - Nghề: Lập trình máy tính - Trình độ: Lành nghề

  1. Bài 6 : XÂY DỰNG ỨNG DỤNG NHIỀU BIỂU MẪU MÃ BÀI: ITPRG10.6 Giới thiệu: Một ứng dụng VB thông thường là một ứng dụng gồm nhiều cửa sổ khác nhau, nhiều thành phần khác nhau như biểu mẫu, module, các báo cáo các điều khiển mở rộng .v.v. do vậy người lập trình cần phải biết sữ dụng các kỹ thuật thiết kế chương trình có nhiều biểu mẫu. Một chương trình khi được xây dựng có thể từ nhiều người khác nhau, nhiều tập thể khác nhau, các thành phần được thiết kế từ nhiều người và su đó kết nối lại thành 1 chương trình. Mục tiêu thực hiện: - Viết được chương trình nhiều biểu mẫu, thừa kế các đối tượng có sẵn - Tạo và sử dụng được hệ thống menu. - Sử dụng hộp nhập và hộp thông báo. Nội dung: 6.1 Viết chương trình ứng dụng nhiều biểu mẫu 6.2 Tạo và sử dụng hệ thống menu 6.3 Hộp nhập và hộp thông báo 6.1 Viết chương trình ứng dụng nhiều biểu mẫu 42
  2. 6.1.1 Thêm form và cách thành phần khác vào chương trình Vào menu Project chọn lệnh Add form, hộp thọai sau xuất hiện: Hình 13 : Hộp thoại thêm form Thẻ New sẽ thêm 1 biểu mẫu mới vào chương trình, biểu mẫu mới gồm các dạng khác nhau, như biểu mẫu chuẩn (form), dạng hộp thọai (dialog), hộp đăng nhập (Log in dialog). Nếu muốn chọn các biểu mẫu thiết kế sẵn, chọn nút existing sua đó chọn các form có sẵn, các form này sẽ được thêm vào chương trình, form này có thể là form do bạn thiết kế họăc do người khác thiết kế. Với thao tác tương tự chúng tác có thể thêm các thành phần khác như module, Control, data report .v.v. Các thanh phần hi đưa vào được xuất hiện khi chạy chương trình bằng các thuộc tinh Visible hoặc các phương thức Show . 6.1.2 Viết chương trình có nhiều cửa sổ. Các ứng dụng Window có 2 dạng: SDI (Single Document Interface) là ứng dụng chỉ có mở 1 cửa số ví như chương trình paint, chương trình Write, MDI (Multi Document Interface) la ứng dụng có thể mở nhiều cửa số như Word. Excel .v.v. Muốn khai báo một chương trình có nhiều cửa sổ chọn thuộc tính CDI Child là true, sau đó vào menu Project chọn Add Mdi form . 1. Biểu mẫu MDI Biểu mẫu MDI cho phép nhóm các biểu mẫu và chức năng trong một cửa sổ lớn. Tuy nhiên, biểu mẫu MDI có một số nhược điểm: chỉ có một vài điều khiển được vẽ trên biểu mẫu MDI. Đó là điều khiển định giờ và hộp hình. Trong phiên bản Professional và Enterprise ta có thể vẽ thêm 43
  3. thanh trạng thái và thanh công cụ. Hộp hình vẽ trong biểu mẫu MDI luôn có cùng bề rộng với biểu mẫu và tự động được đặt ở phần trên cùng hoặc dưới cùng của biểu mẫu. Ta không thể điều chỉnh bằng tay. Nếu ta cố canh trái hoặc canh phải, hộp hình sẽ chiếm toàn bộ biểu mẫu MDI. 2. Biểu mẫu con (Child Form) Thuộc tính MDIChild của một biểu mẫu là một giá trị True/False cho biết biểu mẫu có phải là biểu mẫu con trong một biểu mẫu MDI hay không. Bởi vì VB chỉ cho phép tồn tại một biểu mẫu MDI trong ứng dụng, biểu mẫu con tự động nhận biết cửa sổ cha và khi thi hành, nó chỉ hoạt động bên trong cửa sổ cha. Vào lúc thiết kế, không thể phân biệt cửa sổ độc lập với cửa sổ con, chỉ khác nhau ở chỗ thuộc tính MDIChild mà thôi. Thuộc tính này không gán được vào lúc thi hành, nếu không, ta sẽ nhận thông báo lỗi trước khi chương trình treo. Ví dụ mẫu - Cửa sổ con 1. Tạo đề án mới và đặt tên biểu mẫu mặc định là frmChild. Đổi thuộc tính MDIChild thành True. 2. Từ menu Project, chọn Add MDI Form để tạo một cửa sổ MDI và đặt tên cho nó là frmParent. 3. Thêm menu cho biểu mẫu MDI gồm 2 mục: New và Exit. Đặt tên cho chúng là mnuFNew và mnuFExit. 4. Thêm menu cho cửa sổ con bao gồm: File, Edit, View, Options. 5. Viết chương trình cho menu New Private Sub mnuFNew_Click() Load frmChild End Sub 6. Từ menu Project, chọn Project1 Properties và chọn biểu mẫu khởi động là biểu mẫu MDI. 7. Thi hành ứng dụng. Khi mới xuất hiện, cửa sổ MDI chưa có cửa sổ con và hiển thị menu của chính nó. Nếu ta chọn New từ menu File, cửa sổ con hiển thị. menu của biểu mẫu MDI được thay thế bằng menu của cửa sổ con. Trạng thái đầu của cửa sổ MDI sẽ được phục hồi toàn bộ củă sổ con bị tắt. 8. Lưu đề án với tên MDIChild.vbp. 3. Tạo Instance của biểu mẫu Sử dụng biến đối tượng để tạo ra những bản sao của một biểu mẫu. Từng bản sao có các điều khiển và menu như nhau, nhưng có những dữ liệu khác nhau. Mặc dù chương trình cũng như tên biến và tên điều khiển như nhau, nhưng dữ liệu được chứa ở những nơi khác nhau trong bộ nhớ. Ví dụ mẫu - Tạo Instance của biểu mẫu 1. Mở lại đề án MDIChild.vbp. Chon biểu mẫu frmParant. 2. Chọn New từ menu File của biểu mẫu MDI. Mở cửa sổ Code và đưa đoạn chương trình sau vào: Private Sub mnuFNew_Click() Dim OurNewForm As New frmChild OurNewForm.Show End Sub 3. Đoạn chương trình trên dùng biến đối tượng để tạo một instance cho cửa sổ frmChild. 44
  4. 4. Xoá toàn bộ menu của cửa sổ con. 5. Thi hành chương trình. Mỗi lần nhấn New, một cửa sổ mới được tạo. 6. Lưu đề án với tên mới bằng cách chọn Save File Form As và Save Project As từ menu File. Đặt tên là MDIChild1.vbp 4. Xác định biểu mẫu Vì ta có thể tạo ra 10 biểu mẫu đồng nhất có cùng tên, nên việc xác định cửa sổ là cần thiết. Từ khoá Me cho phép ta tham chiếu đến cửa sổ hiện hành, là cửa sổ đang có focus, hay nói cách khác, là cửa sổ nhận được mọi phím nhấn hay click chuột bất kỳ. Ta có thể dùng: activeform.txtEmployee.text = “Peter” nhưng dùng me là cách thông dụng nhất. 5. Tạo danh sách cửa sổ Ví dụ mẫu - Tạo danh sách cửa sổ 1. Mở đề án MDIChild1.vbp. Chọn hiển thị biểu mẫu frmParent 2. Tạo tuỳ chọn Window trên menu Đưa đoạn chương trình sau vào: Private Sub mnuWArrange_Click() frmParent.Arrange vbArrangeIcons End Sub Private Sub mnuWCascade_Click() frmParent.Arrange vbCascade End Sub Private Sub mnuWTile_Click() frmParent.Arrange vbTileHorizontal End Sub 3. Thi hành ứng dụng với các menu được tạo. 6.1.3 Sắp xếp cửa sổ Dùng phương thức Arrange với biểu mẫu MDI để sắp xếp các cửa sổ con. Các hằng nội tại sau đây là các kiểu sắp xếp củă sổ do VB cung cấp: Giá trị Hằng Mô tả 0 vbCascade Xếp các cửa sổ con theo kiểu thác nước trải từ góc trái trên qua góc bên phải dưới. 1 vbTileHorizontal Dàn đều các cửa sổ con sao cho chúng chia màn hình thành những dải ngang. 2 vbTileVertical Dàn đều các cửa sổ con sao cho chúng chia màn hình thành những dải dọc. 3 vbArrangeIcons Các cửa sổ con được thu nhỏ thành những biểu tượng và được xếp thẳng hàng. 45
  5. 6.2 Tạo hệ thống menu cho ứng dụng. Muốn tạo hệ thống menu cho ứng dụng vào menu tool hoặc nhấn tổ hợp phím Ctrl+E xuất hiện hệ thống menu sau: Hình14 : Hộp thoại tạo hệ thống 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ộc tính index: 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ộc tính shortcut: 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ộc tính enable: 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ộc tính Visible: 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. 46
  6. 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. 6.3 Hộp thoại 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ó kiểu hộp thoại thông dụng đó là hộp thông báo và hộp thoai tường tác với người sử dụng 6.3.1 Hộp thọai dạng thông báo Cú pháp của hộp thông báo nhu sau: msgbox “ Nội dung thông báo”, “Tiêu đề hộp thông báo” Ví dụ: MsgBox "Nhap mat khau truoc khi su dung chuong trinh", "Thong bao" Kết quả của lệnh này là một thông báo như sau: Hình 15: Hộp thoại thông báo 1 6.3.2 Hộp thọai dạng tương tác với người sử dụng Cú pháp của hộp thọai dạng tương tác với người sử dụng như sau: Biến=msgbox(“Nội dung thông báo”,Hằng số,”Tiêu đề”) Trong đó hằng số được trình bày dưới bảng sau: 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 Ví dụ : t=msgbox(“Bạn có muốn thóat khỏi chương trình hay không?”,vbyesno,”Thong bao”) Kết quả của lệnh này như sau: Hình 16: Hộp thoại thông báo 2 Tùy theo người sử dụng nhấn vào nút yes hay no mà t có giá trị khác nhau, dựa vào giá trị của t chúng ta sẽ đưa ra các lệnh tương ứng 47
  7. 6. 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. Cú pháp của hộp nhập: Biết=inputbox(“Nội dung thông báo”, “tiêu đề hộp nhập”, giá trị mặt định) Ví dụ: t = InputBox("Nhap vao gia tri cua t", "Thong bao", 0) Kết quả của lệnh này như sau: Hình 17 : Hộp thoại thông báo 3 T sẽ nhận giá trị nhập từ bàn phím BÀI TẬP TỔNG HỢP Bài tập 1 Viết chương trình khi chạy chương trình sẽ hiện ra thông báo nhập mật khẩu, nhập mật khẫu dúng sẽ xuất hiện 1 chương trình gồm hệ thống menu giống như hệ thống menu của Word. Khi thoát khỏi chương trình này sẽ hiện ra thông báo có muốn thoát hay không, nếu trả lời thoát chương trình sẽ thoát và ngược lại. 48
  8. Bài 7 THỦ TỤC VÀ CHƯƠNG TRÌNH CON MÃ BÀI: ITPRG10.7 Mục tiêu thực hiện: - Biết được ý nghĩa thủ tục - Tạo được các thủ tục - Sử dụng được các thủ tục - Phân biệt được tham biến và tham trị. Nội dung: 7.1 Định nghĩa chương trình con 7.2 Tạo và sử dụng chương trình con 7.3 Tham biến, tham trị và cách truyền tham biến, tham trị 7.1 Định nghĩa thủ tục - Chia nhỏ chương trình thành nhiều phần logic, giúp gỡ rối dễ dàng. - Thủ tục có thể được sử dụng lại trong một ứng dụng khác. Muốn xây dựng một thủ vào menu tool thực hiện lệnh Add procedure sẽ xuất hiện hộp thọai sau: Hình 18 :Hộp thoại xây dựng thủ tục Các loại thủ tục a. Thủ tục không trả về giá trị ( Chương trình con) [Private | Public | Static] Sub (Tham số) Các dòng lệnh End sub b. Hàm luôn trả về giá trị: 49
  9. [Private | Public | Static] Function (Tham số) [As ] Các dòng lệnh End Function Trong trường hợp không khai báo As , mặc định, VB hiểu là kiểu variant c. Thủ tục thuộc tính Có thể trả về và gán giá trị, hay đặt tham chiếu đến đối tượng. Xem thủ tục trong modul hiện hành Trong cửa sổ code, chọn Genaral trong hộp Object, và chọn tên thủ tục trong hộp Procedure. Để xem thủ tục xử lý sự kiện chọn tên đối tượng từ hộp Object trong cửa sổ code, sau đó chọn tên sự kiện trong hộp procedure Thoát khỏi thủ tục / hàm Exit sub dùng để thoát khỏi thủ tục, Exit Function dùng để thoát khỏi hàm. BÀI TẬP THỰC HÀNH TẠI LỚP CÓ SỮ HƯỚNG DẪN CỦA GIÁO VIÊN Bài 1:Viết 1 chương trình con điều khiển cho 2 hình ảnh chuyển động trên form Bài 2: Viết 1 hàm tính n giai thừa trong đó n nhập từ bàn phím Bài 3: Viết 1 giải phương trình bật 2 trong đó a,b,c là 3 số nhập từ bàn phím 50
  10. Bài 8 CÁC ĐỐI TƯỢNG MỞ RỘNG MÃ BÀI: ITPRG10.8 Giới thiệu: Mục tiêu thực hiện: - Biết cách đưa các đối tượng mở rộng vào chương trình. - Hiểu được ý nghĩa và sử dụng được các đối tượng mở rộng. - Lập trình được trên các đối tượng mở rộng. Nội dung: 8.1 Các đối tượng mở rộng. 8.2 Sử dụng các đối tượng mở rộng. 8.3 Lập trình trên các đối tượng mở rộng 8.1 Các đối tượng mở rộng. - Trên hộp công cụ (Tool box) chỉ có chức được các đối tượng cơ bản, ngòai ra trong VB còn có rất nhiều các đôi tượng được chức trong các tập tin OCX, các tập tin Dll. - Muốn đưa các đối tượng mở rộng vào, nhấn chuột phải vào hợp công cụ, chọn lệnh components xuất hiện hộp thọai sau: 51
  11. Hình 19 :Hộp thoại thêm các đối tượng mở rộng Thẻ control chức các đối tượng mở rộng của VB ngòai ra nếu muốn chọn các tập tin OCX hay các tập tin dll, nhấn vào nút Browse để chọn tập tin cần thiết. B. Giới thiệu một số đối tượng mở rộng 8.2.1 Hộp thọai dùng chung Muốn đưa hộp thọai dùng chung, chọn Microsoft Conmon dialog control 6.0. khi đưa đối tượngnày vào chương trình, có 6 phương thức đối với đối tượng này, mỗi phương thức tương ứng với 1 hộp thọai xuất hiện, cụ thể như sau: Tên Phương thức Hộp thọai xuất hiện Open file Showopen Mở tập tin Save file Showsave Lưu tập tin Color Showcolor Chọn màu Font ShowFont Chọn fonts Print ShowPrint In ấn Help ShowHelp Trợ giúp 8.2.2 Microsoft window conmoncontrol 6.0 Khi chọn thành phần này một số các điều khiển sau sẽ xuất hiện, gồm các điều khiển sau:, tạo thanh công cụ, thanh trạng thái, thanh tiến trình .v.v. Hình 20 :Hộp các điều khiển 8.2.2.1 Thanh công cụ(ToolBar) 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. 8.2.2.2 Thanh trạng thái Đ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 52
  12. 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. Bài tập: Bài 1: Xây dựng chương trình nghe nhạc có đầy đủ các tính năng, chọn nhạc, chuyển bài trước, bài sau, tạm dừng, tiếp tục.v.v. Bài 2: Viết chương trình tạo 1 ứng dụng xem lịch có các tính năng phụ. 53
  13. Bài 9 KẾT NỐI CHƯƠNG TRÌNH ỨNG DỤNG VỚI CƠ SỞ DỮ LIỆU MÃ BÀI: ITPRG10.9 Giới thiệu: Một trong những thế mạnh củ ngôn ngữ lập trình Visual basic la kết nốt cứng dụng với hầu hết các hệ quản trị cơ sở dữ liệu, đồng thời bản thân ngôn ngử này cũng có thể tạo ra cơ sở dự liệu đề quản lý Mục tiêu thực hiện: - Sử dụng được các công cụ để kết nối kết chương trình với cơ sở dữ liệu - Lập trình được trên các đối tượng cơ sở dữ liệu. - Vận dụng viết các chương trình quản lý cơ sở dữ liệu Nội dung: 9.1 Các đối tượng liên kết cơ sở dữ liệu 9.2 Lập trình trên Các đối tượng Record Set 9.3 Tạo các biểu mẫu, bảng dữ liệu. 9.4 Cập nhật cơ sở dữ liệu 9.1 Các đối tượng kết nối cơ sở dữ liệu 9.1.1 DataEnvironment Ta có thể tạo một thiết kế DataEnvironment để quản lý một cách trực quan kết nối với một cơ sở dữ liệu. Khi ta có một thiết kế DataEnvironment được chứa trong tập tin nhị phân của ứng dụng lúc biên dịch, vì vậy không cần lo ngại về những phụ thuộc bên ngoài. - Trong của sổ Data View, nhấn nút Add Data Environment. - Thiết kế DataEnvironment mới sẽ xuất hiện trong đề án. Một kết nối mặc định, gọi là Connection1 xuất hiện trong thiết kế : Hình 21 :Hộp thoại thiết kế DataEnviroment 54
  14. Có thể điều chỉnh một cách thủ công kết nối mặc định trong một thiết kế dataenvironment để nó trỏ đến cơ sở dữ liệu. Nhung nếu có sở dữ liệu đã có sẵn trong cửa sổ Data View, ta chỉ cần kéo và thả bảng vào thiết kế . Để thực hiện điều này, ta làm như sau: 1. Khởi động cửa sổ Data view, chọn một bảng trong thư mục Tables ( như là tblCustomer ) 2. Kéo bảng lên trên thiết kế DataEnvironment. 3. Một kết nối mới gọi là Connection2 xuất hiện trong thiết kế, với bảng xuất hiện dưới đây. Đến đây, ta có thể kéo các bảng khác vào thiết kế nếu thích. Khi hoàn tất, ta có : Hinh 22 : Kéo bảng vào cửa sổ thiết kế. Tạo một giao diện người sử dụng với thiết kế DATAENVIRONMENT Ta có thể tạo một giao diện người sử dụng nhanh chóng bằng cách dùng thiết kế DataEnvironment. Thiết kế kết hợp với cơ chế biểu mẫu của VB, cho phép ta dùng kỹ thuật kéo và thả để tạo một giao diện người sử dụng điều khiển bằng cơ sở dữ liệu. Để thực hiện điều này, ta theo các bước sau : 1. Mở biểu mẫu ta muốn dùng làm giao diện người sử dụng. 2. Chọn bảng trong thiết kế Data Environment ( Không phải trong cửa sổ Data View). 3. Thả bảng vào biểu mẫu. Một giao diện người sử dụng rằng buộc dữ liệu sẽ được tạo trên biểu mẫu. 55
  15. HÌnh 23 : Hộp thoại tạo giaoo diện người sử dụng ràng buộc dữ liệu. Thi hành ứng dụng để xem mẩu tin thứ nhất trong cơ sở dữ liệu. Tuy nhiên, không có chức năng duyệt từ mẩu tin này sang mẩu tin khác. Để thực hiện điều đó, ta phải lập trình hoặc dùng một điều khiển dữ liệu, mô tả trong phần sau. 1. Sử dụng điều khiển dữ liệu để tạo giao diện người sử dụng Ta có thể dùng một điều khiển dữ liệu để quản lý kết nối giữa biểu mẫu Visual Basic và một cơ sở dữ liệu. Điều khiển dữ liệu còn cung cấp chức năng duyệt dữ liệu đơn giản, cho phép ứng dụng duyệt qua một recordset, thêm và cập nhật mẩu tin. Điều khiển dữ liệu là cách đơn giản nhất để truy cập đến cơ sở dữ liệu trong Visual Basic, dù cho đó là Access hay một hệ Client / Server. Hình sau đây minh hoạ cách thức điều khiển ADO Data đã kết nối ứng dụng với một cơ sở dữ liệu. 2. Kết nối với một cơ sở dữ liệu và làm việc với các mẫu tin Tạo một ứng dụng dùng điều khiển ADO Data rất đơn giản . Thực ra, nếu những gì ta quan tâm chỉ là duyệt cơ sở dữ liệu thì ta không cần phải lập trình gì cả . Đây là một quy trình gồm 2 bước – quy định thuộc tính ConnectionString và RecordSourse của điều khiển Data, sau đó rằng buộc điều khiển với điều khiển giao diện người sử dụng. Để thực hiện điều này ta theo các bước sau : 1. Bắt đầu một đề án mới của Visual Basic. 2. Dùng menu Project Components, lập một tham chiếu đến “ Microsoft ADO Data Control 6.0 ( OLEDB )” bằng cách chọn vào hộp đánh dấu trong danh sách. 3. Nhấn nút OK, điều khiển ADO Data xuất hiện trên thanh công cụ của Visual Basic. Nhấn đúp chuột lên điều khiển để tạo một instance của điều khiển trên biểu mẫu. 4. Di chuyển và điều chỉnh điều khiển để cho nó nằm ở góc phải dưới của biểu mẫu, chiếm càng ít khoảng trống càng tốt. 5. Nhấn nút phải chuột lên điều khiển. Từ menu bật ra, chọn ADODC Properties. 56
  16. 6. Hộp thoại Properties của điều khiển xuất hiện. Chọn nút tuỳ chọn “User Connection String “ rồi nhấn Build. 7. Hộp thoại Data Link Properties xuất hiện. Đây là hộp thoại ta dùng để kết nối với cơ sở dữ liệu trong ví dụ “Sử dụng Data View” ở phần trước. Sử dụng cùng các bước kế nối đến cơ sở dữ liệu Novelty và nhấn OK khi hoàn tất. 8. Đến đây bạn đã quay lại hộp thoại Properties Pages của điều khiển ADO Data. Kế tiếp, ta thông báo cho điều khiển bảng nào sẽ được dùng. Chọn tab RecordSource, rồi chọn 2 –adCmdTable từ hộp kết hợp CommandType. 9. Chọn hộp kết hợp Table or Stored Procedure Name. Hộp kết hợp hiển thị danh sách tất cả các bảng trong cơ sở dữ liệu. Chọn tblCustomer rồi nhấn OK. Kết nối đến cơ sở dữ liệu xảy ra khi ứng dụng thi hành. Tuy nhiên, kết nối không có thông báo, bởi vì không có cách nào để hiển thị dữ liệu. Để hiển thị dữ liệu trả về từ một điều khiển dữ liệu, ta phải tạo các điều khiển kết nối rằng buộc với điều khiển dữ liệu. Để thực hiện điều này, theo các bước sau : 1. Tạo 2 hộp văn bản trên biểu mẫu. 2. Quy định thuộc tính DataSource của hộp văn bản là ADODC1, tên của điều khiển. 3. Chọn hộp văn bản thứ nhất và quy đinh thuộc tính DataField của nó là một trường của bảng trong cơ sở dữ liệu, chẳng hạn ta chọn FistName, một lần nữa giống như với thuộc tính RecordSource của cơ sở dữ liệu ta chọn một thuộc tính DataField của điều khiển rằng buộc sẽ hiển thị là một danh sách xổ xuống trình bày danh sách những gì có sẵn trong cơ sở dữ liệu. 4. Quy định thuộc tính DataField của hộp văn bản thứ hai là tên của một trường khác trong cơ sở dữ liệu, chẳng hạn như là LastName. 5. Thi hành ứng dụng. 3. Tạo một giao diện người sử dụng cơ bản Để kết nối một điều khiển cần dùng dữ liệu với một điều khiển dữ liệu, ta theo các bước sau: 1. Bảo đảm rằng biểu mẫu chứa một điều khiển ADO Data mà thuộc tính RecordSource và ConnectionString của chúng được quy định là nguồn dữ liệu hợp lệ. Chuỗi kết nối tối thiểu ta cần dùng là : Provider = Microsoft.Jet.OLEDB.3.51; Data Source = App.parth & “\novelty.mdb” 2. Quy định thuộc tính DataSource của điều khiển cần dùng dữ liệu là tên của điều khiển Data. ( Khi ta dùng cửa sổ Properties của Visual Basic để thực hiện điều này, thuộc tính DataSource hiển thị tên của tất cả các điều khiển Data trên biểu mẫu hiện hành). 3. Nếu điều khiển cần dùng dữ liệu có một thuộc tính DataField, quy định nó là tên trường ta muốn điều khiển hiển thị. Một lần nữa, ta lưu ý rằng nếu mọi thứ được thiết lập đúng, một danh sách các trường sẽ được xổ xuống trong thuộc tính DataField khi ta chọn thuộc tính này trong cửa sổ Properties của Visual Basic. Điều khiển cần dùng dữ liệu Một điều khiển cần dùng dữ liệu là một điều khiển bất kỳ có thuộc tính DataSource. Thuộc tính DataSource tham chiếu đến một điều khiển dữ liệuSau đây là danh sách của các điều khiển cần dùng dữ liệu đi kèm với Visual Basic: . CheckBox : Điều khiển cung cấp một điều kiện đúng / sai. Nó chủ yếu rằng buộc với trường Boolean, hay Yes/ No trong một cơ sở dữ liệu. . ComboBox : Đây là hộp kết hợp xổ xuống chuẩn của Visual Basic. 57
  17. . DataGrid : Lưới hiển thị dữ liệu của cơ sở dữ liệu theo dòng và cột. Phiên bản thương phẩm của điều khiển này là điều khiển Apex True DB Grid. . DateTimePicker : Điều khiển này có thể rằng buộc ngày hoặc giờ trong một cơ sở dữ liệu. Nó giúp người sử dụng chọn ngày, giờ một cách dễ dàng dưới dạng đồ hoạ. . DBList : Điều khiển hộp danh sách này tương tự điều khiển hộp danh sách chuẩn của Visual Basic, nhưng nó có thể điền dữ liệu vào danh sách từ một bảng cơ sở dữ liệu. . Hierarchical FlexGrid : Tương tự điều khiển FlexGrid trong VB5, điều khiển này cho phép thao tác với nhiều mẩu tin quan hệ trong một điều khiển lưới. . Image : Điều khiển này tương tự điều khiển PictureBox, nhưng thiếu một vài tính năng của nó. . Label : Điều khiển này cho phép trình bày văn bản từ một trường cơ sở dữ liệu, nhnhưng ngăn cản người sử dụng sử đổi nó. . ListBox : Đây là hộp danh sách chuẩn của Visual Basic, ta không sử dụng điều khiển này cho mục đích truy cập cơ sở dữ liệu mà sử dụng điều khiển mạnh hơn DBList. . TextBox : Điều khiển thông dụng này cho phép người sử dụng nhập dữ liệu trực tiếp. 4. Thao tác trên các mẩu tin thông qua điều khiển ADO Data Phần lớn, chương trình phải viết khi làm việc với điều khiển dữ liệu đều tập trung trên đối tượng Recordset. Một đối tượng Recordset trở nên sẵn sàng khi ta quy định thuộc tính ConnectionString và RecordSource cho nó. Để truy cập một thuộc tính hay phương thức của một đối tượng Recordset của điều khiển dữ liệu trong chương trình, ta tham chiếu đến điều khiển dữ liệu, rồi tham chiếu đến đối tượng Recordset. Ví dụ: Để di chuyển đến mẩu tin thư nhất của Recordset chứa trong điều khiển dữ liệu tên là datCustomer, ta dùng đoạn chương trình sau: DatCustomer.Recordset.MoveFirst a) Dùng điều khiển dữ liệu để tạo mẩu tin mới Để tạo một mẩu tin mới ta có 2 tuỳ chọn: . Quy định thuộc tính EOFAction của điểu khiển dữ liệu là 2 AddNew. Giải pháp này không đòi hỏi lập trình. . Dùng phương thức AddNew và Update của đối tượng Recordset của điều khiển dữ liệu. Giải pháp này phức tạp hơn, nhung cho ta khả năng điều khiển trên những gì xảy ra khi người sử dụng muốn tạo mẩu tin mới. Nó cũng thích hợp cho trường hợp ta muốn che dấu điều khiển dữ liệu đối với người sử dụng. Để cho phép điều khiển dữ liệu tạo mẩu tin mới mà không cần lập trình, ta làm như sau: 1. Trong đề án điều khiển Data, quy định thuộc tính EOFAction của điều khiển Data là 2 – AddNew. 2. Thi hành đề án. 3. Nhấn nút MoveLast của điều khiển data, rồi nhấn Next, Thay vì di chuyển đến mẩu tin cuối cùng trong Recordset, điều khiển dữ liệu tạo một mẩu tin mới. Ta có thể nói rằng mẩu tin này mới vì tất cả các điều khiển rằng buộc trên biểu mẫu đều rỗng. 4. Nhập dữ liệu trong các điều khiển rằng buộc. 5. Dùng nút Previous của điều khiển Data, di chuyển đến mẩu tin trước đó. Mẩu tin mới được lưu vào cơ sở dữ liệu. Muốn sử dụng phương thức AddNew và Update để tạo một mẩu tin mới, ta làm như sau : 58
  18. 1. Thêm các nút lệnh và các điều khiển khác và giao diện để thể hiện phương thứuc AddNew và Update. 2. Trong sự kiện Click của nút Update, đưa vào dòng chương trình sau DatCustomer.Recordset.Update 3. Trong sự kiện Click của nút Update, đưa vào dòng chương trình sau: DatCustomer.Recordset.AddNew 4. Khi người sử dụng nhập liệu, họ có thể tuỳ chọn nhấn Update Record để ghi nhận mẩu tin mới vào cơ sở dữ liệu. Họ còn có thể di chuyển sản mẩu tin khác để lưu nó, điều này cũng đúng với cập nhật mẩu tin. Điểm quan trọng cần cần hiểu là khi người sử dụng tạo một mẩu tin mới trong giao diện nhập liệu sử dụng điều khiển dữ liệu, nhiều hoạt động sẽ là không hợp lệ bởi vì chưa có mẩu tin hiện hành. Ví dụ, nếu ứng dụng cho phép người sử dụng tạo một mẩu tin bằng cách quy định thuộc tính EOFAction của điều khiển dữ liệu là AddNew, rổi cho phép người sử dụng thi hành phương thức Delete trên mẩu tin hiện hành, ứng dụng sẽ báo lỗi. Lỗi xảy ra bởi vì không có mẩu tin bị xoá. Để tránh tình huống này, ta có một vài lựa chọn. Nếu ta đã quen với Visual Basic, lựa chọn hiển nhiên là bẫy lỗi và cấm phương thức Delete. Nhưng có một phương thức tốt hơn để tránh rắc rối này : vô hiệu hoá nút Delete để ngăn cản người sử dụng nhấn nó trong lần đầu tiên . b) Dùng sự kiện moveComplete để cập nhật giao diện người sử dụng Ta có thể dùng sự kiện MoveComplete của điều khiển ADO Data để khởi động sửa đổi trong ứng dụng khi người sử dụng di chuyển từ mẩu tin này sang mẩu tin khác. Sự kiện MoveComplete được kích hoạt sau khi một mẩu tin mới trở thành hiện hành. Đây là một trong vài sự kiện được kích hoạt khi điều khiển di chuyển từ một mẩu tin này sang mẩu tin khác. Các sự kiện khác bao gồm WillChange, được kích hoạt khi điều khiển di chuyển từ mẩu tin này san mẩu tin khác, hay thay đổi một mẩu tin và sự kiện RecordChangeComplete, xảy ra khi một mẩu tin được sửa đổi thành công trong cơ sở dữ liệu như một kết quả của hoạt động trong điều khiển dữ liệu. Ta chủ yếu dùng sự kiện RecordChangeComplete để thực hiện các tác vụ sau: . Thi hành một câu truy vấn trên các mẩu tin liên quan đến mẩu tin chính Microsoft Access gọi nó là giao diện “biểu mẫu chính/ biểu mẫu con”. . Tính toán một giá trị dẫn xuất từ một hay nhiều giá trị trong mẩu tin. . Quản lý nhiều vấn đề về giao diện người sử dụng để đáp ứng với trạng thái Recordset của điều khiển dữ liệu, thi hành những công việc như là che giấu hoặc vô hiệu hoá tính năng nào đó nếu một mẩu tin hợp lệ vắng mặt. Lưu ý: Điều khiển DAO Data cung cấp các sự kiện tương tự những sự kiện mô tả ở đây. Các sự kiện “Will” của điều khiển ADO Data ( như là WillMove và WillChange ) gắn giống với sự kiện Validate của điều khiển DAO Data, trong khi các sự kiện “Complete” của điều khiển ADO Data ( như là RecordChangeComplete và MoveComplete ) thì tương tự với sự kiện Reposition của điều khiển DAO Data. Ví dụ : Ta quan tâm đến vùng mà khách hàng cư ngụ. Ta có thể viết chương trình để quy định chia các Tiểu bang, mỗi tiều bang là một vùng. Các Tiểu bang không có quan 59
  19. hệ kinh doanh sẽ được gắn giá trị Aunassigned. Ta có thể dùng điều khiển ADO Data để trình bày vùng của từng mẩu tin trong biểu mẫu như sau: 1. Trên biểu mẫu của ứng dụng điểu khiển dữ liệu, ta tạo một điều khiển nhân và đặt tên nó là lblRegion. 2. Trong thủ tục sự kiện MoveComplete của điều khiển ADO Data, đưa vào đoạn chương trình sau: Option Explicit Private Sub datCusstomer_MoveComplete ( ByVal AddReason as ADODB.EventReasonEnum, ByVal pError Ass ADODB.Error, asStatus As ADODB.EventStatusEnum, ByVal Rs as ADODB.Recordset ) Dim strST as String Dim StrRegion as String If rs.BOF = false and Rs.EOF =False Then strST = RS.Field(“State”) & “” end if ‘Display region Select Case strST Case “VT”, “NH”, “CT” strRegion = “Northeast” Case “NC”, “KY”, “AR” strRegion = “South” Case “OK”, “MN”, “MI”, “OH” strRegion = “Midwest” Case “MT” strRegion = “West” Case Else strRegion = “Unassigned” End Select lblRegion.Caption = strRegion End Sub. 3. Thi hành ứng dụng, ta sẽ thấy các vùng được hiển thị khi ta thay đổi từ màu này sang màu khác. c) Dùng điều khiển Data để xoá mẩu tin Để xoá mẩu tin trong một ứng dụng sử dụng điều khiển dữ liệu, ta dùng phương thức Delete của đối tượng Recordset của điều khiển dữ liệu: datCustomer.Recordset.Delete 5. Các thuộc tính quan trọng khác của điều khiển ADO DATA Điều khiển ADO Data có một số thuộc tính bổ sung quản lý cách hoạt đọng của nó, ta có thể quy đinh hầu hết các thuộc tính vào lúc thiết kế. Vì vậy, ta không cần lập trình. 60
  20. a) Thuộc tính CommandType Thuộc tính CommandType xác định kiểu lệnh mà điều khiển ADO Data phát ra trên nguồn dữ liệu để lấy về các mẩu tin. Ví dụ trong chương này sử dụng CommandType là 2- adCmdTable để mở và làm việc trực tiếp với bảng. b) Thuộc tính EOFAction Thuộc tính EOFAction xác định những gì điều khiển dữ liệu thực hiện khi người sử dụng di chuyển đến cuối của Recordset. Nếu ta quy định thuộc tính là 2 – AddNew, điều khiển tạo một bản ghi mới khi người sử dụng đi qua phần cuối cùng của mẩu tin hiện hành. ( Nói cách khác, giá trị này làm cho giao diện hoạt động tương tự biểu mẫu của Microsoft Access ). Để tạo một mẩu tin mới khi thuộc tính EOFAction của điều khiển dữ liệu được quy đinh AddNew, ta nhấn nút MoveLast, rồi nhấn nút MoveNext. c) Dùng thuộc tính Mode để kiểm soát truy cập đến dữ liệu Bằng cách quy định thuộc tính Mode của điều khiển ADO Data, ta có thể kiểm soát xem những người sử dụng khác có truy cập cơ sở dữ liệu hay không khi ứng dụng đang thi hành. Ví dụ, bằng cách quy định thuộc tính Mode là 12 – adModeShareExclusive, ứng dụng sẽ được tăng cường khả năng truy cập loại trừ đến dữ liệu - không người sử dụng nào khác có thể truy cập đến nó khi ứng dụng đang thi hành. Ta còn có thể mở một nguồn dữ liệu chỉ đọc ( Read only ) bằng cách quy định thuộc tính Mode là 1 – adModeRead ; ứng dụng của bạn sẽ nhận được khả năng truy cập chỉ được đọc dữ liệu. Ưu điểm của giá trị này là, cải tiến khả năng hoạt động, bởi vì bộ máy cơ sở dữliệu không cần quan tâm đến những vấn đề rắc rối như là khoá mẩu tin hay kết nối nhiều người sử dụng xảy ra khi có nhiều hơn một ứng dụng truy cập đến cùng một mẩu tin. Bài tập: Bài 1: Tạo 1 cơ sở dữ liệu bằng Access với các bảng dùng để quản lý hồ sơ học sinh. Kết nối chương trình ứng dụng với bảng dữ liệu Bài 2: Từ chương trình ứng dụng trên hãy viết các nút lệnh cho phép duyệt qua cơ sở dữ liệu, cho phép thêm, cập nhật cơ sở dữ liệu Bài 3: Từ chương trình ứng dụng trên hãy xuất dữ liệu qua 1 report và qua lưới dữ liệu. 61
  21. Bài 10 LẬP TRÌNH WINDOWS MÃ BÀI: ITPRG10 Mục tiêu thực hiện: - Sử dụng được các hàm API viết các ứng dụng tương tác với hệ điều hành - Sử dụng được các thư viện liên kết động - Sử dụng được các thư viện liên kết tĩnh Nội dung: 10.1 Giới thiệu các hàm API 10.2 Sử dụng các hàm API tương tác với hệ điều hành. 10.3 Giới thiệu các thư viện liên kết tĩnh 10.4 Sử dụng các thư viện liên kết tĩnh 10.5 Giới thiệu các thư viện liên kết động 10.6 Sử dụng các thư viện liên kết động 10.1 DLL và cấu trúc của Windows 10.1.1 Các hộp thoại thông dụng DướI đây là một hộp thoạI mở tập tin Hộp thoạI này không chỉ tiết kiệm thờI gian cho chúng ta, mà còn tạo nên một giao diện ngườI sử dụng gần gũi và thống nhất vớI môi trường Windows Hộp thoạI này do Windows cung cấp, nằm trong thư viện \Windows\System\comdlg32.Dll. Tập tin này chứa các đoạn chương trình tạo ra các hộp thoạI thông dụng khác nhau. Do tập hợp lạI trong một thư mục dùng chung là Windows\system, nó cho phép mọI ứng dụng Windows có quyền truy cập và thậm chí bản thân Windows cũng vậy. Các tập tin DLL này được biên dịch vớI C/C++. 62
  22. Hình 24 : Hộp thoạI mở tập tin là một trong những hộp thoạI thông dụng của Windows 10.1.2 Thư viện liên kết động Đối với các ngông ngữ lập trình cổ điển như C, khi biên dịch chương trình, ta có một tập tin EXE duy nhất có thể được thi hành mà không cần bất cứ tập tin nào khác (tập tin.vbp của Visual Basic không phảI trường hợp này, vì nó chỉ chạy trong môi trường Visual Basic). Toàn bộ chương trình cần thiết được chứa hết trong một tập tin EXE. Tuy nhiên, cũng có rất nhiều thư viện C được dùng rộng rãi. Vấn đề là làm sao sử dụng lạI các đoạn chương trình viết sẵn trong chương trình của ta. Đó chính là liên kết (link). Có hai loạI liên kết : liên kết tĩnh ( static link) và liên kết động (dynalic link). + Liên kết tĩnh Cung cấp một kết nốI nền vững giữa chương trình và module viết sẵn ngay lúc thiết kế; tương tự ta tạo module trong Visual Basic và gọI thủ tục trong đó, chỉ khác là liên kết tĩnh thì chứa bên ngoài Visual Basic. Tuy nhiên, để sử dụng liên kết tĩnh, ta c ần copy phần chương trình viết sẵn của thư viện vào tập tin chương trình khi biên dịch. Từ đó trở đi, chúng trở thành một phần của chương trình và bị khoá chặt vớI chương trình. + Liên kết động Là giảI pháp linh hoạt hơn liên kết tĩnh. Tập tin thư viện bên ngoài không bị ràng buộc vớI bên ngoài. Nó chứa ở một nơi sao cho tập tin EXE có thể tìm ra và gửI thông điệp cho nó. Khi thi hành, các thông điệp này là những cuộc gọI đến các hàm/thủ tục, yêu cầu phần chương trình nào đó của DLL được thi hành. + Các DLL của Visual Basic Có lẽ Visual Basic là một minh hoạ cho việc sử dụng DLL. Vào thư mục \Windows\system, ta sẽ thấy một loạt các tập tin cấu tạo nên cơ chế thi hành của VB. Ví dụ, VB5DB.DLL chứa chương trình kiên kết vớI DAO (ĐốI tượng truy cập dữ liệu) lúc thi hành để ứng dụng có thể tìm kiếm các cơ sở dữ liệu cục bộ. Khi ta xây dựng một ứng dụng cơ sở dữ liệu và biên dịch 63
  23. nó, tập tin EXE không biết gì về cơ sở dữ liệu. Thay vào đó, nó sử dụng một số đoạn chương trình của VB cho phép nạp thư viện VB5DB.DLL lúc thi hành và gọI các hàm trong đó. Thế mạnh của DLL Nhất quán : NgườI sử dụng ưa chuộng Windows vì nó không ít thì nhiều có một giao diện ngườI sử dụng phổ biến cho mọI ứng dụng. Ví dụ các hộp thoạI thông dụng, các menu, thanh công cụ của Office97 Nghĩa là có những đoạn chương trình chung để tạo ra chúng. Dễ bảo trì : Những thay đổI hoặc bổ sung nếu có sẽ thể hiện trên mọI ứng dụng. Tập tin EXE nhỏ hơn : Do một phần công việc chứa ở nơi khác, và không gắn kết “cứng nhắc” như liên kết tĩnh, kích cỡ tập tin EXE được giảm nhỏ. Chỉ có điều là DLL còn chứa nhiều phần khác, không chỉ là những gì chương trình của ta cần. Cấu trúc Windows DLL là nền tảng của thiết kế Windows. Windows thực chất là tập hợp các DLL để các ứng dụng khác nhau có thể dùng chung. Bên trong các DLL này là hàng trăm hàm/thủ tục. Ta gọI chúng là Windows API. C. SỬ DỤNG CÁC HÀM API Giao diện lập trình ứng dụng (Application Programmer’s Interface) là tập hợp các hàm/thủ tục có sẵn của Windows. Chúng gẫn gũi vớI ngôn ngữ C/C++ hơn. Visual Basic được thiết kế theo kiểu che bớt các công việc bên dướI hệ thống. Phần lớn các cuộc goi đến các hàm API được lồng trong các dạng lệnh Visual Basic, từ khoá, phương thức và thuộc tính. Chúng sẽ được thông dịch thành WinAPI bên trong của Visual Basic. Tuy nhiên, vẫn có một số hàm API mà Visual Basic không có phần tương đương. Ví dụ, Visual Basic chuẩn không có cách nào cho ngườI lập trình điều khiển hệ thống multimedia của Windows, nhưng vớI WinAPI, ta có thể đạt được kết quả. Hiểu rõ WInAPI, ta có thể khám phá những năng lực tiềm tàng của chúng. Lớp bọc API và các điều khiển hiệu chỉnh Điều khiển hiệu chỉnh (OCX hay ActiveX) bản thân chúng là những lớp bọc API, chúng chuyển giao các chức năng theo kiểu Visual Basic một cách thân thiện. Điều khiển ActiveX và OLE Automation Servers đưa chương trình vào các đề án mà không cần phảI có một DLL thực sự. Ta cũng có thể gọI API trong các module lớp, nghĩa là đưa năng lực API vào đốI tượng Visual Basic. D. Sử dụng API 1. Tìm kiếm API Ta có thể tìm các API thông qua tập tin Trợ giúp (Help) của Visual Basic, qua sách tra cứu Trình duyệt API (Text API Viewer) 64
  24. Được cung cấp sẵn khi cài Visual Basic. Khi ta cần tra cứu cú pháp chính xác của hàm API, ta dùng Text API Viewer. Tuy nhiên, để có thông tin chi tiết hơn như hàm API làm gì, truyền tham số gì, trả về giá trị gì, ta cần có quyển sách tra cứu. Ngoài ra, chương trình này còn cho phép copy nộI dung API đến clipboard để dán vào chương trình. 2. Các DLL của Windows Các API được tổ chức trong bốn DLL chính của Windows: a. KERNEL32: Là DLL chính, đảm nhiệm quản lý bộ nhớ, thưc hiện chức năng đa nhiệm và những hàm ảnh hưởng trực tiếp đến hoạt động của Windows. b. USER32: Thư viện quản lý Windows. Thư viện này chứa các hàm xử lý menu, định giờ, truyền tin, tập tin và nhiều phần không được hiển thị khác của Windows. c. GDI32: Giao diện thiết bị đồ hoạ (Graphics Device Interface). Thư viện này cung cấp các hàm vẽ trên màn hình, cũng như kiểm tra phần biểu mẫu nào cần vẽ lại. d. WINNM: Cung cấp các hàm multimedia để xử lý âm thanh, nhạc, video thờI gian thực, lấy mẫu, v.v Nó là DLL 32 bit. (Thư viện 16 bit tên là MMSYSTEM) Ta có thể tìm các tập tin này trong thư mục \Windows\system. Ngoài ra, còn có các DLL nhỏ hơn, cũng được dùng phổ biến để cung cấp các dịch vụ đặc biệt cho ứng dụng. Trên đây là các tên DLL 32 bit. Phiên bản VB4 là bản cuốI cùng còn hỗ trợ 16 bit. 3. Gọi API Gọi API không khác gì với gọi hàm/ thủ tục trong module của đề án. Ví dụ ta có thủ tục: Public sub FindText(obiDataControl as Control, _ SFilename as String) ‘ Code to implement function here End sub Để gọI thủ tục ta dùng : FindText datTitles, “Titles” Chỉ có điều API là một thủ tục không chỉ nằm ngoài module mà còn nằm ngoài Visual Basic. a) Khai báo một cuộc gọI API: Trước khi dùng hàm của DLL, ta cần khai báo hàm đó. Visual Basic cần biết: - Tên hàm / thủ tục. - Tập tin DLL chứa nó. - Tham số truyền. 65
  25. - Kiểu dữ liệu truyền về nếu là hàm. Khai báo API tương tự khai báo hằng/ thủ tục thông thường. Ta vẫn bắt đầu bằng từ khoá Sub/Function, chỉ khác là trước đó phảI có từ khoá Declare.  Ví dụ mẫu - Tạo cửa sổ nhấp nháy bằng cách gọI API 1. Tạo đề án chuẩn mớI 2. Vẽ điều khiển định giờ (timer) trên biểu mẫu và định thuộc tính Interval là 10. Nó sẽ gây ra một sự kiện timer mỗI 10 mi-li-giây. Biểu tượng điều khiển Timer trên hộp công cụ. 3. Nhấn đúp lên cửa sổ này để mở Cửa sổ Code Private Sub Timer1_Timer() Dim nReturnValue As Integer nReturnValue = Flash(Form1.hWnd, True) End Sub 4. Khai báo hàm Flash trong General Declarations: Private Declare Function Flash Lib "User32" _ Alias "FlashWindow" _ (ByVal hWnd As Long, _ ByVal bInvert As Long) As Long 5. Thi hành chương trình. Khi biểu mẫu xuất hiện, tiêu đề của nó nhấp nháy. Mặc dù ta thấy chương trình này rất đơn giản, nhưng nếu viết bằng các hàm Visual Basic thông thường, nó rất phức tạp và tốn rất nhiều chương trình. Từ khoá Declare báo VB biết đây là khai báo một hàm của DLL. Sau Declare là từ khoá Sub hay Function, cho biết đây là thủ tục hay hàm. Ta chỉ có một trong hai lựa chọn. Từ khoá Lib cho biết tên DLL đang chứa hàm/ thủ tục đó. Ở đây là thư viện User32. Từ khoá Alias cho biết tên thực sự của thủ tục / hàm trong thư viện. Nó có thể khác vớI tên ta khai báo trước từ khoá Lib. CuốI cùng là khai báo các tham sổ truyền, cùng vớI kiểu dữ liệu hàm trả về. Ở đây tham số được truyền là : (ByVal hWnd As Long, ByVal bInvert As Long) As Long Tham số đầu, hWnd, là “handle”, xác định cửa sổ cần nhấp nháy. Tham số thứ hai, bInvert là giá trị Boolean. Nếu bInvert được truyền vào có giá trị True, thanh tiêu đề sẽ nhấp nháy. Để trả về trạng thái đầu, ta phảI gọI lạI lần nữa, vớI bInvert mang giá trị False. VớI nhiều hàm API, tên Alias trùng vớI tên thực. Khi đó Visual Basic sẽ tự động loạI bỏ phần Alias. Ví dụ: Private Declare Function FlashWindow Lib "User32" _ Alias "FlashWindow" _ (ByVal hWnd As Long, _ 66
  26. ByVal bInvert As Long) As Long Visual Basic sẽ đổI thành: Private Declare Function FlashWindow Lib "User32" _ (ByVal hWnd As Long, _ ByVal bInvert As Long) As Long Tuy nhiên một số có tên không hợp lệ đốI vớI Visual Basic, như _lopen, một số khác có nhiều phiên bản, ví dụ có ký tự A và W ở cuốI tên. Nói chung, tốt nhất nên dùng tên thực của API. Một số lập trình viên dùng Alias để thay thế tên hàm, hoặc thậm chí khai báo hai tên cho hai phiên bản hàm để nhận các tham số truyền khác nhau. nReturnValue = Flash(Form1.hWnd, True) Sau khi khai báo hàm API, ta có thể gọI API như một hàm hoặc thủ tục Visual Basic thông thường. GọI Flash là gọI đến API trong DLL, và ta lưu giá trị trả về trong biến nReturnValue. ĐốI vớI các hàm thông thường, ta có thể không cần sử dụng giá trị trả về của hàm. Tuy nhiên, ta vẫn cần chứa giá trị trả về vào một biến dù ta không có ý định sử dụng nó. Phần lớn API trả về mã lỗI kiểu số, và ta có thể dùng nó để kiểm tra mọI việc có hoạt động chính xác hay không. Trong thực tế, bỏ qua giá trị trả về không chỉ là lườI biếng mà còn thực sự nguy hiểm nếu ta đang gọI nhiều API. Sử dụng API sai có thể dẫn đến treo Windows, nếu không nói là treo máy. Khi làm việc vớI các API phức tạp, như những hàm cần cấp phát nhiều vùng nhớ và tài nguyên hệ thống. Không nên bắt chiếc các lập trình viên cẩu thả bỏ qua các giá trị trả về. Vì hàm DLL nằm ngoài ứng dụng, chúng tự kiểm tra lỗi – ta chỉ biết có sai sót thông qua giá trị trả về. b) Handle Lấy biểu mẫu làm ví dụ. Windows dùng một cấu trúc để lưu giữ thông tin của biểu mẫu. Thông tin này đồng nhất với thông tin chứa trong cửa sổ Properties. Windows chứa cấu trúc của từng cửa sổ trong một danh sách dài gồm các cấu trúc dữ liệu liên quan đến mọi cửa sổ của mọi chương trình đang chạy. Để xác định cấu trúc nào thuộc cửa sổ nào, nó dùng handle. Nó không dùng tên biểu mẫu vì tên cũng là một thuộc tính của biểu mẫu. Handle chính là số ID của một đối tượng trong Windows. Khi ta bắt đầu dùng API, nhất là những API có xử lý với biểu mẫu, ta sẽ thường xuyên làm việc với handle. Visual Basic chứa handle như một thuộc tính chỉ được đọc, có thể dùng làm tham số truyền cho những hàm của Windows khi cần. Thuộc tính này gọi là hWnd (handle đến một cửa sổ), chỉ có thể truy cập lúc thi hành. Mặc dù nó không mang ý nghĩa trong chương trình, nhưng nó có thể được đọc, và truyền như một tham số đến API. Các API có liên quan hiển thị cửa sổ sẽ cần tham số hWnd để biết chính xác cửa sổ mà nó cần xử lý. c) Khai báo tham số truyền Điểm quan trọng trong khai báo tham số truyền cho API là từ khoá Byval. Với chương trình thông thường, nếu truyền giá trị cho hàm, Visual Basic biết rằng nó chỉ xử lý với bản sao của tham số. 67
  27. Function Square(Byval Number as Double) as Double Một cách khác để truyền tham số là truyền tham chiếu. tham số truyền là biến chứ không phải là bản sao của nó. Do đó nếu hàm thay đổi tham số, các thay đổi này sẽ ảnh hưởng lên biến truyền vào. Nếu không chỉ rõ Byval, VB sẽ tự động xem đó là truyền tham chiếu. Nếu là hàm hoặc thủ tục do ta viết, nếu có sai sót dothiếu Byval, hậu quả không nghiêm trọng, Windows không bị treo. Tuy nhiên, với các DLL, tình hình nguy hiểm hơn nhiều. Nếu ta quên Byval, VB tự động truyền một con trỏ đến biến. Nó cho biết địa chỉ của biến trên vùng nhớ. Sau đó hàm này đến địa chỉ đó và lấy giá trị về. Nếu một hàm của DLL chờ một kết quả trong khoảng từ 0 đến 3, và ta truyền một biến tham chiếu, giá trị thực sự truyền vào có thể là 1002342, là địa chỉ vùng nhớ của biến. Hàm này sẽ xử lý số 1002342 thay vì số thuộc khoảng (0-3), kết quả là hệ thống treo. Không hề có thông báo lỗi ở đây; ta chỉ biết được API bị lỗi khi hệ thống rối loạn và treo cứng. Một trong những kinh nghiệm khi làm việc với API là lưu lại. Vì chúng ta đang mạo hiểm ra ngoài vùng an toàn của Visual Basic, khi bị lỗi, hệ thống treo và ta mất hết dữ liệu. Luôn luôn lưu đề án trước khi chạy đoạn chương trình goin API. Từ menu T ools, chọn Options để mở hộp thoại Options. Chọn tab Environment, đánh dấu vào tuỳ chọn Save Changes. d) Sử dụng lớp với API Sử dụng riêng lẽ từng hàm API sẽ gây khó khăn cho những người đọc chương trình nếu họ không phải là người lập trình ban đầu, nhất là đối với các ứng dụng lớn. Giải pháp của Visual Basic 6 là chuyển các API thành các lớp (các điều khiển ActiveX). Từng API có thể xếp vào những nhóm tuỳ thuộc lĩnh vực nó xử lý. Các nhóm này có thể chuyển thành các lớp của Visual Basic. Ví dụ, tạo một lớp có các chức năng về multimedia của các API về lĩnh vực này. Bài tập: Bài 1: Viết Chương trình tạo 1 ứng dụng có sử dụng hàm API. Bài 2: Viết chương trình ứng dụng có sử dụng 1 đối tượng của Window 68
  28. Bài 11 TÊN BÀI: Lập trình hướng đối tượng MÃ BÀI: ITPRG11 11.1 Giới thiệu Từ đầu quyển đến giờ, chúng ta chỉ sử dụng biến để chứa những dữ liệu tạm thời trong ứng dụng, chẳng hạn như những giá trị do người sử dụng nhập vào qua giao diện. Tuy nhiên, đây chỉ là một phần nhỏ của VB. VB 6 thực chất là một công cụ lập trình hướng đối tượng rất mạnh. Bạn có thể cho rằng kỹ thuật này vượt quá khả năng một người mới học lập trình VB. Tuy nhiên, không hẳn như vậy. Lập trình hướng đối tượng (Object Oriented Programming – OOP) giúp lập trình dễ dàng hơn. Các ví dụ dùng trước đây được lập trình theo kiểu lập trình cổ điển. Điều này không có gì sai bởi vì đây là những chương trình nhỏ và việc sử dụng OOP cho chúng cũng không phù hợp. Với kiểu lập tình cổ điển, còn gọi là Phát triển phần mềm theo cấu trúc (Structured Software Development), ta phải xác định dữ liệu cũng như cách thức để xử lý dữ liệu trong ứng dụng. Một giao diện người sử dụng được cung cấp để hiển thị và nhận dữ liệu từ người sử dụng, sau đó, các hàm và thủ tục con được xây dựng để thực sự xử lý dữ liệu. Điều này có vẻ đơn giản. Để giải quyết một vấn đề lớn, ứng dụng chia thành nhiều vấn đề nhỏ để giải quyết một vấn đề lớn, ứng dụng chia thành nhiều vấn đề nhỏ để giải quyết trong các hàm / thủ tục. OOP hơi khác một chút. Với lập trình có cấu trúc, cách thức xây dựng ứng dụng, cách chúng kết hợp ở mức chương trình rất khác biệt với thực tế cuộc sống. Lấy một ứng dụng tính lương làm ví dụ. Khi nhân viên được nhận vào làm việc, các thông tin về nhân viên đó sẽ được nhập vào hệ thống tính lương. Sử dụng kỹ thuật lập trình có cấu trúc, ta sẽ dùng một biểu mẫu để chứa các thông tin của nhân viên và viết chương trình để copy tất cả thông tin đã nhập vào biểu mẫu đó vào CSDL chứa ở đâu đó trên mạng công ty. Để tạo ra phiếu trả lương, ta cần có một biểu mẫu in phiếu trả lương cho phép NSD chương trình chọn một nhân viên sẽ trả lương, rồi viết chương trình để thu thập tất cả thông tin từ CSDL và định dạng nó rồi đưa ra máy in. Ta có thể thấy rằng, giải pháp này nặng về kỹ thuật và nghiêng về xử lý máy tính hơn là cách thực hiện trong thực tế cuộc sống. Lập trình hướng đối tượng sẽ làm cho mọi chuyện trở nên đơn giản hơn nhiều. Với OOP, ta viết một chương trình dựa trên các đối tượng của thực tế cuộc sống. Ví dụ, nếu ta đang viết một ứng dụng tính lương, đối tượng mà ta cần làm việc sẽ là phòng ban và nhân viên. Mỗi đối tượng này có các thuộc tính: ví dụ, một nhân viên có tên và số; một phòng ban có vị trí và trưởng phòng. Thêm vào đó, có một số phương thức để phòng phát lương áp dụng cho các đối tượng trên - mỗi tháng một lần, nó quyết định áp dụng phương thức phát lương cho các đối tượng nhân viên. Lập trình OOP cũng tương tự như thế: Ta quyết định đối tượng nào là cần thiết, đối tượng có những thuộc tính nào, và ta sẽ áp dụng những phương thức nào cho đối tượng. Ta có thể thấy rằng, đây là giải pháp hết sức gần gũi với những vấn đề của thực tế cuộc sống mà ta thường xuyên gặp phải. Nhân viên được xem là đối tượng trong một ứng dụng, và phòng ban là đối tượng có liên quan với nhân viên. Với lập trình có cấu trúc, ta có xu hướng xem dữ liệu và cách thức xử lý dữ liệu là hai phần tách biệt nhau, hoàn toàn khác với các đối tượng và cách xử lý trong thực tế cuộc sống mà ta vẫn thường làm. Với OOP, ta đóng gói dữ liệu và các chức năng xử lý dữ liệu trong một đối tương (Object) giống hệt với đối tượng trong thực tế cuộc sống. Nhân viên có tên và địa chỉ, vì vậy, đây sẽ là các thuộc tính của đối tượng Nhân viên - dữ liệu. Nhân viên có thể được nhận việc và bị đuổi việc, vì vậy, đây sẽ là các phương thức của đối tượng Nhân viên – chức năng. 69
  29. Bằng cách chia ứng dụng thành nhiều đối tượng và phát triển trên các đối tượng, kỹ thuật này gần gũi hơn với đời sống. Nó giúp tạo ra những chương trình dễ đọc dễ bảo trì. Kỹ thuật này cũng là chọn lựa của nhiều công ty lớn phát triển trong phần mềm. E. Đối tượng trong VB Như vậy các lý thuyết trình bày trên đây thể hiện như thế nào trong VB? Khi ta quyết định đặt một hộp văn bản vào biểu mẫu, ta có phải gọi thủ tục con để tạo hộp văn bản, một thủ tục con khác để đặt hộp văn bản vào vị trí, rồi gọi một thủ tục con khác nữa để định giá trị khởi động? Ta có phải luôn gọi một hàm mỗi khi người sử dụng nhập một giá trị bất kỳ vào hộp văn bản? Dĩ nhiên không phải như vậy. Những gì ta cần làm là kéo và thả một đối tượng (hay một điều khiển), chẳng hạn như hộp văn bản vào biểu mẫu, rồi dùng các thuộc tính để sửa đổi cách thể hiện chúng. Khi người sử dụng nhập dữ liệu vào hộp văn bản, hộp văn bản sẽ thông báo cho ta biết thông qua các sự kiên Change và sự kiện KeyPress. Mặc dù trước đây, bạn không nhận ra điều này, nhưng ở một mức độ nào đó, bạn đã thực hiện lập trình hướng đối tượng rồi đó. Ngoài các đối tuợng hay điều khiển được cung cấp sẵn, VB còn cho phép lập trình viên tạo ra các đối tượng thông qua cơ chế modul lớp (Class module). Trong lớp Modul, ta định nghĩa các thuộc tính và phương thức của một đối tượng. Sau khi hoàn tất, để sử dụng đối tượng, trước hết, ta tạo ra đối tượng và gọi các hàm / thủ tục trong modul lớp. Các đối tượng này có một số đặc tính chung:  Từng đối tượng phải có chức năng tổng quát, được định nghĩa vừa đủ để hiểu nhưng khá mềm dẻo để có thể sử dụng được; nhưng cho phép phát triển thêm tuỳ theo yêu cầu. Ví dụ, một nút lệnh phải có chức năng chung là nhấn vào để thi hành một công việc gì đó. Tuy nhiên, cách thể hiện và hoạt động của nó trong từng trường hợp có thể thay đổi chút ít tuỳ theo cách ta cài thuộc tính và viết code cho phương thức để phản ánh với sự kiện.  Đối tượng giao tiếp bên ngoài thông qua thuộc tính, phương thức, và sự kiện được định nghĩa trước cho nó. Tổ hợp của 3 khái niệm này gọi là giao diện (Interface). Đó là những yếu tố cần biết về một đối tượng để sử dụng chúng.  Có thể sử dụng nhiều đối tượng trong một đề án, ta cũng có nhiều thể hiện khác nhau của một kiểu đối tượng.  Người sử dụng đối tượng không cần quan tâm đến cách lập trình bên trong đối tượng.  Bởi vì người sử dụng chỉ thấy đối tượng điều khiển, ta có thể thay đổi hoạt động bên trong của đối tượng sao cho những thay đổi này không ảnh hưởng đến ứng dụng đang dùng, nghĩa là không thay đổi Interface. F. Modul Lớp Khuôn mẫu để tạo đối tượng là modul lớp. Sau này, modul lớp còn được dùng để tạo điều khiển ActiveX, một kỹ thuật cao hơn của lập trình hướng đối tượng. Trong bước lập trình căn bản với VB, ta dung modul để chứa các hàm hay thủ tục. Tuỳ theo tầm hoạt động của hàm / thủ tục này, ta có thể gọi chúng trực tiếp từ modul. Nhưng modul lớp thì không bao giờ được gọi trực tiếp. Để sử dụng một lớp, ta phải tạo đối tượng từ lớp thông qua lệnh New. Ở đây đối tượng được tạo từ lớp MyClass, còn biến đối tượng MyObject cung cấp một tham chiếu đến đối tượng. Dim MyObject As New myClass Dòng lệnh trên tạo một đối tượng gọi là MyObject theo mô tả của lớp MyClass. Hành động này gọi là tạo một Instance từ lớp.Trong cửa sổ Properties, ta có thể phân biệt tên lớp và tên đối tượng. Combo1 là tên đối tượng, trong khi ComboBox là tên lớp. 70
  30. Ta có thể tạo ra vô số Instance từ một lớp. Mỗi Instance có thể khác nhau một chút tuỳ theo cách ta quy định thuộc tính và sử dụng phương thức. 1. Thuộc tính và phương thức của lớp Bên trong một lớp, ta có thủ tục phương thức (Method Procedures) và thủ tục thuộc tính (Property Procedures). Quy định một thuộc tính, nghĩa là ta đang gọi hàm xử lý sự kiện Property Let. 1. Tạo đề án mới, kiểu Standard EXE. 2. Từ menu Project, chọn Add Class Module. 3. Chọn Class Module và nhấn Open. Cửa sổ Code sẽ hiển thị. Nếu nhìn vào cửa sổ Project Explorer, ta sẽ thấy một lớp mới xuất hiện. 4. Vì ta muốn tạo một lớp Box, nên ta đổi tên lớp Class1 sao cho gợi nhớ: clsBox. Cụm từ “cls” thể hiện đây là lớp, nhờ đó, chương trình trở nên dễ đọc hơn. Để thực hiện điều này, tìm lớp Class1 trong cửa sổ Properties, đổi thuộc tính Name của nó thành clsBox. Thuộc tính của Lớp – Public và Private Lớp Box có 4 thuộc tính là toạ độ góc trái trên (X,Y), chiều cao (Height) và chiều rộng (Width). Bây giờ ta cần khai báo các thuộc tính trên là Public hay Private. Khi một thuộc tính được khai báo là Public trong một lớp, nó sẽ được sử dụng bởi bất kỳ đoạn chương trình nào có sử dụng lớp này. Trái lại, nếu thuộc tính là Private trong một lớp thì nó sẽ không được truy cập bởi bất cứ đoạn chương trình nào khác. Phương thức của Lớp  Ví dụ mẫu – Thêm phương thức cho lớp 1. Thêm đoạn chương trình sau vào modul lớp: Public Sub DrawBox(Canvas As Object) Canvas.Line (mvarX, mvarY)-(mvarX + mvarWidth, mvarY + mvarHeight),, B End Sub Đoạn chương trình này sử dụng phương thức Line của đối tượng Canvas. Phương thức Line sẽ vẽ một hộp trên biểu mẫu nếu ta đưa vào tham số cuối cùng B (B có nghĩa là hộp – box). 2. Kế đến, ta thêm ClearBox vào Lớp: Public Sub ClearBox(Canvas As Object) Canvas.Line (mvarX, mvarY)-(mvarX + mvarWidth, mvarY + _ mvarHeight), Canvas.BackColor, B End Sub 3. Lưu modul với tên clsBox.cls Vì 2 thủ tục này sẽ được dùng làm phương thức của đối tượng, nên chúng được khai báo Public, nghĩa là chúng có thể được gọi từ bên ngoài modul. Tạo Instance cho lớp  Ví dụ mẫu - Tạo hoạt hình với đối tượng hộp 1. Nếu bạn đang mở đề án trong ví dụ trước, chỉ cần nhấn đúp chuột lên biểu mẫu để mở cửa sổ Code. Nếu không, tạo đề án mới kiểu Standard EXE. Từ menu Project, chọn Add Class Module; sau đó, chọn tab Existing trong hộp thoại và chọn clsBox.cls. 2. Tìm sự kiện Click trong hộp danh sách và đưa đoạn chương trình sau vào: Dim A_Box As New clsBox 71
  31. Biến đối tượng A_Box sẽ giữ một Instance của lớp. Từ kháo New rất quan trọng, nếu thiếu nó, VB sẽ cho rằng ta muốn tạo một bản sao của đối tượng clsBox hiện hành. Khi tham chiếu đến nó, ta sẽ gặp lỗi. 3. Đưa đoạn chương trình sử dụng đối tượng: Private Sub Form_Click() Dim A_Box As New clsBox Dim nIndex As Integer With A_Box .Y = 0 .Width = 1000 .Height = 1000 For nIndex = 0 To 1000 .ClearBox Me .X = nIndex .DrawBox Me Next End With End Sub 4. Thi hành chương trình. Nhấn chuột vào biểu mẫu, ta sẽ thấy hộp trượt dọc theo biểu mẫu. Kiểm tra giá trị thuộc tính Trong thủ tục thuộc tính Property Let X, nếu ta truyền vào chuỗi ký tự “Hello World”, trình biên dịch sẽ báo lỗi. Public Property Let X(ByVal vData As Integer) mvarX = vData End Property Tuy nhiên, nếu ta truyền vào số -7983, hộp chắc chắn sẽ không hiển thị trên biểu mẫu. Ta có thể cấm điều nằy bằng cách: Public Property Let X(ByVal vData As Integer) if vData >0 Then mvarX = vData End Property Đối tượng sẽ bỏ qua giá trị âm truyền vào. Thuộc tính chỉ được đọc (Read – Only) Đối với thuộc tính chỉ được đọc, ta không thể thay đổi giá trị thuộc tính. Muốn vậy, ta chỉ cần loại bỏ thủ tục Property Let trong modul lớp. 2. Tham số tuỳ chọn Ta có thể sử dụng tham số tuỳ chọn trong các phương thức, thậm chí các thủ tục của thuộc tính. Ví dụ, ta có thể thêm tham số màu cho phương thức DrawBox. Khi đó, chỉ với phương thức DrawBox, ta có thể vẽ hoặc xoá hộp mà không cần gọi ClearBox. Ví dụ mẫu – Dùng tham số tuỳ chọn 1. Dừng chương trình. Trong cửa sổ Project Explorer, nhấn đúp chuột lên clsBox để mở cửa sổ Code. 2. Tìm phương thức ClearBox, đánh dấu khối thủ tục và nhấn phím Delete để xoá nó đi. 72
  32. 3. Sửa phương thức DrawBox để thêm vào tham số tuỳ chọn màu: Public Sub DrawBox(Canvas As Object, Optional lColor As Long) If IsMissing(lColor) Then Canvas.Line (mvarX, mvarY)-(mvarX + mvarWidth, mvarY + _ mvarHeight),, B Else Canvas.Line (mvarX, mvarY)-(mvarX + mvarWidth, mvarY + _ mvarHeight), lColor, B End If End Sub 4. Đến đây, chương trình chưa thể biên dịch, vì vẫn còn một dòng lệnh tham chiếu đến phương thức ClearBox. .DrawBox Me Xoá dòng này và thay thế bằng dòng lệnh .DrawBox Me, Me.BackColor 5. Thi hành chương trình. Không có thay đổi trong kết quả. Từ khoá Optional cho biết tham số phía sau nó không nhất thiết phải truyền khi gọi phương thức. Để biết được khi nào có tham số được truyền, ta dùng hàm IsMissing. Hàm này trả về giá trị True/False. Nếu không có tham số truyền, nó trả về True; nếu có, nó trả về False. Tuỳ theo trường hợp mà ta có xử lý tương ứng. Ở đây, khi có tham số truyền, ta gọi hàm Line có chỉ định màu. Lưu ý rằng tham số tuỳ chọn phải là tham số cuối cùng trong danh sách được truyền. Ví dụ, dòng lệnh sau đây không được chấp nhận: Public Sub MyRoutine (Optional sName As String, nAge As Integer) Ta phải sửa thành: Public Sub MyRoutine (nAge As Integer, Optional sName As String) 3. Sự kiện của lớp Định nghĩa sự kiện cho lớp đã có trong VB5. Nó vẫn hữu dụng với VB6. Chẳng hạn ta muốn mỗi lần hộp được vẽ trên màn hình, sự kiện Draw gây ra hoạt động cập nhật trên màn hình. Ví dụ - Định nghĩa và kích hoạt sự kiện 1. Định nghĩa sự kiện Draw. Một trong những thông tin cần cập nhật là toạ độ (x,y) của hộp. Mở cửa sổ Code và thêm dòng lệnh sau vào phần General Declarations: Public Event Draw(X As Integer, Y As Integer) Tuy nhiên, dòng lệnh này chưa thể hiện lúc nào thì sự kiện được kích hoạt. 2. Ta muốn sự kiện Draw được sinh ra mỗi khi hộp được vẽ trên biểu mẫu. Tìm phương thức DrawBox và thêm dòng lệnh in đậm vào cuối của phương thức này: Public Sub DrawBox(Canvas As Object, Optional lColor As Long) If IsMissing(lColor) Then Canvas.Line (mvarX, mvarY)-(mvarX + mvarWidth, mvarY + _ mvarHeight),, B Else Canvas.Line (mvarX, mvarY)-(mvarX + mvarWidth, mvarY + _ mvarHeight), lColor, B End If RaiseEvent Draw(mvarX, mvarY) End Sub 3. Tìm thủ tục xử lý sự kiện Click của biểu mẫu. Tìm và xoá dòng lệnh tạo đối tượng A_Box và thêm một dòng vào phần General Declarations: Private WithEvents A_Box As clsBox 73
  33. Private Sub Form_Click() Dim nIndex As Integer With A_Box .Y = 0 .Width = 1000 .Height = 1000 For nIndex = 0 To 1000 .DrawBox Me, Me.BackColor .X = nIndex .DrawBox Me Next End With End Sub 4. Thêm một dòng vào sự kiện Form_Load: Private Sub Form_Load() Set A_Box = New clsBox End Sub 5. Chọn A_Box từ danh sách trong cửa sổ Code. Chọn sự kiện Draw từ danh sách các sự kiện. 6. Trong sự kiện này, ta dùng lệnh Print để in ra toạ độ của hộp trong cửa sổ gỡ rối (hay còn gọi là cửa sổ Immediate) Private Sub A_Box_Draw(X As Integer, Y As Integer) Debug.Print "The box just got drawn at " & X & ", " & Y End Sub 7. Thi hành chương trình. Nhấn chuột trên biểu mẫu, ta thấy hộp trượt qua màn hình. Đồng thời trong cửa sổ Immediate, ta thấy các dòng văn bản hiển thị toạ độ hiện hành của hộp. Ở đây, ta dùng phương thức RaiseEvent để yêu cầu VB phát ra sự kiện Draw, và truyền 2 giá trị của 2 biến thuộc tính mvarX và mvarY chứa toạ độ (x, y) của hộp cho sự kiện Draw mới. Để có thể xử lý các sự kiện của một đối tượng tự tạo, ta cần khai báo đối tượng hơi khác một chút. Trước hết, nó phải được khai báo là Private trong biểu mẫu (hoặc modul), thay vì là Private trong một thủ tục. Sau đó, ta phải dùng từ WithEvents thay vì Dim: Private WithEvents A_Box As clsBox Từ khóa WithEvents báo cho VB biết ta đang khai báo một đối tượng có sự kiện, và ta dự định viết chương trình để xử lý những sự kiện này. Chú ý từ khoá New bị loại bỏ trong dòng lệnh WithEvents. Khi ta viết: Dim A_Box As New clsBox Nghĩa là không chỉ thông báo cho VB rằng ta sắp sử dụng một đối tượng dựa theo lớp clsBox, ta còn yêu cầu VB cấp phát vùng nhớ cho đối tượng và tạo nó. Tuy nhiên, do hạn chế của VB, điều này không được thực hiện với từ khoá WithEvents. Thay vào đó, ta phải tạo đối tượng riêng, bằng cách thêm dòng lệnh vào sự kiện Form_Load. Tóm lại, đối với sự kiện, ta cần nhớ: o Khai báo sự kiện dùng Public Event. o Phát sự kiện dùng RaiseEvent o Tạo đối tượng với Dim WithEvents, không dùng New. o Tạo đối tượng như sau: Set = New o Viết chương trình để bắt sự kiện tương tự xử lý sự kiện của điều khiển. 74
  34. 4. Huỷ đối tượng Sau khi sử dụng một đối tượng và không cần dừng nữa, ta cần huỷ nó đi. Điều này đặc biệt quan trọng khi ta sử dụng nhiều đối tượng trong ứng dụng. Nếu không huỷ đối tượng, sự hao hụt vùng nhớ sẽ làm giảm khả năng hoạt động của ứng dụng. Ta dùng dòng lệnh sau: Set = Nothing Nơi lý tưởng để huỷ một đối tượng là trong sự kiện Unload của biểu mẫu. Ví dụ: Private Sub Form_Unload (Cancel As Integer) Set A_Box = Nothing End Sub G. Biến đối tượng Cho đến bây giờ, ta chỉ tham chiếu đến điều khiển hay biểu mẫu thông qua tên ta đặt cho chúng lúc thiết kế. Cách làm này chỉ phù hợp đối với các chương tình đơn giản. Đặt đối tượng vào biến và tham chiếu đến nó bằng tên biến cho phép ta sử dụng cùng đoạn chương trình cho vô số các instance khác nhau của một kiểu đối tượng. Với biến đối tượng ta có thể: o Tạo điều khiển mới trong lúc thi hành. o Copy điều khiển để sinh ra một instance mới của điêu khiển hiện hành. o Tạo bản sao biểu mẫu cùng tên, cùng điều khiển và chương trình; nhưng từng biểu mẫu chứa và xử lý những dữ liệu khác nhau – tương tự nhiều tài liệu trong ứng dụng của Word hay nhiều bảng tính trong Excel. Biến đối tượng cung cấp khả năng xây dựng các thủ tục tổng quát để xử lý với những điều khiển nhất định. Ví dụ, một thủ tục kiểm tra dữ liệu của hộp văn bản chỉ dùng trong trường hợp tên điều khiển được chỉ ra trong chương tình. Tuy nhiên, để thủ tục trở thành độc lập với điều khiển bất kỳ, ta xem điều khiển như một biến đối tượng. Dim NewEmployee As New cEmployee 1. Tạo điều khiển lúc thi hành Cách đơn giản nhất là tạo một mảng điều khiển vào lúc thiết kế, sau đó, mở rộng mảng bằng chương trình lúc thi hành. Nếu ta định thuộc tính Index của điều khiển đầu tiên là 0 lúc thiết kế, ta có thêm điều khiển lúc thi hành. Điều khiển tạo lúc thi hành có cùng tên, kiểu, và thủ tục xử lý sự kiện như điều khiển ban đầu. Tương tự biến mảng, ta có thể mở rộng hoặc rút gọn mảng điều khiển. Điểm khác nhau là ta không Redim mảng điều khiển như với biến mảng. Thay vào đó, ta phải Load bản instance mới của điều khiển vào mảng. Khi muốn xoá điều khiển, ta Unload chúng. Ví dụ mẫu - Tạo điều khiển lúc thi hành Thử tạo một dãy các nút lệnh trên biểu mẫu. Vẽ một nút lệnh lúc thiết kế và dùng chương trình để tạo phần còn lại. 1. Tạo đề án mới và vẽ một nút lệnh trên biểu mẫu. 2. Đổi thuộc tính Index thành 0. Khi ấy một mảng điều khiển có một phần tử được tạo ra. 3. Đưa đoạn chương tình sau vào thủ tục Click của nút lệnh: Private Sub Command1_Click(Index As Integer) Static sNextOperation As String Dim nIndex As Integer For nIndex = 1 To 5 75
  35. If sNextOperation = "UNLOAD" Then Unload Command1(nIndex) Else Load Command1(nIndex) With Command1(nIndex) .Top = Command1(nIndex - 1).Top + Command1(nIndex - 1).Height .Caption = nIndex .Visible = True End With End If Next If sNextOperation = "UNLOAD" Then sNextOperation = "LOAD" Else sNextOperation = "UNLOAD" End If End Sub 4. Thi hành đoạn chương trình và nhấn trên nút lệnh vài lần. Mỗi lần nhấn, 5 nút lệnh được tạo hoặc xoá. 5. Lưu vào đĩa với tên NewCtrl.vbp Vòng lặp For Next tạo hoặc xoá nút lệnh này tuỳ theo nội dung biến sNextOperation. Trước hết, nội dung của sNextOperation được kiểm tra để xem cần Load hay Unload các phần tử. Lần đầu, sNextOperation chưa được gán, nó rơi vào phần False, nghĩa là Load. Bởi mặc định, điều khiển mới tạo lúc thi hành xuất hiện tại cùng vị trí với điều khiển gốc, và không hiển thị. Do đó, ta có thể đổi vị trí và điều chỉnh kích cỡ mà không để người sử dụng thấy. Nó cũng cấm Windows vẽ lại mỗi lần nạp các điều khiển, không những làm chậm chương trình mà còn hiển thị không có trật tự trong khi ta đang di chuyển chúng. Ta chỉ cho chúng hiển thị sau khi đã có vị trí mới. 2. Sự kiện của mảng điều khiển Mặc dù hiển thị khác nhau, 6 phần tử vẫn chia sẻ một thủ tục xử lý sự kiện, vì nhấn vào một nút bất kỳ, chúng đề đáp ứng như nau. Ta có thể xử lý các sự kiện theo từng nút lệnh phân biệt, dựa trên Index của mảng điều khiển. Ví dụ mẫu - Xử lý sự kiện với mảng điều khiển 1. Mở đề án NewCtrl.vbp và chọn sự kiện Click trên nút lệnh. 2. Thêm đoạn chương trình sau vào: Private Sub Command1_Click(Index As Integer) Static sNextOperation As String Dim nIndex As Integer Select Case Index Case 0 For nIndex = 1 To 5 If sNextOperation = "UNLOAD" Then Unload Command1(nIndex) Else Load Command1(nIndex) With Command1(nIndex) .Top = Command1(nIndex - 1).Top + Command1(nIndex - 1).Height 76
  36. .Caption = nIndex .Visible = True End With End If Next If sNextOperation = "UNLOAD" Then sNextOperation = "LOAD" Else sNextOperation = "UNLOAD" End If Case 1, 2, 3, 4, 5 MsgBox "You pressed Button " & Index End Select End Sub 3. Thi hành chương trình. Nhấn chuột trên từng nút lệnh, một thông điệp xuất hiện cho biết thứ tự nút nhấn. 3. Quản lý điều khiển như biến đối tượng Không chỉ dùng biến đối tượng như mảng điều khiển, ta còn có thể truyền biến đối tượng và mảng đối tượng vào thủ tục hay hàm. Ví dụ, ta có khoảng 30 hộp văn bản trên biểu mẫu, từng cái nhận dữ liệu khác nhau. Một số chỉ nhận kiểu số, một số chỉ nhận chữ cái, số khác chấp nhận cả hai, trong khi số còn lại kiểm tra số ký tự nhập vào xem có vượt quá số lượng quy định không? Nếu xử lý riêng rẽ từng điều khiển, ta sẽ tốn rất nhiều đoạn chương tình. Giải pháp là xem hộp văn bản như một đối tượng, và truyền nó đến một thủ tục tổng quát. a) Hàm kiểm tra hộp văn bản Hàm này sẽ tự động biết kiểu dữ liệu mà mỗi hộp văn bản cũng như chiều dài tối đa của dữ liệu. Ví dụ mấu 1. Tạo đề án mới và vẽ một biểu mẫu gồm các điều khiển như sau: Hình 25 :Hộp điều khiển 1 2. Thiết lập thuộc tính cho hộp văn bản như sau: Mô tả Thuộc tính Giá trị Hộp “alphabetic only” (chỉ Name txtValidate nhận chữ) Index 0 Tag A12 77
  37. Hộp “Numbers” (chỉ nhận Name txtValidate số) Index 1 Tag N5 Hộp “Anything” (nhận mọi Name txtValidate thứ) Index 0 Tag *4 Lưu ý rằng chữ cái trong thuộc tính Tag trong cửa sổ Properties phải là chữ in hoa, nếu không ví dụ không hoạt động. 3. Phần còn lại là viết chương trình. Mở cửa sổ Code, đưa đoạn chương trình sau vào: Option Explicit Private Sub ValidateKeyPress(txtControl As TextBox, nKeyAscii As Integer) Dim sMaxLength As String Dim sKey As String * 1 If nKeyAscii 126 Then Exit Sub sMaxLength = Right$(txtControl.Tag, Len(txtControl.Tag) - 1) If Len(txtControl.Text) >= Val(sMaxLength) Then Beep nKeyAscii = 0 Exit Sub End If Select Case Left$(txtControl.Tag, 1) Case "A" sKey = UCase(Chr$(nKeyAscii)) If Asc(sKey) 90 Then Beep nKeyAscii = 0 Exit Sub End If Case "N" If nKeyAscii 57 Then Beep nKeyAscii = 0 Exit Sub End If End Select End Sub 78
  38. 4. Thi hành chương trình. ValidateKeyPress là thủ tục ở mức biểu mẫu và được khai báo trong phần General. nKeyAscii là mã của phím nhấn. Vì từ khoá ByVal không được nêu ra, nên tham số được truyền bằng tham chiếu. Đổi KeyAscii về 0 trong sự kiện KeyPress nghĩa là phím nhấn. Thuộc tính Tag được dùng như một nhãn riêng đa năng cho các điều khiển. Nó cho biết kiểu dữ liệu được cho phép trong mỗi hộp văn bản. Ký tự đầu tiên định nghĩa kiểu dữ liệu cho phép, ‘A’ nghĩa là chỉ có chữ cái, ‘N’ nghĩa là số, còn lại là các kiểu khác. Con số kế tiếp quy định số ký tự tối đa trong mỗi hộp văn bản. Ta có thể đổi kiểu dữ liệu của mỗi hộp văn bản bằng cách đổi thuộc tính Tag trong cửa sổ Properties. Giai đoạn đầu tiên, chương tình kiểm tra nKeyAscii cho các ký tự đặc biệt. Nếu chúng được nhấn, phím đó sẽ được bỏ qua. If nKeyAscii 126 Then Exit Sub Dòng lệnh kế lấy giá trị từ thuộc tính Tag đưa vào biến sMaxLength. Sau đó, kiểm tra chiều dài tối đa: If Len(txtControl.Text) >= Val(sMaxLength) Then Beep nKeyAscii = 0 Exit Sub End If Select Case so sánh phím ký tự với kiểu dữ liệu quy định trong thuộc tính Tag. Hàm Chr$ chuyển mã ký tự nKeyAscii thành chuỗi ký tự tương ứng. Hàm Asc làm ngược lại và trả về mã ký tự ASCII của một ký tự. 4. Khai báo biến đối tượng Ta có thể khai báo một biến đối tượng một cách tường minh như khai báo biến thông thường bằng cách cung cấp một kiểu dữ liệu mà VB nhận ra. Dim txtControl As TextBox Chương trình sẽ hiệu quả, dễ gỡ rối và chạy nhanh hơn khi khai báo biến đối tượng tường minh. Tuy nhiên, VB cũng cho phép khai báo một biến đối tượng “ẩn”: Dim cltControl As Control Tham số hàm và thủ tục có thể khai báo kiểu này. Nó cho phép ta truyền một điều khiển bất kỳ. Sau đó, dùng dòng lệnh TypeOf để kiểm tra kiểu điều khiển liên quan đến một đối tượng. Nếu khai báo tường minh, VB kiểm tra thuộc tính của đối tượng ngay lúc biên dịch. Nếu khai báo ẩn, VB chỉ kiểm tra thuộc tính lúc thi hành. Kiểu của biến đối tượng Sau đây là danh sách các kiểu đối tượng tường minh mà VB có thể nhận ra: CheckBox ComboBox CommandButton MDIForm Data DirListBox DriveListBox FileListBox Grid Frame HscrollBar Image Label Line ListBox menu OptionButton OLE PictureBox Shape 79
  39. TextBox Timer VscrollBar Form Đây là những đối tượng chuẩn. Chúng là những tên lớp và được đặt kế bên tên điều khiển trong cửa sổ Properties. Ví dụ mẫu – So sánh khai báo tường minh và ẩn 1. Tạo đề án mới. Vẽ biểu mẫu như sau: Hình 26 : Hộp điều khiển 2 2. Đặt tên điều khiển nhãn trống là lblTime, nút lệnh là cmdExplicit và cmdImplicit. 3. Mở cửa sổ Code, đưa đoạn chương trình sau vào: Private Sub cmdExplicit_Click() Dim varTime As Variant Dim nIndex As Integer varTime = Now For nIndex = 1 To 15000 Time_Explicit cmdExplicit, nIndex Next cmdExplicit.Caption = "&Explicit" lblTime.Caption = Minute(Now - varTime) & " Mins, " & _ Second(Now - varTime) & " Secs" End Sub Private Sub cmdImplicit_Click() Dim varTime As Variant Dim nIndex As Integer varTime = Now For nIndex = 1 To 15000 Time_Implicit cmdImplicit, nIndex Next cmdImplicit.Caption = "&Implicit" lblTime.Caption = Minute(Now - varTime) & " Mins, " & _ Second(Now - varTime) & " Secs" End Sub Đưa 2 thủ tục sau vào phần (General) Private Sub Time_Explicit(cmdCommand As CommandButton, nNumber As Integer) cmdCommand.Caption = nNumber End Sub Private Sub Time_Implicit(cmdCommand As Control, nNumber As Integer) 80
  40. cmdCommand.Caption = nNumber End Sub 4. Thi hành ứng dụng bằng cách nhấn F5. 5. Khi biểu mẫu xuất hiện, nhấn nút Explicit. Chương trình báo thời gian hiển thị liên tục 15000 tiêu đề khác nhau trên nút lệnh. Nút lệnh là một biến đối tượng được khai báo tường minh. 6. Nhấn chuột trên nút Implicit. Mọi việc xảy ra tương tự, nhưng lần này nút lệnh là một biến đối tượng được khai báo ẩn. Để ý bạn sẽ thấy nhấn trên Implicit chậm hơn nhấn trên Explicit khoảng 10%. 81
  41. Bài 12 ĐÓNG GÓI CHƯƠNG TRÌNH ỨNG DỤNG MÃ BÀI: ITPRG10.12 Mục tiêu thực hiện: - Biết được qui trình đóng gói 1 sản phẩm phần mềm. - Biên dịch được tập tin chính và các tập tin khác. - Thích hợp được các Modul. - Đóng gói sản phẩm phần mềm - Phân phối sản phẩm Nội dung: 12.1 Khai thác và sử dụng công cụ đóng gói. 12.2 Biên dịch chương trình. 12.3 Thích hợp các mô đun chương trình. 12.4 Phân phối sản phẩm phần mềm ứng dụng. 12.1 ADD-INS Tõ menu Add-ins, chän Add-ins manager hép tho¹i Add-in xuÊt hiÖn Hình 27 Hộp thoại Add-In Manager 82
  42. 12.1 Các công cụ trong ADD-INS Trình cài đặt ứng dụng Là Trình đóng gói và triển khai ứng dụng sẽ được nói rõ ở phần sau Trình đối tượng dữ liệu tự động Chỉ có trên phiên bản Professional và Enterprise của VB 6 Trình đối tượng dữ liệu ( Data Object Wizard ) tự động tạo ra các đối tượng tầng giữa ( middle- tier object ) rằng buộc với môi trường dữ liệu ( Data Environment ) hoặc các UserControl. Nó cho phép phát sinh các đoạn chương trình để tạo ra nguồn dữ liệu hiệu chỉnh và User Control để hiển thị và thao tác các dữ liệu thông qua các thủ tục đã lưu trữ. Lưu ý rằng, trước hết ta phải tạo một Data Environment với các lệnh để lấy về hoặc thao tác trên dữ liệu trước khi dùng Wizard này. Các lệnh này bao gồm : Dòng lệnh SELECT Các lệnh tuỳ chọn như INSERT, UPDATE, DELETE Add-In được dùng khi ta cần : . Tạo các Recordset cho phép cập nhật từ các thủ tục đã lưu trữ . Tạo các User Control để hiển thị và thao tác với CSDL . Tự động phát sinh chương trình của VISUAL BASIC để thể hiện mối liên hệ giữa các dữ liệu. . Tạo các điều khiển để cho phép hiển thị và thao tác với các mối liên hệ tìm kiếm. . Dùng mô tả bằng văn bản dễ hiểu thay vì một giá trị khó hiểu. . Có mô tả văn bản dễ hiểu cho giá trị Null. 12.2 Trình xây dựng dữ liệu tự động Chỉ có trên phiên bản Professional và Enterprise của VB 6 Trình xây dựng biểu mẫu dữ liệu ( Data Form Wizard ) được kết hợp với trình tạo ứng dụng ( Application wizard ), tạo biểu đồ ( Chart ) và lưới ( FlexGrid ). Wizard này được thiết kế để tự động phát sinh các biểu mẫu Visual Basic chứa các điều khiển rằng buộc dữ liệu và các thủ tục dùng quản lý thông tin dẫn xuất từ các bảng và các câu truy vấn. Ta có thể dùng Wizard để tạo các biểu mẫu từ một bảng hay một câu truy vấn, hoặc một biểu mẫu kiểu Master/Detail chứa các mối quan hệ phức tạp loại một – nhiều. Nếu sử dụng điền khiển ta có thể dùng biểu mẫu kiểu lưới hay kiểu mảng ( datasheet ) . Wizard chỉ được dùng kết nối với kiểu ADO. Dùng Wizard để : . Thiết kế nhanh chóng các biểu mẫu với các điều khiển rằng buộc với nguồn dữ liệu. . Tạo các biểu mẫu Master/Detail kiểu một mẩu tin, kiểu lưới. . Tạo nhanh chóng các khuôn mẫu cho biểu mẫu dựa trên dữ liệu. 83
  43. 12.2.1.1 Tạo biểu mẫu với một bảng hay kiểu lưới ( hay datasheet) Xác định loại cơ sở dữ liệu : Là ODBC hay Access Chọn tên tệp tin cơ sở dữ liệu và kiểu ràng buộc ta muốn sử dụng trên biểu mẫu. Bước này dùng cho những cơ sở dữ liệu không phải ODBC. Chọn kiểu biểu mẫu : Có nhiều kiểu : Một mẩu tin : ở một thời điểm, chỉ một mẩu tin hiển thị. Đây là mặc định. Bảng dữ liệu ( Datasheet ) :Biểu mẫu hiển thị những trường được chọn theo dạnh bảng dữ liệu ( Datasheet ) dùng điều khiển DataGrid. Master / Detail : Mẩu tin Master có định dạng là một mẩu tin và mẩu tin Detail là một bảng dữ liệu ( Datasheet ). Khi dữ liệu trong Master thay đổi, dữ liệu trong Detail tự động thay đổi theo do liên kết giữa 2 phần này. MS Hflex Grid: Biểu mẫu hiển thị dữ liệu xếp theo bảng. MS Chart: Biểu mẫu hiển thị dữ liệu theo biểu đồ. Chọn rằng buộc Điều khiển ADO Dùng chương trình của ADO Dùng lớp dữ liệu ( Data class ) Chọn nguồn cho mẩu tin Chọn điều khiển ta muốn xuất hiện trên biểu mẫu và cho phép Wizard tạo chương trình cho chúng. Đó là các nút Add, Update, Edit, Refresh, Close, Show Data Control. Kết thúc. 12.2.1.2 Tạo biểu mẫu Master/ Detail . Xác định cơ sở dữ liệu là ODBC hay Access . Chọn biểu mẫu (tương tự phần tạo biểu mẫu trước ) . Xác định nguồn dữ liệu cho phần Master . Xác định nguồn dữ liệu cho phần Detail . Xác định dữ liệu cho kết nối một-nhiều giữa Master và Detail. . Chọn điều khiển ta muốn xuất hiện trên biểu mẫu và cho phép Wizard tạo chương trình cho chúng. Đó là các nút Add, Update, Edit, Refresh, Close, Show data control. . Kết thúc Biểu mẫu chứa điều khiển dữ liệu ADO Thu thập các thông tin cần thiết để kết nối với một nguồn dữ liệu ODBC và cho phếp chọn kiểu ràng buộc. Bước này chỉ xuất hiện nếu ta chọn Remote ODBC ở bước định dạng cơ sở dữ liệu. 5. Trình thiết kế Add-ins tự động Có trên mọi phiên bản của VB 6 Trình tạo ứng dụng tự động ( Application Wizard ) cho phép ta lưu các chọn lựa thành một profile để dùng lại về sau, cho phép tạo nhiều ứng dụng với cùng một định dạng. Ta còn có thể 84
  44. phóng Data form Wizard và Toolbar Wizard từ trong Trình tạo ứng dụng tự động để tạo các biểu mẫu dữ liệu và thanh công cụ. Menu giờ đây hoàn toàn có thể được hiệu chỉnh. 6. Trình thiết kế tự động Chỉ có trên phiên bản Professional và Enterprise của VB 6. Dùng trình thiết kế Add-in tự động ( Add-in Designer ) để bắt đầu quy trình lập trình cho một Add-in bằng cách chỉ ra cách nạp mặc định tên, mô tả, ứng dụng sau cùng, và các phiên bản. Trình thiết kế hỗ trợ một số đoạn chương trình cho các tập tin DLL hay EXE để đăng ký Add-in cho ứng dụng sau cùng. a) Khởi tạo một add-in mới Tạo một Add-is bằng cách chọn New Project từ menu File. Sau đó, chọn Add-in trong hộp hội thoại New Project. Trên Tab General, đưa vào các thông tin cơ bản về mô tả add-in, các thức nạp và cho biết ứng dụng nào quản lý nó. Chọn Tab Advanced để đưa vào những thông tin bổ sung về các tài nguyên và các giá trị trong Registry. Để thêm chương trình cho add-in, nhấn đúp chuột lên Add-in Designer. Để biên dịch add-in, chọn Meke exe hay Make add từ menu File 7. Tiện ích xây dựng lớp Chỉ có trên phiên bản Professional và Enterprise của VB. Hình 28:Hộp thoại tiện ích xây dựng lớp Tiện ích xây dựng lớp ( Class Buider Utility ) hỗ trợ paramArray, Optional, ByVal và các giớ trị Default trong danh sách tham số và hỗ trợ các Enums. Tiện ích tổ chức các lớp theo phân nhánh trong một đề án của Visual basic. Nó theo dõi các lớp và phát sinh các đoạn chương trình đơn giản để thao tác trên các lớp, bao gồm thuộc tính, phương thức, sự kiện và enum. 85
  45. Nhấn lên một lớp và tập hợp cho phép sửa đổi nó. Tương ứng với lớp được chọn bên trái và danh sách các thuộc tính, phương thức và sự kiện xuất hiện bên phải. Enum hiển thị trong Tab All. 8. Trình tạo thanh công cụ tự động Có trên mọi phiên bản của VB 6. Khi ta nạp tạo ứng dụng tự động ( Application Wizard ), trình thanh công cụ tự động ( Toolbar Wizard ) tự động mở khi ta muốn thêm một thanh công cụ có thể hiệu chỉnh vào biểu mẫu. Ta có thể: . Tạo một thanh công cụ. . Đổi thứ tự các nút nhấn. . Thêm Bitmap hay biểu tượng mà ta muốn thêm chức năng. H. Trình đóng gói và triển khai ứng dụng 1. Phát hành ứng dụng Sau khi viết xong một chương trình Visual Basic ta cần phát hành nó. Ta có thể phát hành qua đĩa, CD, qua mạng, Internet hay Intranet. Có 2 bước để thực hiện việc phát hành : . Đóng gói : đóng gói các tập tin của chương trình thành những tập tin.CAB để có thể triển khai chúng ở những nơi được chọn, và ta phải tạo chương trình cài đặt tương ứng với kiểu đóng gói. . Triển khai: Chuyển ứng dụng đã được đóng gói đến nơi mà người sử dụng có thể cài đặt từ đó. Điều này có nghĩa là sao chép phần đóng gói xuống đĩa mềm, ổ mạng hay triển khai trên Web site nào đó. 2. Trình đóng gói và triển khai ứng dụng Trình đóng gói và triển khai ứng dụng ( Package and deployment Wizard ) có sẵn trên mọi ấn bản VB6. Trong các phiên bản cũ, nó là Setup Wizard, cho phép triển khai các tập tin .CAB lên Web server. Ổ đĩa mạng hay những thư mục khác. Giờ đây, Trình đóng gói và triển khai ứng dụng hỗ trợ cả ADO, OLE DB, RDO, ODBC và DAO cũng như các ứng dụng IIS và HTML. Nó cũng xử lý tốt hơn các nhóm trong menu Start và các biểu tượng cho chương trình cài đặt. Nó có thể được chay trong VB như một Add-in, hay trên dòng lệnh với tập tin.BAT. Ngoài ra, ta có thể dùng Setup Toolkit (được cung cấp khi ta cài đặt VB ) để hiệu chỉnh các thể hiện trong quy trình cài đặt. 3. Mở trình đóng gói và triển khai trong VB Mở đề án ta muốn phát hành Lưu ý rằng nếu bạn đang làm việc với một nhóm các đề án hoặc có nhiều đề án đang được nạp, bạn phải bảo đảm rằng đề án đem đóng gói là đề án hiện hành trước khi mở Wizard. Dùng Add-in Manager để nạp trình đóng gói và triển khai ứng dụng, nếu cần : Từ menu Add-ins, chọn Add-in Manager, chọn Package and Deployment Wizard từ danh sách, nhấn OK. 86
  46. Chọn Package and Deployment Wizard từ menu Add-ins để phóng Wizard. Trên màn hình chính chọn một trong các tuỳ chọn sau: . Nếu ta muốn tạo một đóng gói chuẩn, đóng gói kiểu Internet hay các tập tin liên quan cho ứng dụng, chọn Package. . Nếu muốn triển khai ứng dụng, chọn Deploy. . Nếu muốn xem, soạn thảo, hay xoá kịch bản, chọn Manager Scripts. . Thực hiện lần lượt qua các màn hình của Wizard. 4. Mở trình đóng gói và triển khai như một ứng dụng độc lập. Nếu đề án ta muốn đóng gói đang mở,lưu nó lại và thoát khỏi Visual Basic. Nhấn nút Start, chọn vào Package and Deployment Wizard từ nemu con của VB. Trong danh sách Project của màn hình khởi tạo, chọn đề án ta muốn đóng gói. Lưu ý : Ta có thể nhấn nút Browse nếu đề án chưa có trong danh sách. Trên màn hình chính, chọn một trong những tuỳ chọn sau : Nếu muốn tạo một đóng gói chuẩn, đóng gói kiểu Internet, hay các tập tin kiên quan, chọn Package. Nếu muốn triển khai ứng dụng, chọn Deploy. Nếu muốn xem, soạn thao, hay xoá kịch bản, chọn Manage Scripts. Thực hiện lần lượt qua các màn hình của Wizard. 5. Thi hành Wizard dưới chế độ silent Sử dụng kịch bản ta có thể đóng gói và triển khai ứng dụng dưới chế độ Silent. Trong đó, Wizard tự động thi hành và ta không cần tương tác để chọn lựa hay di chuyển trên màn hình. Nó sử dụng các chọn lựa chứa trong kịch bản. Chế độ Silent đặc biệt hữu dụng nếu ta đóng gói và triển khai ứng dụng bằng tập tin. BAT. Ta có thể dùng nó để kiểm tra kết quản với một thưu mục tạm thời. Mở dấu nhắc DOS Nhập vào tên tập tin thi hành (. EXE ) của trình Wizard, pdcmdln. Exe, kế tiếp là đường dẫn và tên tập tin của đề án VB, các đối dòng lệnh tương ứng. Ví dụ : pdcmdln.Exe c:\project1\project1.vbp /p “Internet Package “ /d Deploymentl /L “c:\project1\Silent mode.log “ Lưu ý : bạn chó thể dùng cả /p và / d để thi hành trong chế độ Silent. Nếu không, dùng một trong hai. Tham số Mô tả /p Packageingscript Theo sau /p là tên kịch bản đóng gói chứa các lựa chọn để thi hành trong chế độ silent. /d Deploymentscript Theo sau /d là tên kịch bản đóng gói chứa các lựa chọn để thi hành trong chế độ silent. /l Path Wizard sẽ chứa tất cả kết quả của nó chẳng hạn như là thông báo lỗi, báo cáo thành công vào một tập tin thay vì hiển thị ra màn hình. Sau /l là đường dẫn và tên của tập tin đó . Nếu tập tin này chưa có. wizard tự động tao ra. Lưu ý : Tên tập tin hoặc tên kịch bản có chứa khoảng trắng đặt trong dấu trích dẫn ( dấu nhảy kép ). 87
  47. 6. Setup toolkit Setup toolkit là một đề án cài đặt với VB và được sử dụng bởi Trình đóng gói và triển khai khi nó tạo chương trình setup. Để án Setup toolkit chứa các biểu mẫu và chương trình mà chương trình setup dùng cài đặt tập tin cho người sử dụng. Khi ta dùng Trìch đóng gói và triển khai. Wizard bao gồm setup1. exe mà đề án setup toolkit tạo ra. Tập tin này được dùng làm một tập tin cài đặt chính. Setup toolkit còn dùng để điều chỉnh các màn hình hiển thị trong quá trình cài đặt nếu ta cần thêm những tính năng không cấp sẵn bởi Wizard. Setup Toolkit chứa trong thư mục con \Wizards\PDWizard\Setup1 của thư mục cài đặt VB. Thận trọng: Các tập tin trong đề án này sẽ được sử dụng bởi kết quả của trình đóng gói và triển khai. Trước khi sửa đổi cần phải sao một bản dự phòng trong một thư mục khác. Nếu bạn sửa đổi Setup1. exe, chương trình setup được tạo bởi Trình đóng gói và triển khai sẽ dùng bản chỉnh sửa này thay vì bản gốc. Sử dụng Setup Toolkit bằng các nạp đề án Setup1. vbp vào Visual Basic và tiến hành sửa đổi trên cách hiển thị cũng như tính năng của đề án. Khi làm việc này, ta cần lần lượt đi qua từng bước. a) Các bước sửa đổi trình đóng gói và triển khai Khi muốn sửa đổi Setup Toolkit nhằm thay đổi kết quả tạo ra bởi Trình đóng gói và triển khai, ta làm như sau : Sửa đề án Setup Toolkit để chứa các lời nhắc, màn hình, chức năng chương trình hay những thông tin khác. Khi hoàn tất, biên dịch đề án để tạo setup1. exe. Thi hành trình đóng gói, là theo các lời nhắc trên màn hình để tạo ra môi trường phát hành. b) Các bước tạo một chương trình Setup hiệu chỉnh Tạo tệp tin.CAB cho đề án, dùng tiện Khi muốn tạo chương trình setup một cách thủ công dùng setup Toolkit thay vì Trình đóng gói và triển khai, ta làm như sau: 1. Nếu cần sửa đề án Setup Toolkit để chứa các lời nhắc, màn hình, chức năng, chương trình và các thông tin khác. 2. Xác định tập tin nào cần phân phát, bao gồm các tập tin thi hành, cài đặt và các tập tin liên quan. 3. Xác định thư mục cài đặt trên máy người dùng 4. Tạo thủ công tập tin setup.lst để đưa ra tên và thư mục cài đặt của tất cả các tập tin chứa trong đề án. 5. Xác định cách thức cài đặt tập tin. 6. ích Makecab. Mẹo: Bạn có thể dùng Trình đóng gói và triển khai để tạo tập tin.CAB sau đó sửa chúng bằng tay. Khi Wizard tạo một tập tin.CAB, nó tạo mt tập tin. DDF và một tập tin.BAT trong thư mục con \Support của thư mục đề án. Để sửa đổi tập tin.CAB, sửa trên tập tin. DDF, sau đó chạy tập tin.BAT. Tập tin.BAT sẽ chạy Makecab.exe để tạo lại tập tin.CAB. 7. Tạo setup1.exe cho đề án bằng cách biên dịch dùng Setup Toolkit. 8. Sao chép tập tin vào môi trường phân phát, hoặc đưa lên Web side dùng trình phát hành Web (Web publishing Wizard ) 88
  48. I. Bài tập Dùng trình tạo ứng dụng tự động tạo ứng dụng kiểu Explorer. Dùng trình xây dựng dữ liệu tự động tạo biểu mẫu Master/Detail. Bài lập lớn: Bài 1: Hãy xây dựng 1 ứng dụng giải trí gốm có các tính năng nghe nhạc, xem hình ảnh, am lịch, đồng hồ tương tự. Bài 2: Viết 1 ứng dụng quản lý hồ sơ học sinh 89
  49. THUẬT NGỮ CHUYÊN NGÀNH Graphical User Interface (GUI) : Giao diện đồ hoạ người dùng Script :Ngôn ngữ kịch bản Form :Biểu mẫu Tool box :hộp công cụ Explorer windows : Cửa sổ duyệt dự án Control: Điều khiển Properties : Cửa số thuộc tính Web Application: Ứng dụng Web VBP : Visual basic Project Text box: Hộp nhập văn bản Name: Tên của điều khiển Text : Là văn bản thể hiện Tooltiptext: xuất hiện nội dung của văn bản Multiline: giá trị dòng Passwordchar: Chọn mật khẩu là ký tự Scrollbars: Cho phép Textbox có các thanh cuộn hay không Name: Tên của điều khiển Text : Là văn bản thể hiện Enabled :giá trị nhập hay không nhập Alighment: Canh nội dung văn bản Font: chọn font chữ cho textbox Forecolor: Chọn màu của văn bản bên trong textbox. Command buton: Nút lệnh Shape : Các hình học cơ bản FillStyle: gồm nhiều giá trị của nền bên trong hình học. Borderwidth: Độ rộng biên của hình học. Backstyle: Có 2 giá trị Transparent- trong suốt ( không có nền), Opaquee- Có nền BoderWidth: thiết lập kích thước của đoạn thẳng Timer: Bộ định giờ Option button : Nút chọn Frame : Khung Vscroll: Thanh cuộn dọc Check Box: Hộp kiểm tra Image: hình ảnh Picture: Chứa hình cẩn thể hiện Event : thủ tục đáp ứng biến cố 90
  50. Click : nhấn chuột vào đối tượng Change: thay đổi các giá trị của đối tượng Load :khởi động đối tượng Dialog :Hộp thoại Log in dialog : Hộp đăng nhập SDI (Single Document Interface): Ứng dụng mở cửa sổ Biểu mẫu con :Child Form Hộp nhập :Input box StatusBar: thanh trạng thái Tool bar: Thanh công cụ CheckBox : Điều khiển cung cấp một điều kiện đúng / sai. ComboBox : Đây là hộp kết hợp xổ xuống chuẩn của Visual Basic cho phép người sử dụng nhập dữ liệu trực tiếp DateTimePicker : Điều khiển này có thể rằng buộc ngày hoặc giờ DBList : điền dữ liệu vào danh sách từ một bảng cơ sở dữ liệu. Label : cho phép trình bày văn bản từ một trường cơ sở dữ liệu DataGrid : Lưới hiển thị dữ liệu của cơ sở dữ liệu theo dòng RecordChangeCompleteL:thay đổi một mẩu tin và sự kiện Link: liên kết liên kết tĩnh : static link liên kết động :dynalic link Object Oriented Programming –( OOP) Lập trình hướng đối tượng Structured Software Development Object:Phát triển phần mềm theo cấu trúc đối tượng Property Procedures :thủ tục thuộc tính Method Procedures :thủ tục phương thức Read – Only:chỉ được đọc Data Environment môi trường dữ liệu Data Object Wizard : đối tượng dữ liệu FlexGrid :Lưới Chart :Biểu đồ Data Form Wizard xây dựng biểu mẫu dữ liệu MS Hflex Grid: Biểu mẫu hiển thị dữ liệu xếp theo bảng. MS Chart: Biểu mẫu hiển thị dữ liệu theo biểu đồ. Class Buider Utility :Tiện ích xây dựng lớp Package and deployment Wizard : đóng gói và triển khai ứng dụng 91
  51. TÀI LIỆU THAM KHẢO 1. Giáo trình Visual Basic và giới thiệu Visual Basic . net , NXB Thống kê 2. Giáo trình Visual basic nhà xuất bản SDC năm 2007. 3. Giáo trình Visual basic6.0 NXB giáo dục 2004 4. Visual Basic 6.0 tại MSDN 5. Visual Basic tại MSDN – phần lớn về Visual Basic.NET 6. Project Semplice – dự án để hỗ trợ Visual Basic trên Java Virtual Machine (JVM) 7. Visual Basic 2005 Express – phiên bản miễn phí, hoạt động trên Web 8. Visual Basic 2005 Express – phiên bản miễn phí, hình CD (CD image) 9. Visual Basic 5.0 Control Creation Edition – phiên bản miễn phí để tạo ra điều khiển 92