Giáo trình Lập trình Windows: Phần 1 cung cấp cho người học những kiến thức như: Giới thiệu về lập trình windows và visual basic 6.0, Cơ sở lập trình trong visual basic 6.0, Lập trình với các điều khiển thông dụng. Mời các bạn cùng tham khảo!
Giới thiệu về lập trình Windows
Khi phát triển cấu trúc Windows, Microsoft đã thiết kế nhiều chức năng lập trình hữu ích cho các ứng dụng dựa trên nền tảng này Chiến lược này nhằm tạo ra một giao diện đồng nhất cho người dùng và giảm thiểu công sức lập trình viên bằng cách cung cấp các hàm đã được mã hóa và kiểm tra lỗi Những hàm này được lưu trữ trong các thư viện liên kết động (DLL) và được gọi là giao diện lập trình ứng dụng (API).
Kể từ khi trở thành hệ điều hành 32bit, Windows 95 đã giới thiệu Win32 API, trong đó một số hàm tương tự như lệnh Visual Basic, nhưng phần lớn được truy cập thông qua việc gọi hàm API Để lập trình sâu với Windows API, người lập trình cần hiểu rõ về hệ điều hành Windows và cách mà nó điều khiển ứng dụng, từ đó có thể can thiệp, bổ sung chức năng hoặc biến đổi ứng dụng theo ý muốn.
Các ứng dụng trên Windows có thể mở nhiều cửa sổ, bao gồm cả Form và Dialog Mỗi cửa sổ được xác định bởi một handle duy nhất do hệ điều hành Windows tạo ra, giúp hệ thống nhận diện chính xác từng cửa sổ.
Hệ điều hành và chương trình ứng dụng duy trì hàng đợi các chỉ lệnh cần thực hiện, với mỗi ứng dụng có một hàng đợi riêng (Message Queue) Khi người dùng đưa ra lệnh hoặc có sự kiện xảy ra, các chương trình điều khiển thiết bị nhập sẽ chuyển đổi thông tin thành chỉ lệnh và đưa vào hàng đợi hệ thống (System Message Queue) Hệ điều hành sẽ lần lượt kiểm tra các chỉ lệnh trong hàng đợi này để xác định cửa sổ nào tiếp nhận, sau đó đặt một chỉ lệnh tương ứng vào hàng đợi của nó (thread message) Các chương trình ứng dụng dựa vào chỉ lệnh này để thực hiện và xử lý thông tin.
Cửa sổ trong hệ điều hành Windows hoạt động như một động cơ tự động, nhận "nhiên liệu" từ hệ điều hành Hệ điều hành Windows xử lý các chỉ lệnh từ hàng đợi và sử dụng hàm API để truyền lệnh tới cửa sổ thông qua cán (handle) của nó Mỗi cửa sổ đều có một hàm gọi là WinProc, đôi khi được gọi là WinMain, thực hiện các chức năng cần thiết cho hoạt động của cửa sổ.
Message là lệnh mà hệ điều hành gửi qua handle của cửa sổ Nếu lệnh có giá trị WM_QUIT, hàm WinProc sẽ kết thúc vòng lặp Ngược lại, nếu lệnh khác giá trị này, hai dòng lệnh sẽ được thực hiện.
TranslateMessage message -> Dịch chỉ lệnh thành dạng dữ liệu khác đặt kết quả này vào hàng đợi của ứng dụng
DispatchMessage message ->Nhận chỉ lệnh từ hàm GetMessage và gửi cho hệ thống Hệ thống sẽ đƣa chỉ lệnh cho ứng dụng
Windows cung cấp hàng ngàn chỉ lệnh khác nhau, được gọi là các hằng dạng WM_* Một hàm WinProc luôn nhận các biến theo khuôn mẫu nhất định để thực hiện xử lý.
Function WinProc(hwnd as Long, wc as WNDCLASSEX, message as MSG, wParam as Long, lparam as Long)
Nếu hàm WinProc không xử lý các chỉ lệnh, nó sẽ chuyển giao cho hệ điều hành thông qua hàm DefWindowProc Hàm này gửi lại chỉ lệnh WM_CLOSE cho WinProc, và WinProc sẽ tiếp tục gửi WM_CLOSE trở lại cho DefWindowProc như đã mô tả.
Ta có thể tóm lại sơ bộ nhƣ sau:
Hình 1.1 Cơ chế xử lý chỉ lệnh của Windows Các chỉ lệnh đưa tới ngăn chờ trên thông thường từ các nguồn sau:
2) Chương trình khác đặt vào
3) Chính chương trình của mình đặt vào thông qua các hàm SendMessage() và PostMessage()
Khi sử dụng hàm SendMessage(), chương trình sẽ chờ cho đến khi WinProc xử lý lệnh trước khi tiếp tục thực hiện lệnh tiếp theo Ngược lại, PostMessage() chỉ đưa lệnh vào hàng đợi và cho phép chương trình tiếp tục thực hiện lệnh kế tiếp ngay lập tức.
Từ đây ta nhận thấy việc xử lý hệ thống của Windows thông qua cơ chế trên thì giản đơn đi rất nhiều.
Thƣ viện liên kết động
Windows cung cấp nhiều hàm gọi thông qua các thư viện liên kết động (DLL), được biên dịch bằng C/C++ Sự mạnh mẽ của DLL nằm ở khả năng chia sẻ mã giữa các ứng dụng, giúp tiết kiệm bộ nhớ và dễ dàng cập nhật.
Người dùng thường chọn Windows do giao diện người dùng phổ biến, dễ sử dụng cho nhiều ứng dụng, như các hộp thoại, menu và thanh công cụ trong Office97 Điều này cho thấy sự nhất quán trong thiết kế phần mềm, nhờ vào những đoạn chương trình chung được sử dụng để tạo ra các thành phần giao diện này.
Dễ bảo trì: Mọi thay đổi hoặc bổ sung sẽ tự động cập nhật trên tất cả các ứng dụng Tệp tin EXE có kích thước nhỏ hơn nhờ việc tách biệt một phần công việc sang nơi khác, giúp giảm sự 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ỏ
DLL là nền tảng thiết kế của Windows, cho phép các ứng dụng khác nhau sử dụng chung các thư viện Những DLL này chứa hàng trăm hàm và thủ tục, được gọi là Windows API.
Các API đƣợc tổ chức trong bốn DLL chính của Windows:
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
Thư viện quản lý Windows bao gồm 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 hệ điều hành Windows.
GDI32, hay Giao diện thiết bị đồ hoạ, là thư viện cung cấp các hàm vẽ trên màn hình và kiểm tra các phần biểu mẫu cần được vẽ lại Trong khi đó, WINNM cung cấp các hàm multimedia để xử lý âm thanh, nhạc, video thời gian thực và các chức năng lấy mẫu khác.
Các tệp tin quan trọng có thể được tìm thấy trong thư mục C:\Windows\system Bên cạnh đó, còn tồn tại các DLL nhỏ hơn, thường được sử dụng để cung cấp các dịch vụ đặc biệt cho ứng dụng.
Windows 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 :
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
1.3.2 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ệp tin DLL chứa nó
Kiểu dữ liệu truyền về nếu là hàm
Khai báo API tương tự như khai báo hàm hoặc thủ tục thông thường, bắt đầu bằng từ khóa Sub hoặc Function Tuy nhiên, trước từ khóa này, cần phải có từ khóa Declare.
Ví dụ: Tạo cửa sổ nhấp nháy bằng cách gọi API
Bước 1 Tạo một project mới
Để thiết lập điều khiển định giờ (timer), bạn cần thêm nó vào biểu mẫu và gán giá trị cho thuộc tính Interval là 10 Việc này sẽ kích hoạt một sự kiện timer mỗi 10 mili giây.
Bước 3 Nhấn đúp lên điều khiển timer này để mở cửa sổ Code và gõ vào thủ tục:
Dim nReturnValue As Integer nReturnValue= Flash(Form1.hWnd, True)
Bước 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 Boolean) As Long
Bước 5 Chạy chương trình Khi biểu mẫu xuất hiện, tiêu đề của nó nhấp nháy
Giải thích: Từ khoá Declare báo Visual Basic biết đây là khai báo một hàm của
DLL Từ khoá Declare xác định một thủ tục hoặc hàm, với hai lựa chọn là Sub hoặc Function Từ khoá Lib chỉ rõ tên của thư viện DLL chứa hàm/thủ tục, trong trường hợp này là User32 Từ khoá Alias cho biết tên thực tế của hàm/thủ tục trong thư viện, có thể khác với tên đã khai báo trước đó Cuối cùng, cần khai báo các tham số truyền vào cùng với kiểu dữ liệu trả về của hàm.
(ByVal hWnd As Long, ByVal bInvert As Boolean) As Long
Tham số hWnd xác định cửa sổ cần nhấp nháy, trong khi tham số bInvert là giá trị Boolean Nếu bInvert là True, thanh tiêu đề sẽ nhấp nháy, và để khôi phục trạng thái ban đầu, cần gọi lại hàm với bInvert là False.
Sau khi khai báo hàm API, chúng ta có thể gọi API như một hàm hoặc thủ tục trong Visual Basic Việc gọi Flash tương đương với việc gọi đến API trong DLL, và giá trị trả về sẽ được lưu trong biến nReturnValue Mặc dù có thể không cần sử dụng giá trị trả về của hàm, nhưng vẫn cần chứa nó trong một biến Hầu hết các API trả về mã lỗi kiểu số, giúp chúng ta kiểm tra tính chính xác của quá trình thực hiện.
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 không đúng cách có thể gây treo Windows hoặc treo máy tính Khi làm việc với các API phức tạp, đặc biệt là những hàm yêu cầu cấp phát nhiều vùng nhớ và tài nguyên hệ thống, việc chú ý đến các giá trị trả về là rất quan trọng Bởi vì các hàm DLL hoạt động bên ngoài ứng dụng, chúng tự thực hiện kiểm tra lỗi và người dùng chỉ có thể nhận biết sự cố thông qua các giá trị trả về.
1.3.3 Trình duyệt API ( API Text Viewer) Đƣợc cung cấp sẵn khi cài Visual Studio 6.0 Khi ta cần tra cứu cú pháp chính xác của hàm API, ta dùng API Text Viewer Để sử dụng API Text Viewer, ta chọn Start/All Programs/Microsoft Visual Studio 6.0/Microsoft Visual Studio 6.0 Tools/API Text Viewer khi đó cửa sổ API Viewer xuất hiện nhƣ sau:
Để tra cứu hàm trong API Viewer, người dùng chọn File/Load Text File từ menu hệ thống, sau đó chọn tệp tin như Win32API và nhấn Open Danh sách các hàm API được khai báo trong tệp văn bản sẽ hiển thị trong mục Available.
To use the Win32API, select a function from the list, such as AddPrinter, and click the Add button; the syntax for the selected function will then be displayed in the Selected Items section.
Hình 1.4 Cú pháp hàm AddPrinter trong cửa sổ API Viewer
Để hiểu rõ hơn về chức năng của hàm API, các tham số được truyền vào và giá trị trả về, việc tham khảo một quyển sách tra cứu là cần thiết.
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.
Liên lạc với các ứng dụng của Windows
Clipboard là vùng bộ nhớ do Windows quản lý, cho phép sao chép dữ liệu giữa các ứng dụng Visual Basic cung cấp khả năng điều khiển hệ thống clipboard thông qua đối tượng Clipboard, bao gồm 6 phương thức mà không có thuộc tính nào.
Clear: Xóa dữ liệu khỏi clipboard
SetText: Dùng để đặt văn bản vào Clipboard (copy)
GetText: Dùng để lấy văn bản từ Clipboard (paste)
SetData: Dùng để đặt hình ảnh vào Clipboard
GetData: Dùng để lấy hình ảnh từ Clipboard
1.4.2 Chạy một chương trình của Windows
Visual Basic cho phép ta chạy một chương trình khác bằng cách sử dụng thủ tục Shell
Trong đó PathNane có thể bao gồm một dòng lệnh WindowStyle là hằng để xác định dạng cửa sổ
Ví dụ: Để khởi động chương trình NotePad và tải một tệp tin “c:\bootlog.txt” vào chương trình, ta viết lời gọi sau:
Shell "notepad c:\bootlog.txt", vbNormalFocus
Giới thiệu Visual Basic 6.0
Visual Basic 6.0 là một công cụ lập trình trực quan, khác với lập trình hướng thủ tục, nó thuộc môi trường lập trình hướng đối tượng Trong lập trình hướng thủ tục, lập trình viên chia nhỏ vấn đề lớn thành nhiều vấn đề nhỏ và viết các hàm để giải quyết chúng Ngược lại, trong lập trình hướng đối tượng, vấn đề được chia thành các đối tượng, mỗi đối tượng có các thuộc tính (properties) và phương thức (methods) riêng Lập trình viên cần xác định các thuộc tính và phương thức cho từng đối tượng, trong đó phương thức là đoạn chương trình trong đối tượng giúp thực hiện các công việc cụ thể khi được gọi theo cú pháp nhất định.
Các đối tượng trong lập trình không chỉ có thuộc tính và phương thức mà còn đi kèm với một bộ sự kiện đa dạng Những sự kiện này phản ánh các phản ứng của đối tượng, thường xảy ra như một kết quả của những hành động cụ thể, chẳng hạn như di chuyển chuột, nhấn nút bàn phím, hoặc gõ vào hộp văn bản.
Ta có thể khởi động Visual Basic 6.0 theo các cách sau:
Cách 1: Nhấp trái chuột vào nút Start, chọn Programs, chọn Microsoft Visual Studio 6.0, chọn Microsoft Visual Basic 6.0
Hình 1.5 Khởi động Visual Basic 6.0 từ nút Start Cách 2: Chọn biểu tƣợng Microsoft Visual Basic 6.0 trên màn hình nền nhấn Enter hoặc nhấp đúp chuột
Hình 1.6 Biểu tƣợng của Visual Basic 6.0 trên màn hình nền
1.5.2 Giới thiệu màn hình làm việc
Sau khi khởi động Visual Basic 6.0, người dùng sẽ được đưa vào môi trường phát triển tích hợp (IDE - Integrated Development Environment), nơi cho phép tạo ra các chương trình một cách dễ dàng.
Hình 1.7 Màn hình làm việc của Visual Basic 6.0 a) Thanh tiêu đề (Title Bar)
Thanh tiêu đề thể hiện tên của chương trình (project) mặc định là Project1 b) Thanh thực đơn (Menu Bar)
Thanh thực đơn nằm ngay dưới thanh tiêu đề, cung cấp các tùy chọn cho phép người dùng thao tác với Visual Basic thông qua việc chọn mục từ menu bằng chuột hoặc phím tắt.
Thanh công cụ là một phần quan trọng trong giao diện người dùng, chứa các lệnh dưới dạng biểu tượng, giúp người sử dụng thực hiện các lệnh nhanh chóng và hiệu quả hơn Hộp công cụ (ToolBox) hỗ trợ người dùng trong việc tìm kiếm và truy cập các chức năng cần thiết một cách dễ dàng.
Hộp công cụ là một bảng chứa các điều khiển, cho phép người dùng thiết kế giao diện bằng cách chọn và đưa các điều khiển vào các biểu mẫu (Form).
Các biểu tƣợng trong hộp công cụ:
(Pointer - Con trỏ): Dùng để chọn các đối tƣợng sau khi đã tạo ra chúng ở trên Form
(Picture Box - Hộp hình ảnh): Dùng để hiển thị hình ảnh trên Form
(Label - Nhãn): Dùng để hiện một xâu ký tự hay nhãn trên Form
(TextBox - Hộp văn bản): Dùng để tạo một hộp văn bản sử dụng cho việc nhập hay xuất thông tin trên Form khi chạy chương trình
(Frame - Khung): Dùng để tạo một đối tƣợng hình chữ nhật (khung chữ nhật) chứa các đối tƣợng khác
(CommandButton - Nút lệnh): Dùng để tạo ra một nút nhấn (nút lệnh) đáp ứng sự kiện nhấn hoặc nhấn đúp trái chuột khi chạy chương trình
Hộp kiểm (CheckBox) là một công cụ cho phép người dùng lựa chọn hoặc bỏ chọn một hoặc nhiều tùy chọn trong quá trình sử dụng chương trình Người dùng có thể linh hoạt trong việc chọn lựa, từ việc không chọn bất kỳ tùy chọn nào cho đến việc chọn nhiều tùy chọn cùng lúc.
(Option Button - Nút lựa chọn): Giống nhƣ hộp kiểm (Check Box) nhƣng khi chạy chương trình người sử dụng chỉ được chọn một trong các nút chọn (Option Button)
(ListBox - Hộp danh sách): Dùng để tạo một hộp liệt kê một danh sách gồm nhiều mục và cho phép người sử dụng lựa chọn
ComboBox là một điều khiển kết hợp giữa TextBox và ListBox, cho phép người dùng tạo hộp danh sách xổ xuống Khi sử dụng, người dùng có thể chọn một mục từ danh sách có sẵn hoặc nhập nội dung tùy ý vào hộp.
Thanh cuốn ngang (Horizontal ScrollBar) cho phép người dùng chọn một số nguyên bằng cách di chuyển con chạy từ giá trị tối thiểu (min) đến giá trị tối đa (max).
Thanh cuốn dọc (Vertical ScrollBar) được sử dụng để tạo ra một thanh cuốn cho phép người dùng chọn một số nguyên bằng cách di chuyển con chạy từ giá trị tối thiểu (min) đến giá trị tối đa (max).
(Timer - Đồng hồ): Dùng để tạo thời gian
Drive ListBox là một ComboBox hiển thị danh sách các ổ đĩa có sẵn trong hệ thống, cho phép người dùng chọn một ổ đĩa khi chương trình được chạy.
Hộp danh sách thư mục (Directory ListBox) là một công cụ hiển thị danh sách các thư mục trong ổ đĩa hiện tại Khi người dùng khởi động chương trình, họ có khả năng chọn một thư mục cụ thể từ danh sách này.
Hộp danh sách tệp (File ListBox) là một công cụ hiển thị danh sách các tệp trong thư mục hiện tại, cho phép người dùng chọn một tệp khi chạy chương trình.
(Shape- Hộp hình): Dùng để vẽ các hình cơ bản nhƣ hình chữ nhật, hình vuông, hình ellipse, hình tròn … lên Form
(Line - Đường): Dùng để kẻ một đoạn thẳng trên Form
(Image - Hộp hình ảnh): Dùng để hiển thị hình ảnh bitmap trên Form
(Data - Dữ liệu): Dùng để tạo khung dữ liệu
(OLE - Object Linking and Embeding): Dùng để tạo khung kết nối và nhúng các đối tƣợng
Trong Visual Basic 6.0, có hai loại điều khiển: điều khiển nội tại không thể gỡ bỏ khỏi hộp công cụ và điều khiển bên ngoài được lưu trữ trong các tệp ocx Để thêm các điều khiển bên ngoài vào hộp công cụ, người dùng cần truy cập vào menu Project/Components (Ctrl+T), đánh dấu kiểm bên trái tên điều khiển trong danh sách và nhấn nút OK Sau khi thực hiện, điều khiển sẽ xuất hiện trong hộp công cụ và có thể sử dụng như các điều khiển nội tại khác.
Cửa sổ Project quản lý toàn bộ chương trình đang thiết kế, hiển thị tên project cùng với tất cả các form và module được phát triển trong project đó.
Các thao tác cơ bản với các đối tƣợng trên Form
1.6.1 Đưa một đối tượng lên Form
Có hai cách đƣa đƣa các đối tƣợng vào Form nhƣ sau:
Để đưa đối tượng vào Form, bạn chỉ cần di chuyển chuột đến đối tượng cần thêm, nhấp đúp chuột trái và đối tượng sẽ xuất hiện ở giữa Form Nếu chọn nhiều đối tượng, chúng sẽ chồng lên nhau; bạn có thể nhấp chuột trái vào từng đối tượng, kéo chúng đến vị trí mong muốn và thả chuột để hoàn tất.
Để thêm đối tượng vào Form, bạn chỉ cần nhấn chuột trái vào đối tượng trong hộp ToolBox Sau đó, di chuyển con trỏ chuột vào Form, khi con trỏ có hình dấu cộng (+), hãy đặt nó tại vị trí mong muốn Tiếp theo, nhấn chuột trái và kéo để vẽ đối tượng theo kích thước bạn muốn, rồi thả chuột ra để hoàn tất.
1.6.2 Chọn một đối tượng Để làm việc với các đối tƣợng trên Form, ta cần chọn chúng Để chọn đối tƣợng ta sử dụng một trong các cách sau:
Cách 1 Kích chuột vào đối tƣợng cần chọn
Cách 2 Giữ phím Ctrl/Shift và kích vào các đối tƣợng cần chọn
Để chọn các đối tượng trên Form, bạn chỉ cần kích chuột vào vị trí trống, giữ trái chuột và kéo xuống góc dưới bên phải để tạo thành hình chữ nhật Những đối tượng nằm trong hình chữ nhật sẽ được chọn tự động.
Để sắp xếp vị trí các đối tượng trên Form, bạn có thể di chuyển chúng bằng nhiều phương pháp khác nhau.
Cách 1 Giữ phím Ctrl và dùng các phím mũi tên trên bàn phím
Cách 2 Kích nút trái chuột vào đối tƣợng, giữa và rê đối tƣợng đến vị trí mong muốn, sau đó nhả chuột ra
Cách 3 Gán giá trị cho thuộc tính Left và Top của đối tƣợng
1.6.4 Hiệu chỉnh kích thước đối tượng
Muốn thay đổi kích thước của đối tượng ta sử dụng các cách sau:
Để thay đổi kích thước đối tượng, bạn chỉ cần kích chuột trái để chọn đối tượng đó Sau khi chọn, sẽ xuất hiện 8 nút vuông nhỏ xung quanh Bạn hãy di chuyển chuột đến các nút nhỏ này cho đến khi con trỏ biến thành hình mũi tên, sau đó có thể kéo để tăng hoặc thu nhỏ kích thước của đối tượng.
Cách 2 Giữ phím Shift và dùng các phím mũi tên trên bàn phím
Cách 3 Gán giá trị cho thuộc tính Height và Width của đối tƣợng
Để loại bỏ một đối tượng khỏi Form, bạn chỉ cần chọn đối tượng đó và nhấn phím Del, hoặc nhấp chuột phải để mở menu dọc và chọn Cut/Delete.
Sau khi đã sắp đặt kích thước và vị trí của các đối tượng trên form một cách hợp lý, có thể dễ dàng thay đổi các đặc tính của chúng do vô ý click vào Để tránh tình trạng này, Visual Basic 6.0 cho phép người dùng khóa các đối tượng trên form bằng cách chọn Format | Lock Controls từ menu hệ thống Khi đã khóa, biểu tượng ổ khóa trên menu sẽ bị chìm xuống, giúp bảo vệ các thiết lập đã được thực hiện.
Để thay đổi kích thước hoặc vị trí của các đối tượng, hãy sử dụng lệnh Lock Control trong menu Format Khi bạn mở khóa, biểu tượng ổ khóa trên menu sẽ hiển thị trở lại bình thường.
1.6.7 Focus và thứ tự Tab của các điều khiển a) Focus
Focus là khả năng tiếp nhận đầu vào từ người sử dụng qua chuột hoặc bàn phím Khi một đối tượng có focus, nó có khả năng nhận dữ liệu từ người dùng Các sự kiện GotFocus và LostFocus xảy ra khi đối tượng nhận hoặc mất focus.
Chúng ta thường sử dụng sự kiện GotFocus và LostFocus để kiểm tra tính hợp lệ của dữ liệu nhập b) Thứ tự Tab
Thứ tự Tab là cách người dùng di chuyển giữa các điều khiển trong chương trình bằng phím Tab Để thay đổi thứ tự này, cần thiết lập thuộc tính TabIndex cho từng điều khiển Việc thiết lập TabIndex hợp lý giúp nâng cao trải nghiệm sử dụng cho người dùng.
Làm việc với Project
1.7.1 Thành phần của một Project
- Một tệp tin vbp theo dõi toàn bộ các thành phần
- Một tệp tin frm cho mỗi biểu mẫu
Mỗi biểu mẫu sẽ có một tệp tin nhị phân frx được tạo ra tự động, và người dùng không được phép chỉnh sửa nội dung của tệp tin này.
- Một tệp tin cls cho mỗi mô-đun lớp (tuỳ chọn)
- Một tệp tin bas cho mỗi mô-đun chuẩn (tuỳ chọn)
- Một hoặc nhiều tệp tin ocx chứa các điều khiển ActiveX (tuỳ chọn)
1.7.2 Thêm một Form mới vào Project Để thêm một Form vào Project hiện hành lúc thiết kế, ta sử dụng các cách sau: Cách 1: Từ menu Project chọn Add Form => Xuất hiện hộp thoại Add Form
Cách 2: Kích chuột phải vào cửa sổ Project Explorer Trong menu ngữ cảnh chọn Add sau đó chọn Form => Xuất hiện hộp thoại Add Form
Hình 1.12 Hộp thoại Add Form Trong hộp thoại Add Form:
- Nếu muốn thêm Form mới, chọn tab New sau đó chọn một Form trong danh sách và kích nút Open
- Nếu muốn dùng một Form có sẵn, chọn Tab Existing, chọn một Form trong danh
1.7.3 Xoá Form khỏi Project Để xoá một Form khỏi Project hiện hành, ta chọn Form cần xoá trong cửa sổ Project Explorer, sau đó từ menu Project chọn Remove hoặc trong cửa sổ Project Explorer kích phải chuột vào Form cần xoá, chọn Remove
Tham chiếu tệp tin bị xoá trong đề án (thực chất nó vẫn được lưu trên đĩa)
Khi một tệp tin trong dự án bị xoá, Visual Basic sẽ cập nhật tệp tin *.vbp khi lưu dự án Nếu tệp tin bị xoá bên ngoài Visual Basic, tệp tin dự án sẽ không được cập nhật, dẫn đến việc Visual Basic báo lỗi thiếu tệp tin khi mở lại dự án.
Khi lưu một Project trong Visual Basic 6.0, các tệp tin như form, module sẽ được lưu trước, sau đó là tệp tin Project Trong lần lưu đầu tiên, Visual Basic 6.0 sẽ gợi ý tên cho từng tệp tin, thường dựa trên tên biểu mẫu và có phần mở rộng tương ứng với loại tệp tin.
- Từ menu File chọn Save Project
Khi lưu Project lần đầu hoặc sau khi thêm biểu mẫu hoặc module, hộp thoại "Save File As" sẽ hiển thị cho từng tệp tin Sau đó, hộp thoại "Save Project As" xuất hiện, người dùng cần nhập tên tệp tin và nhấn nút "Save" để hoàn tất.
- Mở Project lúc khởi động Visual Basic 6.0: Lần đầu khởi động Visual Basic 6.0, hộp thoại New project xuất hiện:
Hình 1.13 Hộp thoại tạo một Project mới (New Project)
Để mở một dự án từ hộp thoại New Project, bạn cần chọn tab Existing, tìm đến thư mục chứa dự án cần mở, chọn tên dự án và nhấn nút OK Nếu dự án cần mở là đề án được lưu gần nhất, bạn có thể chuyển sang tab Recent và thực hiện các bước tương tự.
Để mở một Project có sẵn trong Visual Basic 6.0, bạn cần vào menu File, chọn Open Project Sau đó, hộp thoại Open Project sẽ hiện ra, bạn chọn tab Existing, tìm đến thư mục chứa Project, chọn tên Project và nhấn nút OK để hoàn tất.
Hình 1.14 Hộp thoại mở Project đã có (Open Project)
Mỗi lần khởi động Visual Basic 6.0, ta sẽ thấy hộp thoại New Project xuất hiện
Từ đây, ta có thể chọn loại Project mà ta muốn tạo và nhấn nút Open
Trong Visual Basic 6.0, để tạo một Project mới, bạn cần truy cập menu File và chọn New Project Sau đó, hộp thoại New Project sẽ hiện ra, cho phép bạn chọn loại Project mong muốn và nhấn nút OK để xác nhận.
1.7.7 Thiết lập form khởi động cho Project
Mỗi dự án có thể chứa nhiều biểu mẫu, trong đó biểu mẫu khởi động (Startup Object) là biểu mẫu mặc định xuất hiện đầu tiên khi chạy dự án Để thiết lập một biểu mẫu cụ thể làm biểu mẫu khởi động, bạn cần thực hiện một số thao tác nhất định.
- Từ menu Project, chọn Project properties, hộp thoại Project properties xuất hiện
- Trên hộp thoại Project properties, chọn form khởi động tại danh sách xổ xuống có nhãn là Startup Object
- Nhấn nút OK để kết thúc công việc
Hình 1.15 Hộp thoại Project Properties
Sau khi thiết lập form khởi động cho Project, để chạy chương trình, bạn có thể sử dụng nút Start trong Visual Basic hoặc nhấn phím F5 Khi chương trình hoàn tất, bạn cần tạo một tập tin thi hành (EXE) bằng cách vào menu File và chọn Make EXE file Hộp thoại Make Project sẽ xuất hiện, yêu cầu bạn nhập tên tập tin; ví dụ, bạn có thể gõ "Clipboard" Visual Basic sẽ tự động thêm phần mở rộng EXE và tạo ra tập tin thi hành có tên Clipboard.EXE.
Hình 1.16 Hộp thoại Make Project
Để bắt đầu, nhấn vào nút Option để mở hộp thoại Project Properties, sau đó điền tên ứng dụng vào ô Title Tên này sẽ xuất hiện trong danh sách các ứng dụng khi chương trình được thi hành Lưu ý rằng tên ứng dụng không cần phải trùng với tên tập tin EXE Ví dụ, bạn có thể đặt tên ứng dụng là: First Application.
Để sửa đổi phiên bản ứng dụng trong hộp thoại Project Properties, người dùng cần điều chỉnh các giá trị trong các ô Major, Minor và Revision Khi đánh dấu chọn Auto Increment, Visual Basic sẽ tự động tăng số Revision mỗi khi tạo lại tập tin EXE cho dự án Bên cạnh đó, người dùng có thể thêm ghi chú cho từng phiên bản trong phần Version Information, bao gồm tên cơ quan hoặc công ty, nhãn hiệu, và thông tin bản quyền tương ứng với các thành phần trong danh sách.
Bước 4 Nhấn OK để trở về hộp thoại Make Project
Bước 5 Nhấn nút OK trong hộp thoại Make Project để tạo tập tin EXE
Bước 6 Chạy chương trình từ cửa sổ My Computer hoặc Explorer, tìm đúng đường dẫn đến tên tập tin và nhấn đúp chuột vào nó.
Câu hỏi trắc nghiệm
1) Chọn cách thực hiện đúng để thay đổi kích thước của điều khiển trên form: a Thay đổi giá trị thuộc tính width, height b Kích chuột vào 8 ô điều khiển và kéo, thả c Giữ phím Shift và dùng các phím mũi tên d Cả 3 cách trên
2) Chọn cách thực hiện đúng để di chuyển vị trí của điều khiển trên form: a Dùng các phím mũi tên b Giữ phím Ctrl và dùng các phím mũi tên c Giữ phím Shift và dùng các phím mũi tên d Kích đúp chuột vào đối tƣợng
3) Chọn cách thực hiện đúng để chọn một điều khiển trên form: a Kích chuột vào đối tƣợng cần chọn b Giữ phím Ctrl và kích vào các đối tƣợng cần chọn c Giữ phím Shift và kích vào các đối tƣợng cần chọn d Cả 3 cách trên
4) Chọn cách thực hiện đúng để đặt một điều khiển lên form: a Kích đúp chuột vào điều khiển b Kích chuột vào điều khiển và kéo chuột trên form c Kích chuột vào điều khiển cùng loại trên form-> copy-> paste d Cả 3 cách trên
CƠ SỞ LẬP TRÌNH TRONG VISUAL BASIC 6.0
Thuộc tính, phương thức và sự kiện
Visual Basic 6.0 hỗ trợ lập trình hướng đối tượng, cho phép lập trình viên chia nhỏ vấn đề thành các đối tượng Trong môi trường này, các điều khiển (control) được coi là đối tượng, mỗi đối tượng có các thuộc tính và phương thức riêng Lập trình viên cần xác định các thuộc tính và phương thức cần thiết để đối tượng hoạt động hiệu quả.
Đối tượng là một thực thể có thể nhận diện trong thế giới thực, có thể phân biệt với các đối tượng khác thông qua các thuộc tính riêng như nhãn hiệu, kích thước, màu sắc, trọng lượng, và số kênh Mỗi đối tượng còn có các hành động và phản ứng đặc trưng, gọi là phương thức hoặc sự kiện, như chuyển kênh, dò kênh, và điều chỉnh màu sắc Ví dụ, một chiếc ti vi có thể được nhận diện và phân biệt nhờ vào các đặc điểm và phương thức của nó.
Visual Basic cung cấp nhiều đối tượng, trong đó có các điều khiển (control) với mỗi đối tượng mang tập thuộc tính, phương thức và sự kiện riêng biệt.
Thuộc tính là những đặc điểm mô tả đối tượng, giúp phân biệt và nhận diện chúng Mỗi đối tượng có bộ thuộc tính riêng, nhưng vẫn tồn tại những thuộc tính chung cho hầu hết các đối tượng như tên gọi, kích thước, vị trí và màu sắc Dưới đây là một số thuộc tính thông dụng.
Left Vị trí cạnh trái của điều khiển so với vật chứa nó
Top Vị trí cạnh trên của điều khiển so với vật chứa nó
Height Chiều cao của điều khiển
Width Chiều rộng của điều khiển
Tên (Name) là giá trị chuỗi dùng để xác định điều khiển, trong khi Enable nhận giá trị logic (True hoặc False) để quyết định quyền truy cập của người sử dụng đối với điều khiển Ngoài ra, Visible cũng là giá trị logic (True hoặc False) xác định khả năng hiển thị của điều khiển đối với người sử dụng.
Đoạn chương trình được lưu trữ trong đối tượng giúp hướng dẫn cách thực hiện một công việc cụ thể Mỗi đối tượng có những phương thức riêng, nhưng cũng tồn tại nhiều phương thức phổ biến áp dụng cho hầu hết các đối tượng.
Move Thay đổi vị trí một đối tượng theo yêu cầu của chương trình
Drag Thi hành hoạt động kéo và thả của người sử dụng
SetFocus cung cấp khả năng tập trung vào đối tượng được chỉ định trong lệnh gọi phương thức, trong khi ZOrder quy định thứ tự hiển thị của các điều khiển trên màn hình.
Trong lập trình, thuộc tính mô tả đối tượng và phương thức chỉ ra cách thức đối tượng hành động, trong khi sự kiện thể hiện các phản ứng của đối tượng Chẳng hạn, khi người dùng nhấn chuột vào một nút lệnh, các sự kiện như MouseDown, MouseUp, Click và SetFocus sẽ được kích hoạt Mỗi đối tượng có bộ sự kiện riêng, nhưng một số sự kiện phổ biến thường xuất hiện ở nhiều đối tượng, đặc biệt là các điều khiển.
Sự kiện Xảy ra khi
Change Người sử dụng sửa đổi chuỗi ký tự trong hộp kết hợp hoặc hộp văn bản Click Người sử dụng dùng nút chuột để nhấn lên đối tượng
Dblclick Người sử dụng dùng nút chuột để nhấn 2 lần (nhấn đúp) lên đối tƣợng DragDrop Người sử dụng kéo rê một đối tượng sang nơi khác
DragOver Người sử dụng kéo rê một đối tượng ngang qua một điều khiển khác GotFocus Đưa một đối tượng vào tầm ngắm của người sử dụng (focus)
KeyDown Người sử dụng nhấn một nút trên bàn phím trong khi một đối tƣợng đang trong tầm ngắm
Khi người sử dụng nhấn và thả một nút trên bàn phím, sự kiện KeyPress sẽ được kích hoạt nếu đối tượng đang trong tầm ngắm Sự kiện KeyUp xảy ra khi người sử dụng thả một nút trên bàn phím trong khi đối tượng vẫn nằm trong tầm ngắm Ngoài ra, sự kiện LostFocus diễn ra khi một đối tượng bị đưa ra khỏi tầm ngắm.
Khi người dùng nhấn một nút chuột bất kỳ trên một đối tượng, sự kiện MouseDown sẽ được kích hoạt Tiếp theo, khi người dùng di chuyển con trỏ chuột qua đối tượng, sự kiện MouseMove diễn ra Cuối cùng, khi người dùng thả nút chuột trên đối tượng, sự kiện MouseUp sẽ được thực hiện.
Giới thiệu một số điều khiển thông dụng
2.2.1 Điều khiển Label Điều khiển Label có biểu tƣợng trong hộp công cụ là , mục đích của Label là hiển thị một đoạn văn bản lên Form Một số thuộc tính của điều kiển Label:
Name Dùng để đặt tên cho điều khiển Label
Alignment Dùng để canh chỉnh nội dung văn bản hiển thị trên Label:
Autosize Nếu nhận giá trị True sẽ tự động điều chỉnh kích thước cho vừa nội dung, nếu nhận giá trị False thì không tự điều chỉnh kích thước
BackColor Xác lập màu nền của Label
Caption Xác định nội dung văn bản hiển thị trên Label
Font Xác định kiểu chữ của phần văn bản hiển thị trên Label
ForeColor Xác định màu của chữ hiển thị trên Label
2.2.2 Điều khiển TextBox Điều khiển Textbox có biểu tƣợng trong hộp công cụ là Điều khiển TextBox đƣợc sử dụng để nhập một đoạn văn bản, hoặc để hiển thị một đoạn văn bản Một số thuộc tính của TextBox:
Name Dùng để đặt tên cho điều khiển TextBox
Alignment Dùng để canh chỉnh nội dung văn bản hiển thị trên TextBox:
2 : Canh giữa Appearance Quy định cách thể hiện của TextBox:
1 – 3D : nổi BackColor Xác định màu nền của TextBox
Font Quy định kiểu chữ của văn bản hiển thị trên TextBox
ForeColor Quy định màu của phần văn bản hiển thị trên TextBox
MaxLength Quy định số ký tự tối đa có thể nhập vào TextBox
MultiLine là thuộc tính cho phép văn bản trong Textbox hiển thị trên nhiều hàng nếu giá trị là True, trong khi nếu giá trị là False, văn bản chỉ hiển thị trên một hàng.
ScrollBars Xác định TextBox có hay không có các thanh cuốn
SelLength Trả về độ dài đoạn văn bản đƣợc chọn (đƣợc bôi đen) trong
Textbox SelStart Trả về vị trí của ký tự đầu tiên trong đoạn văn bản đƣợc chọn trong Textbox SelText Trả về đoạn văn bản đƣợc chọn trong Textbox
Text Xác định nội dung văn bản hiển thị trên TextBox
Visible Quy định điều khiển TextBox có đƣợc nhìn thấy hay không
True: Nhìn thấy False: Không nhìn thấy Một số Sự kiện của điều khiển TextBox
Sự kiện KeyPress xảy ra khi người dùng nhập dữ liệu vào TextBox, cho phép chúng ta kiểm soát thông tin nhập vào Thủ tục xử lý sự kiện này sử dụng tham số KeyAscii, là một số nguyên đại diện cho mã ASCII của ký tự được gõ.
Để giới hạn người dùng chỉ nhập số vào TextBox, chúng ta có thể áp dụng phương pháp gán giá trị KeyAscii là 0 nếu ký tự nhập vào không phải là số.
Private Sub Text1_KeyPress (KeyAscii As Integer)
If KeyAscii < Asc(“0”) Or KeyAscii > Asc(“9”) then
KeyAscii = 0 „ huỷ bỏ phím được nhập vào Beep „ phát âm thanh beep báo lỗi
Mỗi sự kiện KeyPress tạo ra một cặp sự kiện KeyDown và KeyUp, với hai tham số là KeyCode và Shift, giúp nhận diện các phím đặc biệt trên bàn phím Ví dụ dưới đây minh họa cách hiển thị tên các phím chức năng mà người dùng nhấn vào trong chương trình.
Private Sub Text3_KeyDown(KeyCode As Integer, Shift As Integer)
If (KeyCode >= 112) And (KeyCode 0 thì trả về giá trị là 1
- Nếu x = 0 thì trả về giá trị là 0
- Nếu x < 0 thì trả về giá trị là -1
(9) Hàm Sqr(x): Hàm tính căn bậc hai của x
(10) Hàm Exp(x): Hàm tính e mũ x
(11) Hàm Log(x): Hàm tính logarit tự nhiên của x
(12) Hàm Round(x [, n]): Hàm làm tròn x với n chữ số sau dấu chấm thập phân
Round(1.234 , 2) sẽ cho kết quả là 1.23
Round(1.236 , 2) sẽ cho kết quả là 1.24
(13) Hàm Rnd( [ x ] ): Hàm tạo số ngẫu nhiên
(1) Hàm Day(d): Hàm trả về số ghi ngày của d
Day(#12/25/2006#) sẽ cho kết quả là 25
(2) Hàm Month(d): Hàm trả về số ghi tháng của d
Month(#11/30/2006#) sẽ cho kết quả là 11
(3) Hàm Year(d): Hàm trả về số ghi năm của d
Year(#12/25/2006#) sẽ cho kết quả là 2006
(4) Hàm Now: Hàm trả về ngày tháng năm và giờ của hệ thống máy tính
(5) Hàm Weekday (d): Hàm cho biết thứ mấy trong tuần
Weekday(#11/13/2006#)) cho kết quả là 3 (thứ 3 trong tuần)
Weekday(#11/19/2006#) sẽ cho kết quả là 1 (thứ 1, tức là ngày chủ nhật trong tuần)
(6) Hàm hour (): Hàm cho biết giờ ứng với
Hour(#10:20:15#) sẽ cho kết quả là 10
(7) Hàm Minute(): Hàm cho biết phút ứng với
Minute(#10:20:15#) sẽ cho kết quả là 20
(8) Hàm Second(): Hàm cho biết giây ứng với
Second(#10:20:15#) sẽ cho kết quả là 15
(1) Hàm CBool (x): Hàm trả về giá trị kiểu Boolean của x
Vì biểu thức 3 > 5 cho giá trị là False, nên Xyz có giá trị là False
(2) Hàm CByte(x): Hàm trả về giá trị kiểu Byte của x
(3) Hàm CCur(x): Hàm trả về giá trị kiểu Currency của x
(4) Hàm CDate(x): Hàm trả về giá trị kiểu Date của x
(5) Hàm CDbl(x): Hàm trả về giá trị kiểu Double của x
(6) Hàm CInt(x): Hàm trả về giá trị kiểu Integer của x
(7) Hàm Dec(x): Hàm trả về giá trị kiểu Decimal của x
(8) Hàm CLng(x): Hàm trả về giá trị kiểu Long của x
(9) Hàm CSng(x): Hàm trả về giá trị kiểu Single của x
(10) Hàm CStr(x): Hàm trả về giá trị kiểu String của x
(11) Hàm CVar(x): Hàm trả về giá trị kiểu Variant của x
(12) Hàm Val(): Hàm trả về số tương ứng của
Visual Basic 6.0 còn có 4 hàm chuyển đổi số ở hệ thập phân thành hệ bát phân (hệ 8) và hệ thập lục phân (hệ 16):
(13) Hàm Oct(x) hoặc Oct$(x): Hàm trả về giá trị số hệ bát phân Variant hoặc chuỗi tương ứng của x
Oct(188) cho giá trị là 274
(14) Hàm Hex(x) hoặc Hex$(x): Hàm trả về giá trị số hệ thập lục phân Variant hoặc chuỗi tương ứng của x
Hex(2006) cho giá trị là 7D6
2.8.4 Hàm kiểm tra kiểu dữ liệu
(1) Hàm IsArray(x): Nếu x có kiểu dữ liệu là mảng thì hàm trả về giá trị True, ngƣợc lại hàm trả về giá trị False
(2) Hàm IsDate(x): Nếu x có thể chuyển đổi sang định dạng thời gian thì hàm trả về giá trị True, ngƣợc lại hàm trả về giá trị False
(3) Hàm IsNumeric(x): Nếu x có thể chuyển đổi sang định dạng số thì hàm trả về giá trị True, ngƣợc lại hàm trả về giá trị False
(4) Hàm VarType(x): Kiểm tra kiểu dữ liệu
Giá trị VarType Giải thích
0 – vbEmpty Không chứa gì cả
1 – vbNull Không có dữ liệu hợp lệ
2 – vbInteger Dữ liệu Integer dạng chuẩn
3 – vbLong Dữ liệu kiểu Long Integer
4 - vbsingle Dữ liệu kiểu chấm động single
5 – vbDouble Dữ liệu kiểu chấm động Double
8 – vbString Kiểu chuỗi đơn giản
10 – vbError Có một đối tƣợng Error
11 – vbBoolean Kiểu giá trị Boolean chuẩn
14 – vbDecimal Giá trị thuộc hệ thập phân Decimal
36 – UserDefinedType Kiểu do người dùng định nghĩa
Format(Biểu_thức [, Xâu định dạng]): Hàm trả về biểu thức theo một định dạng mong muốn đƣợc xác định bởi xâu định dạng
Biểu_thức: Là biểu thức số hoặc chuỗi cần định dạng
Xâu định dạng đƣợc tạo thành bởi các ký tự sau:
0 : Đại diện cho các chữ sô từ 0 9 (không xuất hiện thì hiện số 0)
@: Đại diện cho một chữ hoặc khoảng trống (Có thể xuất hiệ hoặc không)
: Hiển thị dấu chấm ở vị trí khai báo
, : Hiển thị dấu , ngăn cách mỗi nhóm 3 chữ số
% : Nhân biểu thức với 100 rồi hiển thị dấu % tại vị trí khai báo
> : Hiển thị theo chữ in hoa
< : Hiển thị theo chữ thường
MyStr = Format(MyTime, "Long Time") “5:04:23 AM”
MyStr = Format(MyDate, "Long Date") “Thurday, March 20, 2003” MyStr = Format(MyTime, "h:m:s") "17:4:23"
MyStr = Format(MyTime, "hh:mm:ss AMPM") "05:04:23 PM"
MyStr = Format(MyDate, "dddd, mmm d yyyy") "Wednesday”
MyStr = Format("This is it", ">") "THIS IS IT".
Hiển thị và nhập thông tin
Hộp thông báo (MsgBox) cho phép hiển thị thông báo và chờ phản hồi từ người sử dụng Khi người dùng nhấn vào một nút lệnh, một số nguyên biểu thị nút lệnh đó sẽ được trả về Để hiển thị hộp thoại thông báo, có thể sử dụng thủ tục MsgBox hoặc hàm MsgBox() Sự khác biệt giữa chúng là hàm không chỉ hiển thị thông báo mà còn trả về giá trị để tương tác với người sử dụng, trong khi thủ tục chỉ đơn thuần hiển thị hộp thông báo.
Cú pháp của lệnh MsgBox:
MsgBox prompt[, buttons] [, title] [, helpfile, context]
Cú pháp của hàm MsgBox( ):
MsgBox(prompt[, buttons] [, title] [, helpfile, context])
Hình 2.4 Hộp thông báo (MsgBox) Trong đó:
Tham số này là bắt buộc để xác định thông điệp hiển thị trong hộp thoại, với độ dài tối đa là 1024 ký tự Để tạo nhiều dòng trong thông điệp, bạn có thể sử dụng ký tự xuống dòng Chr(10) và trở về đầu dòng Chr(13) hoặc hằng vbCrLf.
MsgBox "Xin chào các bạn sinh viên" & Chr(10) & Chr(13) “Trường Đại học Sư phạm Kỹ thuật Nam Định”
Title: Là tham số tuỳ chọn dùng để xác định tiêu đề của hộp thoại Nếu bỏ qua thì tên của ứng dụng sẽ xuất hiện tại đây
Helpfile: Là tham số tuỳ chọn dùng xác định tên của tệp tin trợ giúp cho chương trình
Context: Là tham số tuỳ chọn đƣợc sử dụng kết hợp với Helpfile Nó là một biểu thức số gắn với một chủ đề trợ giúp nào đó
Buttons là tham số tùy chọn dùng để xác định kiểu nút lệnh và biểu tượng hiển thị trong hộp thoại, nhận giá trị từ các hằng có sẵn trong Visual Basic.
Hằng Giá trị Mô tả trong lập trình cho phép người dùng hiển thị các nút khác nhau trong hộp thoại thông báo Các giá trị bao gồm: vbOKOnly (0) hiển thị nút OK, vbOKCancel (1) hiển thị cả nút OK và Cancel, vbAbortRetryIgnore (2) cho phép người dùng chọn giữa Abort, Retry và Ignore, vbYesNoCancel (3) cung cấp tùy chọn Yes, No và Cancel, vbYesNo (4) chỉ hiển thị nút Yes và No, và vbRetryCancel (5) cho phép người dùng chọn giữa Retry và Cancel Ngoài ra, vbCritical (16) hiển thị biểu tượng thông báo lỗi nghiêm trọng, cho biết chương trình sẽ kết thúc khi người dùng thoát khỏi thông báo này.
Các nút lệnh Thông điệp vbQuestion 32
Hiển thị biểu tượng biểu thị rằng chương trình cần thêm thông tin từ phía người sử dụng trước khi có thể tiếp tục thực hiện vbExclamation 48
Biểu tượng hiển thị cho biết chương trình gặp sự cố, yêu cầu người dùng thực hiện hiệu chỉnh để tránh kết quả không mong muốn Biểu tượng vbInformation 64 được sử dụng để thông báo và cung cấp thông tin hữu ích cho người dùng.
Khi hàm MsgBox( ) đƣợc sử dụng nó cung cấp một giá trị cho một biến ví dụ:
X = MsgBox("Bạn có muốn tiếp tục không", vbYesNoCancel, "Thông báo")
Giá trị X là giá trị trả về của hàm MsgBox(), xác định nút lệnh mà người sử dụng đã nhấn Các giá trị này được tóm tắt trong bảng dưới đây.
Hằng Giá trị Nút đƣợc nhấn vbOK 1 OK vbCancel 2 Cancel vbAbort 3 Abort vbRetry 4 Retry vbIgnore 5 Ignore vbYes 6 Yes vbNo 7 No
Private Sub Command1_Click() x = MsgBox("Hãy kích vào một nút lệnh nào đó", vbAbortRetryIgnore) Select Case x
MsgBox "Bạn đã kích nút Abort"
MsgBox "Bạn đã kích nút Retry"
MsgBox "Bạn đã kích nút Ignore"
2.9.2 Hiển thị thông tin lên Form Để hiển thị thông tin lên Form ta viết lệnh
Form1.Print “Giá trị biểu thức”; X*2 - 3 + X*X;
Khi sử dụng lệnh Print, nếu thêm dấu ";" ở cuối, con trỏ sẽ vẫn ở dòng cũ, trong khi không có dấu ";" sẽ làm con trỏ nhảy xuống dòng mới Để xuống dòng, có thể sử dụng hằng vbCrlf Để điều chỉnh vị trí in trên Form, chúng ta có thể sử dụng các thuộc tính CurrentX và CurrentY.
Form1.CurrentY = hàng Để xóa thông tin trên Form (trừ các điều khiển) ta dùng phương thức cls
Hàm InputBox() được sử dụng để thu thập thông tin từ người dùng thông qua một hộp thoại Hộp thoại này bao gồm một dòng thông báo, một ô nhập liệu và hai nút bấm là OK và Cancel.
Hình 2.5 Hộp nhập dữ liệu (InputBox)
Cú pháp của hàm InputBox( ):
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])
Các tham số prompt, title, helpfile và context giống nhƣ ở MsgBox
Tiêu đề của hộp thoại Thông báo
Quy ƣớc viết lệnh
Hộp thoại InputBox( ) cho phép người dùng nhập thông tin, với các tham số xpos và ypos xác định vị trí hiển thị theo chiều ngang và dọc, tương tự như thuộc tính left và top của đối tượng Form Khi người dùng nhấn OK, hàm sẽ trả về chuỗi ký tự được nhập trong hộp văn bản.
Ví dụ: Thiết kế một form trên đó có một nút lệnh (CommandButton1), sau đó viết các dòng lệnh sau vào cửa sổ Code
Ten = InputBox("Hãy nhập vào tên của bạn", "Input box")
MsgBox "Xin chào bạn: " & Ten
Chạy chương trình rồi nhấn chuột vào Commandbutton1, xuất hiện hộp nhập sau:
Hình 2.6 Ví dụ hộp nhập dữ liệu
Lệnh gán dùng để gán giá trị của một biểu thức cho một biến
Kiểu dữ liệu sau khi tính toán của biểu thức bên phải phải phù hợp với kiểu dữ liệu của biến, nếu không sẽ xuất hiện lỗi
2.10.2 Ngăn cách các câu lệnh trên một dòng
Ta có thể viết nhiều câu lệnh trên một dòng, và các câu lệnh đó phải ngăn cách nhau bởi dấu hai chấm “:”
2.10.3 Kéo dài câu lệnh trên hai dòng
Khi có những câu lệnh dài chúng ta có thể viết câu lệnh đó trên nhiều dòng, và dùng kí hiệu gạch nối (_) để nối các dòng đó
2.10.4 Nối 2 xâu kí tự Để nối hai xâu kí tự, chúng ta sử dụng 1 trong 2 kí hiệu sau: & hoặc +
Label1.Caption = “Đại học sư phạm kỹ thuật Nam Định” & “ "_
Label2.Caption = “Bây giờ là :“ + Now
2.10.5 Qui ước đặt tên biến và tên đối tượng
Để dễ dàng bảo trì, việc tuân thủ các quy tắc đặt tên biến là rất quan trọng Qui ước đặt tên không chỉ giúp xác định tên biến mà còn làm rõ phạm vi và kiểu dữ liệu của chúng Những gợi ý này không bắt buộc nhưng sẽ hỗ trợ trong việc quản lý mã nguồn hiệu quả hơn.
Trong đó mọi dấu chỉ báo (tiền tố) đều ở dạng chữ thường
Biến g/m chỉ được sử dụng khi biến được khai báo là toàn cục (public) hoặc ở cấp mô đun (private) Nếu biến được sử dụng cục bộ cho một thủ tục, phần này sẽ không được áp dụng.
[a] Đƣợc dùng nếu biến là một mảng t là kiểu dữ liệu của biến nhƣ sau:
Kiểu dữ liệu Tiền tố Kiểu dữ liệu Tiền tố
Name là tên biến, phải thích hợp với công dụng thực tế của biến,
Qui ƣớc đặt tện biến đối tƣợng
Các qui ước đặt tên đối tượng thường theo cú pháp chung sau: oName
Trong đó o là kiểu đối tƣợng đƣợc viết tắt Điều khiển Viết tắt Điều khiển Viết tắt
Ví dụ: txtHoten, cboGioitinh, frmQuanLy v.v
Lệnh If…Then
Câu lệnh IF cho phép lựa chọn một trong hai nhánh tùy thuộc vào giá trị của một biểu thức lôgic(điều kiện) là Đúng (True) hay Sai (False)
If Then
If x>10 Then Print “x lớn hơn 10”
Print “Bạn phải nhập giá trị khác 0” End If
Else If then
Lệnh Select Case
Select Case
[Case
[Case
Chương trình sẽ kiểm tra, nếu bằng một giá trị nào đó trong
thì khối lệnh tương ứng với danh sách biểu thức đó sẽ được thực hiện Ngƣợc lại, sẽ đƣợc thực hiện
Viết chương trình sử dụng điều khiển Label, TextBox, ComboBox, Commandbutton thực hiện các phép toán số học nhƣ thiết kế mẫu:
Bước 1 Thiết kế form theo mẫu bằng cách đưa vào form Label, TextBox,
ComboBox, Commandbutton, sau đó xác định vị trí, kích thước cho các điều khiển cho phù hợp
Bước 2 Thiết lập một số thuộc tính cho các điều khiển như bảng sau:
TT Điều khiển Thuộc tính Giá trị Ghi chú
Mỗi giá trị trên một dòng, nhấn Ctrl+Enter để xuống dong
Bước 3 Mở cửa sổ lệnh của Form1 và gõ vào các dòng lệnh sau:
Dim a As Integer, b As Integer, kq As Double a = Val(txta.Text) b = Val(txtb.Text)
Case "+" kq = a + b Case "-" kq = a - b Case "*" kq = a * b Case "/" kq = a / b Case "\" kq = a \ b Case "mod" kq = a Mod b Case "^" kq = a ^ b End Select txtkq.Text = kq
Lệnh For…Next
Cấu trúc lặp này thường được sử dụng cho các vòng lặp có số lần lặp xác định thông qua một biến đếm Biến đếm bắt đầu từ một giá trị nhất định và vòng lặp sẽ kết thúc khi biến này đạt đến giá trị cuối Mỗi lần thực hiện xong đoạn lệnh trong thân vòng lặp, biến đếm sẽ được tăng (hoặc giảm) theo giá trị của bước nhảy đã định.
For = To [Step ]
Bước 1: Biến đếm nhận giá trị bằng giá trị đầu
Nếu bước nhảy là số âm, máy kiểm tra điều kiện biến đếm có lớn hơn hoặc bằng giá trị cuối không Ngược lại, nếu bước nhảy là số dương, máy sẽ kiểm tra xem biến đếm có nhỏ hơn hoặc bằng giá trị cuối không Nếu điều kiện đúng, khối lệnh sẽ được thực hiện, biến đếm sẽ tăng thêm giá trị bằng bước nhảy và quay lại kiểm tra điều kiện Nếu điều kiện sai, vòng lặp For sẽ kết thúc và máy sẽ thực hiện các lệnh tiếp theo sau vòng lặp.
Ví dụ: Đoạn lệnh sau:
Next sẽ in lên màn hình các số từ 1 đến 10
Lệnh Do While Loop
Cấu trúc lặp không xác định cho phép thực hiện một khối lệnh nhiều lần dựa trên một điều kiện cụ thể Điều này có nghĩa là số lần lặp lại không được xác định trước, mà chỉ biết rằng quá trình lặp sẽ dừng lại khi điều kiện đã đặt ra trở thành sai.
Hoạt động: Đầu tiên chương trình sẽ kiểm tra , nếu điều kiện đúng (True) thì
Sau khi thực hiện khối lệnh, chương trình sẽ quay lại để kiểm tra điều kiện, và giá trị của điều kiện có thể đã thay đổi Nếu điều kiện vẫn đúng, chương trình sẽ tiếp tục thực hiện các thao tác tiếp theo.
lại đƣợc thực hiện Quá trình này cứ tiếp diễn cho đến khi nhận giá trị sai (False)
Ví dụ: Đoạn lệnh sau: i = 1
Loop sẽ in lên màn hình các số từ 1 đến 10
Lệnh Do…Loop While
Tương tự như vòng lặp Do While…Loop, nhưng ở đây được máy thực hiện trước, rồi máy kiểm tra Như vậy, trong trường hợp này,
đƣợc thực hiện ít nhất một lần mà không phụ thuộc vào
Ví dụ: Đoạn lệnh sau: i = 1
Loop While i