Friday, October 30, 2009

Thủ thuật nhỏ trong VB p6

. Kiểm tra sự tồn tại của file ở bất kỳ đâu

2. Kiểm tra độ phân giải màn hình
3. Import file reg vào registry
4. Sự khác nhau khi load form ở chế độ MODAL & MODELESS
5. Khi nào, tại sao phải dùng Option Explicit
6. Tạo menu PopUp

Để giữ cho ứng dụng của bạn suôn sẻ khi chạy tránh trường hợp bị lỗi chương trình và ngừng một cách "bất hợp pháp", nếu người gặp lỗi là chính bạn thì không có gì, nhưng nếu người gặp lỗi không phải là bạn, bạn sẽ bị "mất mặt" vì chương trình của mình. Cụ thể hơn, trong quá trình làm việc với file, bạn cần phải luôn kiểm tra file có tồn tại hay không trước khi thực hiện một tác vụ ghi đọc nào đó. Dưới đây là một chương trình con dùng để kiểm tra, đối số duy nhất là đường dẫn file cần mở.

Public Sub VerifyFile(FileName As String)

'

On Error Resume Next

'Mở file thử để kiểm tra

Open FileName For I`165432nput As #1

If Err Then

MsgBox ("The file " & FileName & " cannot be found.")

Exit Sub

End If

Close #1

'

End Sub

Bạn hãy đặt nó vào một module để sử dụng cho toàn chương trình.

Nếu quá trình kiểm tra diễn ra tốt đẹp thì không có gì, nếu có trục trặc bạn sẽ thấy một MsgBox xuất hiện, nhờ bẫy lỗi, chương trình của chúng ta vẫn hoạt động tiếp tục. Bây giờ bạn hãy tạo một form mới, thêm vào một CommandButton (Name: cmdVerify), gõ vào đoạn Code cho tình huống Click(), nhấn F5 chạy thử. Với chương trình con như vậy bạn có thể gọi nó để kiểm tra sự tồn tại của file trong chương trình.

Private Sub cmdVerify_Click()

'

Call VerifyFile("MyFile.txt")

'

End Sub


2. Kiểm tra độ phân giải màn hình

Nếu chương trình của bạn có đòi hỏi phải chạy trong một độ phân giải màn hình nhất định nào đó, bạn có thể dùng cách sau đây để kiểm tra độ phân giải của màn hình có thích hợp với chương trình của mình không, rồi sau đó mới chạy.

Hàm CheckRez(rộng, cao) nhận vào 2 tham số là chiều rộng và cao của màn hình (tính bằng Pixel) trả về một giá trị kiểu Boolean (True/False). Nếu trả về True có nghĩa là độ phân giải màn hình đang sử dụng thích hợp với độ phân giải bạn cần kiểm tra.

Vd: CheckRez(800,600) = True

Do Visual Basic sử dụng đơn vị là Twip mà bạn lại sử dụng là Pixel cho nên phải có sự chuyển đổi đơn vị.

Public Function CheckRez(pixelWidth As Long, _
pixelHeight As Long) As Boolean

'

Dim lngTwipsX As Long

Dim lngTwipsY As Long

'

' chuyển đổi từ pixels sang twips

lngTwipsX = pixelWidth * 15

lngTwipsY = pixelHeight * 15

'

' kiểm tra lại độ rộng và cao của màn hình

If lngTwipsX <> Screen.Width Then

CheckRez = False

Else

If lngTwipsY <> Screen.Height Then

CheckRez = False

Else

CheckRez = True

End If

End If

'

End Function

Kế đến, bạn hãy dùng câu lệnh if cùng với điều kiện kiểm tra là hàm CheckRez ở đoạn mã bắt đầu của chương trình.

If CheckRez(640, 480) = False Then

MsgBox "Incorrect screen size!"

Else

MsgBox "Screen Resolution Matches!"

End If


3. Inport một file Registry (*.reg)

Nếu bạn cần Import một file reg vào Registry mà không muốn làm bận tâm đến người dùng. Bạn hãy chạy Regedit với thông số /s kèm theo sau là tên file và đường dẫn file reg cần Import vào Registry. Cụ thể như sau:

Dim strFile As String

Dim lngRet

strFile = App.Path & "\myreg.reg"

If Len(Dir$(strFile)) > 1 Then

lngRet = Shell("Regedit.exe /s " & strFile, vbNormalFocus)

End If

Với cách này file reg của bạn sẽ được Merge vào Registry một cách âm thầm, không ai hay biết.

Và đương nhiên bạn cũng có thể gõ trực tiếp như vậy vào hộp thoại run của Windows.


4. Sự khác nhau khi load form ở chế độ MODAL và MODELESS

Những Form được load ở chế độ MODAL thường có yêu cầu bắt buộc và chờ người dùng nhập dữ liệu trước khi thi hành các lệnh khác trong cùng một thủ tục (Sub / Function). Form loại này thường giữ focus của chương trình cho đến khi nó được người dùng "giải tán". Khi hiển thị form ở chế độ này, các lệnh không thuộc form đang hiển thị sẽ không được thực hiện, mà phải chờ cho đến khi form này được đóng lại. Các MsgBox, InputBox chính là một dạng của Modal form. Để hiển thị form ở chế độ này bạn dùng cú pháp lệnh sau:

MyForm.SHOW vbModal

Khi load form ở chế độ MODELESS các lệnh sẽ được lần lượt thực hiện một cách bình thường từ trên xuống dưới trong một thủ tục (không cần người dùng phải quan tâm, để từ từ rồi xem cũng được). các MDI child luôn ở dạng modeless. Để hiển thị form ở chế độ modeless bạn dùng lệnh:

MyForm.SHOW


5. Tại sao phải dùng Option Explicit?

Nếu dòng Option Explicit xuất hiện trong cửa sổ code của chương trình cũng có nghĩa là Vb bắc buộc bạn phải khai báo biến một cách tường minh trước khi sử dụng chúng. Mệnh đề Option Explicit được đặt ở dòng đầu tiên trong cửa sổ Code (General Declaration). Quả thật việc bắt buộc phải khai báo biến sẽ làm cho chương trình rõ ràng, giảm thiểu tối đa các sai sót ngoài ý muốn (bugs) do khả năng tự phát sinh biến mới mà không cần khai báo của Visual Basic . Đây cũng là con dao 2 lưỡi, theo tôi tính năng này hại nhiều hơn là lợi.

Bạn có thể gõ trực tiếp mệnh đề Option Explicit hay nhờ VB tự động thêm giúp bằng cách vào Tools / Options. Check vào Require Variable Declaration trong thẻ (tab) Editor.

Option Explicit sẽ vô hiệu khả năng tự phát sinh biến của Vb. Như vậy, tất cả các biến muốn sử dụng đều phải khai báo bằng từ khóa DIM hay #800000IM, biến nào chưa được khai báo VB sẽ thông báo lỗi và bắt bạn phải khai báo mới chạy được chương trình. Kiểu dữ liệu mặc nhiên mà mỗi lần Visual Basic (Basic) tạo biến mới là Variant.

6. Tạo menu PopUp

Trong ứng dụng ngoài loại menu kéo xuống (PullDown) còn một loại menu nữa khá linh động gọi là menu PopUp. Loại menu này bạn rất thường sử dụng trong Windows 9.x, được kích hoạt bằng phím phải chuột. Một ứng dụng Windows hoàn chỉnh chạy trong Windows 9.x không thể không có loại menu cấp tốc này.

Trong Visual Basic loại menu này thật ra cũng là một menu PullDown bình thường mà thôi. Khi nào cần hiện thành menu PopUp bạn chỉ việc gọi tên menu tương ứng (Name của Menu). Để cho thành menu PopUp thứ thiệt bạn hãy cho menu này ẩn đi (Visible = False), khi nào người dùng nhấn phím phải chuột bạn sẽ cho nó hiện ra bằng method Popupmenu

Trong chương trình ta có thể dùng hành vi (method) popupmenu để gọi một menu hiển thị, menu này phải được tạo trước (menu editor) và có ít nhất 1 mục chọn con tức là menu thứ cấp.

Cú pháp: object.PopupMenu menuname, flags, x, y

Trong đó:

object: tên form mà trình đơn sẽ xuất hiện. Nếu không ghi có nghĩa là dùng form hiện hành.

menuname: tên menu cần hiển thị.

flags: giá trị nguyên qui định vị trí xuất hiện của menupopup.

Tên Hằng

Giá Trị

ý nghĩa

vbPopupMenuLeftAlign 0 Trị mặc định, cạnh trái của trình đơn sẽ ở vị trí x.
vbPopupMenuCenterAlign 4 Trình đơn sẽ canh giữa so với vị trí x.
vbPopupMenuRightAlign 8 Cạnh phải của trình đơn sẽ ở vị trí x.
... ... ...
x,y
Tọa độ trình đơn sẽ xuất hiện. Nếu không ghi mặc nhiên trình đơn sẽ xuất hiện ở vị trí mouse

Sau đây là một thí dụ về PopUp menu:

Mở một form trống và tạo 1 hệ thống menu như hình sau. Trong hình menu chính là Record (Name: mnuRec) vào có một số menu con như: Insert, Append, Edit, Delete.

Để "chộp" được sự kiện nhấn Mouse bạn hãy khảo sát tình huống MouseDown của form này. Gõ vào đoạn Code sau:

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

If Button = 2 Then
' Kiểm tra xem nút phải chuột có bị nhấn không

PopupMenu mnuRec, 0
' Cho hiển thị menu mnuRec

End If

End Sub

Nhấn F5 chạy thử bạn sẽ được như hình bên. Nhưng chúng ta lại không muốn cái menu này luôn xuất hiện sờ sờ trên form, hãy cho nó biến mất.

Bạn chỉ cần cho cái menu "đầu đàn" mnuRec biến mất là các menu con bên trong cũng mất tích theo. Hãy mở hộp thoại Menu Editor ra, click chọn menu Record, bỏ dấu check ở CheckBox Visible, click OK. Hà hà bây giờ nó biến mất tiêu rồi.

Nhấn F5, chạy thử chương trình, nhấn nút phải chuột... Bây giờ thì thành công rồi hén. Hãy áp dụng cách này vào ứng dụng Visual Basic của bạn để tiện cho người dùng.

No comments:

Post a Comment