Control BSImageList và hàm MsgBoxParams thay thế MsgBox để hiển thị ảnh bất kỳ

Liên hệ QC

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia
13/6/06
Bài viết
4,649
Được thích
10,138
Giới tính
Nam
Nghề nghiệp
Giáo viên, CEO tại Bluesofts
Hướng dẫn hàm #MSGBOXParams hiển thị ảnh tùy ý, màu, progress, unicode.
+ Hướng dẫn nhúng ảnh vào Excel với control #BSImageList trong #BSAC, từ đây các control , hàm có thể hiển thị ảnh. File Excel mang sang máy khác không phải mang theo bộ file ảnh nữa. Tính năng này có từ BSAC v3.0.0.1, Add-in A-Tools v9.4.0.1.
(BSImageList lưu ảnh và có ImageIndex dùng khai báo trong các control: BSListView, BSTreeView, BSListBox, BSComboBox(x), BSButton để hiển thị ảnh/icon ).
(*) Download file Excel với mã nguồn: https://drive.google.com/file/d/1UiwhmVdPyN6gsO0_fiUFbeB6Vfk1yhz8/view?usp=sharing

Trình tự thiết kế như sau:
1.Nhúng các fileảnh vào control BSImageList
Từ menu Developer -> Insert -> More Controls, chọn BSImageList trong BSAC. Control này có từ phiên bản BSAC v3.0.0.1 cập nhật ngày 28-09-2020 hoặc Add-in A-Tools v9.4.0.1
Help1.png

Hãy đảm bảo Design Mode được bật trước khi bạn làm việc với control BSImageList (nếu nó tắt control này sẽ ẩn).

Help2.png
Nhấp chuột phải trên BSImageList -> BSImageList Control Object - > Properties sẽ ra mang hình để làm việc với thư viện ảnh.

Help3.png

Help4.png

Mã:
Sub MsgBoxParams_Icon()
    Dim pr As TBSMsgBoxParams
    'pr.Icon = ExtractIcon(Application.HinstancePtr, GetSysDir & "\shell32.dll", 220)
    pr.Icon = Sheet2.BSImageList1.ListImages(1).HIcon
    pr.BackColor = RGB(200, 10, 10)
    pr.ForeColor = vbYellow

    Dim x, s
    s = "MsgBoxParams thay thÕ MsgBox ®Ó lµm ®îc nhiÒu viÖc:"
    s = s & Chr(13) & "- HiÓn thÞ chuçi Unicode"
    s = s & Chr(13) & "- Thay ®æi mµu nÒn, ch÷"
    s = s & Chr(13) & "- HiÓn thÞ thanh Progress ®Ó ch¹y thêi gian."
    s = s & Chr(13) & "- Thay ®æi Icon"
   
    x = MsgBoxParams(s, _
        VbMsgBoxStyle.vbInformation + VbMsgBoxStyle.vbYesNoCancel, "Tïy biÕn víi MsgBox b»ng MsgBoxParams", pr)
    DestroyIcon pr.Icon 'free memory!
End Sub

Khi chạy ví dụ trên bạn sẽ thấy một MsgBox có ảnh như hình dưới đây:

Help5.png

Để hiển thị hàm MsgBox với progress, timer, icon thì dùng đoạn code sau:
Mã:
Sub MsgBoxParams_Test()
    Dim pr As TBSMsgBoxParams
    'pr.Icon = ExtractIcon(Application.HinstancePtr, GetSysDir & "\shell32.dll", 220)
    pr.Icon = Sheet2.BSImageList1.ListImages(0).HIcon
    pr.BackColor = RGB(200, 10, 10)
    pr.ForeColor = vbYellow
    pr.TimerStruct.bAddProgress = True
    pr.TimerStruct.nDuration = 30 ' seconds
    pr.TimerStruct.nTimerCountDown = 0
    pr.TimerStruct.bStopProgress = False
    pr.TimerStruct.nInterval = 1000 ' 1 second
    pr.TimerStruct.nExpireButtonClick_ID = ID_YES
    pr.TimerStruct.nDisplayOnButton_ID = ID_CANCEL
   
    Dim x, s
    s = "T«i sÏ híng dÉn c¸c b¹n tïy biÕn hµm MessageBox víi hµm MsgBoxParams cña BSAC trong %d gi©y n÷a."
    s = s & Chr(13) & "- HiÓn thÞ chuçi Unicode"
    s = s & Chr(13) & "- Thay ®æi mµu nÒn, ch÷"
    s = s & Chr(13) & "- HiÓn thÞ thanh Progress ®Ó ch¹y thêi gian."
    s = s & Chr(13) & "- Thay ®æi Icon"
   
    x = MsgBoxParams(s, _
        VbMsgBoxStyle.vbInformation + VbMsgBoxStyle.vbYesNoCancel, "Tïy biÕn víi MsgBox", pr)
    MsgBoxW x, vbInformation, "MsgBoxParams"
   
End Sub

Khi chạy bạn sẽ có được hình như dưới đây:
\Help6.png

Để sử dụng BSAC bạn có thể cài độc lập file BSAC.ocx hoặc cài Add-in A-Tools nó sẽ tự động cài BSAC. Link tại đây
 
Lần chỉnh sửa cuối:
Image list này thấy trong Visual basic hay Delphi có sẵn thì phải
Đúng là VBA thiếu nhiều control, Tuân rất hay đã bổ sung nó, giá mà bộ này nhẹ gọn thì hay cho phát triển quá.
 
Cái này thực ra là form tạo từ delphi
 
Image list này thấy trong Visual basic hay Delphi có sẵn thì phải
Đúng là VBA thiếu nhiều control, Tuân rất hay đã bổ sung nó, giá mà bộ này nhẹ gọn thì hay cho phát triển quá.

Micsrosoft có bộ activex controls MSCOMCTL.OCX và nó chỉ hỗ trợ trên ứng dụng 32-bit, vì thế nên các bạn lập trình VBA dùng nó chạy trong Office 64-bit là bị lỗi. MS không phát triển nó để hỗ trợ 64 bit cũng như unicode. Em làm bộ BSAC này để hoàn tất công việc mà Microsoft không làm nữa. Những người lập trình VBA trong Office 32 hay 64-bit chỉ cần một file BSAC.ocx là có thể dùng rất nhiều control tương tự như TreeView, ListView, ImageList,,... và bổ sung các control mới như BSListBox, BSComboBox, Task Pane, các hàm mở rộng.
BSAC được lập trình từ Delphi nên nó wrap một số component có sẵn và viết thêm control mới cũng như các kỹ thuật activex mới được như vậy.

BSAC có tạo ra một số control giống với bộ activex MSCOMCTL nhưng nó thêm rất nhiều những control mới và đặc tính mới để mang màu sắc Office. Ví dụ như video dưới đây:



Bài đã được tự động gộp:

Cái này thực ra là form tạo từ delphi

BSAC lập trình từ Delphi mà bạn nhưng còn phải viết rất nhiều và am hiểu activex mới tạo được.
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom