Tạo hiệu ứng cho UserForm

Liên hệ QC

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,911
Như có lần anh SA_DQ đã nói: "Chúng ta ăn chắc mặc bền trước rồi hãy tiến tới ăn ngon mặc đẹp"
Từ file Tra cứu chéo - hổ trợ nhập liệu tôi cải tiến nó thành 1 Form và sau khi hoàn tất, tôi bắt đầu trang trí, thêm 1 vài tính năng vào form cho thêm phần sống động
Hãy mở file lên, Double click vào 1 trong các cell trong vùng B20:C30 để mở form và khám phá
-------------------------
Những tính năng hiện có trong form:
- Cho phép Sort ListBox khi ta nhấp vào tiêu đề (hổ trợ tìm kiếm)
- Nếu ta gõ 1 vài ký tự vào TextBox thì Listbox sẽ hiển thị kết quả tìm dựa vào từ khóa vừa gõ (như chức năng Find của Excel)
- Một vài tính năng khác nữa
-------------------------
Các phần trang trí thêm vào:
- Form đã được làm mất nút Close form (dấu X)
- Vì lý do gì đó mà form che khuất cửa sổ bảng tính thì ta có thêm chức năng làm trong suốt form để có thể nhìn thấy những gì bên dưới
Để cho các bạn đở rối vì 1 mớ bòng bong, tôi làm thêm 2 file riêng: 1 cái đã được ẩn nút Close và 1 cái có chức năng làm trong suốt Form
Code cực đơn giản nhờ sự hổ trợ của các hàm API
1> Ẩn nút Close Form
PHP:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
PHP:
Private Sub UserForm_Initialize()
  Dim hWnd As Long
  hWnd = FindWindow("ThunderDFrame", Me.Caption)
  SetWindowLong hWnd, -16, &H84C00000
End Sub
Chú ý: Nếu các bạn thay &H84C00000 thành &HFF0000 thì sẽ làm xuất hiện cả 3 Button: Minimize, Maximize Close... và đương nhiên lúc này có thể Resize được Form ngay cả khi nó đang hoạt động
Các bạn có thể dùng dòng lệnh này:
PHP:
MsgBox Hex(GetWindowLong(hwnd, -16))
để đọc thông tin về Style chuẩn của UserForm. Từ đó có thể thí nghiệm và chỉnh sửa theo ý...
Lệnh này cần thêm hàm GetWindowLong:
PHP:
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long

2> Làm trong suốt Form
PHP:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
PHP:
Private Sub SpinButton1_Change()
  Dim hWnd As Long
  hWnd = FindWindow("ThunderDFrame", Me.Caption)
  SetWindowLong hWnd, -20, H80000
  SetLayeredWindowAttributes hWnd, 0, 255 - SpinButton1.Value, 2
  Label1.Caption = SpinButton1.Value / 10
End Sub
Với SpinButton đã được cài trước trong Properties:
- Max = 160
- Min = 0
- SmallChange = 10

-------------------------
Tôi đã gộp 2 code này vào code chính của file mc_request_03. Các bạn hãy tham khảo nhé
Dù sao thì tác dụng của Form vẫn là hổ trợ ta nhập liệu nhanh hơn, các phần trang trí thêm vào chỉ làm cho ứng dụng thêm hấp dẩn... Các bạn không nên vì thế mà "đua đòi" rồi quên đi mục đích chính
 

File đính kèm

  • UserForm.rar
    53.2 KB · Đọc: 2,308
bài bạn mangat06008 hỏi cách nay đã nữa năm(ngày 8 tháng 4 năm 2016), chắc đã có giải pháp hay đã biết cách rồi, anh be09 hãy trả lời của bạn cankiller mới hôm 18/11/2016 kìa.

Để sửa danh sách quay thưởng thì làm như vầy:

Disable all macros (để vô hiệu hóa tất cả macro) rồi vào danh sách sửa cái gì thì sửa, sau đó Enable all macros (cho phép tất cả macro) vậy thôi.

Bạn mangat06008 hỏi cách nay nữa năm nhưng chưa ai trả lời, giờ thấy có bạn khơi lại thì trả lời để thành viên khác hiểu để không hỏi nữa thì có sao đâu.
 
Upvote 0
Option Explicit
Private Declare Function sndPlaySound32 Lib "winmm.dll" _
Alias "sndPlaySoundA" (ByVal lpszSoundName _
As String, ByVal uFlags As Long) As Long

Sub am_thanh_thong_bao()
Call sndPlaySound32("E:\amthanh\sam chop.wav", 1)
End Sub




Các bạn ơi cho mình hỏi con số ,1 trong dòng lệnh này có ý nghĩa gì vậy? nếu mình thay bằng ,10 hoặc bằng 5 thì có sự khác nhau nào không ? ( Mình mới học mong mọi người thông cảm ! )

Call sndPlaySound32("E:\amthanh\sam chop.wav", 1)
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom