• Thứ Ba, 16/11/2004 08:23 (GMT+7)

    Hiệu ứng Form trong Visual Basic 6

    dân lập trình VB6 chắc hẳn bạn rất thích thú những chức năng dễ sử dụng của nó ví dụ như kéo và thả các đối tượng... Nhưng chắc cũng không ít lần bạn đau đầu khi tìm hiểu những hàm API phục vụ cho thiết kế giao diện form. Trong bài viết này, tôi sẽ giới thiệu đến các bạn hàm API 'AnimateWindow' dùng để tạo các hiệu ứng đặc biệt cho form.
    Hàm AnimateWindow được chứa trong thư viện user32.dll. Để sử dụng hàm API này, trước tiên bạn phải khai báo:

    Private Declare Function AnimateWindow Lib 'user32' (ByVal hwnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Boolean

    Câu lệnh gọi hàm AnimateWindows như sau:

    AnimateWindow hWnd, dwTime, dwFlags

    Chi tiết từng chức năng của câu lệnh:
    o    HWnd: cửa sổ tạo hiệu ứng.
    o    dwTime: thời gian tạo hiệu ứng (millisecond).
    o    dwFlags: loại của hiệu ứng. dwFlag có thể nhận một (hoặc nhiều) trong các giá trị sau.
    o    &H20000: làm form trở nên 'active' (kích hoạt)
    o    &H80000: hiệu ứng 'fade' (hiện từ mờ rồi dần trở nên rỏ). Chỉ được sử dụng khi hWnd là cửa sổ onTop.
    o    &H10: hiệu ứng tỏa từ giữa form ra ngoài.
    o    &H1: hiệu ứng làm form xuất hiện từ trái sang phải.
    o    &H2: hiệu ứng làm form xuất hiện từ phải sang trái.
    (&H1, &H2 không dùng chung được với &H10 or &H80000).
    o    &H4 : hiệu ứng làm form xuất hiện từ trên xuống dưới.
    o    &H8 : hiệu ứng làm form xuất hiện từ dưới lên trên.

    Dưới đây là chương trình tạo hiệu ứng cho form dùng hàm API trên.

    Tạo một project Standard EXE, tạo form đặt tên là frmOptions với các đối tượng như hình 1 (1 frame, 6 OptionButton, 1 Label, 1 TextBox, 1 CommandButton), nhập đoạn code sau:

    Option Explicit

    Private Sub Command1_Click()

    'Thoát khỏi form trong trường hợp form đã được load

      Unload frmDemo         

    'Dừng chương trình 0.2 millisecond

      Pause (0.2)            

      Load frmDemo           

      frmDemo.SetFocus       

    End Sub

    Sub Pause(Interval)

    Dim Current

      Current = Timer

      Do While Timer - Current < Val(Interval)

        DoEvents

      Loop

    End Sub

    Private Sub Form_Unload(Cancel As Integer)

      Unload frmDemo         

    End Sub

    Tạo thêm 1 form đặt tên là frmDemo và nhập đoạn code sau:

    Option Explicit

    Private Declare Function AnimateWindow Lib 'user32' (ByVal hwnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Boolean

    Private Sub Form_Load()

    'dùng để bẫy lỗi

    On Error GoTo starterr  

    Dim StartUpEffect

    'Nếu option Left to Right được lựa chọn

    If frmOptions.optLR.Value Then             

        StartUpEffect = &H1    

    'Nếu option Right to Left được lựa chọn

    ElseIf frmOptions.optRL.Value Then   

        StartUpEffect = &H2              

    'Nếu option Top to Bottom được lựa chọn

    ElseIf frmOptions.optTB.Value Then       

        StartUpEffect = &H4                 

    'Nếu option Bottom to Top được lựa chọn

    ElseIf frmOptions.optBT.Value Then         

        StartUpEffect = &H8                

    'Nếu option Center được lựa chọn

    ElseIf frmOptions.optC.Value Then      

        StartUpEffect = &H10               

    Else                                   

    'Nếu option Fade được lựa chọn

        StartUpEffect = &H80000            

    End If

    If Trim(frmOptions.Text1.Text) <> '' Then  

      'Tạo hiệu ứng cho form

      AnimateWindow Me.hwnd, frmOptions.Text1.Text, StartUpEffect  

      DoEvents

      Me.refresh

    Else

      MsgBox 'Please enter a valid number!', , 'Error'

    End If

    Exit Sub

    starterr:                              

    MsgBox 'Please select an effect!', , 'Error'

    End Sub

    Gán frmOptions làm form khởi chạy đầu tiên (Project Properties->Startup Object). Xong, bạn hãy chạy chương trình để thưởng thức những hiệu ứng form đẹp mắt.ÿ

    Chúc các bạn thành công.

    Nguyễn Vũ Thắng
    nvthang@msn.com

     

    ID: A0402_93