• Thứ Hai, 18/10/2004 17:00 (GMT+7)

    Câu hỏi :
    Xin hỏi cách làm cho nút Close ở góc phải của Form trong VB6 mờ đi (mà không biến mất) và cách xử lý sự kiện giữ chuột trên form và kéo đi để form di chuyển theo.

    Trả lời :

    Để làm mờ nút bấm Close (hay option Close trong menu hệ thống) của Form VB6, bạn có thể gọi hàm API ModifyMenu() của Windows để thiết lập phần tử này về trạng thái "gray". Cụ thể đoạn code của thủ tục Form_Load() sau đây sẽ thực hiện yêu cầu của bạn.

     ' Khai báo các hàm API cần gọi

     Private Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpString As Any) As Long

     Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long

     'Khai báo các hằng hệ thống cần dùng

     Const MF_BYCOMMAND = &H0

     Const MF_GRAYED = &H1

     Const SC_CLOSE = &HF060

     Const SC_MINIMIZE = &HF020

     Const SC_MAXIMIZE = &HF030

     ' Thủ tục Form_Load của Form tương ứng

     Private Sub Form_Load()

     Dim hMenu As Long

     Dim success As Long

     hMenu = GetSystemMenu(hwnd, 0)

     ' cấm option hay button Close hoạt động


     success = ModifyMenu(hMenu, SC_CLOSE, MF_BYCOMMAND Or MF_GRAYED, -10, "Close")

     ' cấm option hay button Maximize hoạt động


     success = ModifyMenu(hMenu, SC_MAXIMIZE, MF_BYCOMMAND Or MF_GRAYED, -11, "Maximize")

     ' cấm option hay button Minimize hoạt động


     success = ModifyMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND Or MF_GRAYED, -12, "Minimize")

     End Sub
     
     Để dời Form khi người dùng "drag" chuột trong Form, bạn cần phải viết code thực hiện nó, cách dễ thấy nhất là viết 3 thủ tục xử lý sự kiện MouseDown, Mouse Move và MouseUp cho Form như sau:

     ' Khai báo các biến cần dùng

     Dim mx As Integer

     Dim my As Integer

     Dim fDown As Boolean

     ' Thủ tục khởi động Form

     Private Sub Form_Load()

     fDown = False

     ' các lệnh khởi động khác

     End Sub

     ' Thủ tục xử lý sự kiện MouveDown


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

     mx = X

     my = Y

     fDown = True

     End Sub

     ' Thủ tục xử lý sự kiện MouveUp


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

     fDown = False

     End Sub

     ' Thủ tục xử lý sự kiện MouveMove


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

     ' Nếu đang ấn chuột thì dời Form theo yêu cầu


     If fDown Then

     Me.Move Me.Left + X - mx, Me.Top + Y - my

     End If

     End Sub

    Chuyên mục: Lập trình