Microsoft đã ngừng hỗ trợ ActiveX Controls, các controls cũ không hỗ trợ unicode, không có Task Pane. Tôi đã phát triển BSAC - Bluesofts ActiveX Controls để cho những người lập trình thiết kế phần mềm với giao diện chuyên nghiệp trong VBA.
Xin được hỏi bác Duy Tuân: sau khi tạo ra phần mềm sử dụng menu lệnh này, cài đặt trên máy tính không có A-Tools thì menu này còn hoạt động được không ạ?
Xin được hỏi bác Duy Tuân: sau khi tạo ra phần mềm sử dụng menu lệnh này, cài đặt trên máy tính không có A-Tools thì menu này còn hoạt động được không ạ?
Em hãy copy file BSAC.OCX trong thư mục hệ thống là
C:\Windows\SysWOW64
hoặc
C:\Windows\System32
Khi mang sang máy khác em phải copy file BSAC.OCX vào thư mục hệ thống của máy đó và Register nhé. Như vậy không cần cài A-Tools (bản chất A-Tools giúp mình cài BSAC mà thôi. Em có thể tạo bộ cài tự động bằng InnoSetup cho tiện dụng.
Em hãy copy file BSAC.OCX trong thư mục hệ thống là
C:\Windows\SysWOW64
hoặc
C:\Windows\System32
Khi mang sang máy khác em phải copy file BSAC.OCX vào thư mục hệ thống của máy đó và Register nhé. Như vậy không cần cài A-Tools (bản chất A-Tools giúp mình cài BSAC mà thôi. Em có thể tạo bộ cài tự động bằng InnoSetup cho tiện dụng.
BSAC.ocx lập trình trên Delphi cho hai nền tảng 32 và 64-bit. Để tôi test thêm control này trên Office 64 bit nữa nhé hpkhuong. Bạn thử trên máy Office 32-bit xem trước nhé.
Mạnh mới thử trên Windows10x64 - Office2016x32 thấy ok đó nha
Còn File *.ocx không nhất thiết phải copy vào Folder hệ thống của Windows vẫn đăng ký ok ... thích để trên Ổ D hay E ok hết
HƯỚNG DẪN ĐĂNG KÝ ACTIVEX CONTROLS "BSAC.OCX" CHO WINDOWS
(Chỉ làm lần đầu tiên)
Có 3 tình huống copy vào thư mục Hệ thống của hệ điều hành
(*) Nếu Window 32 bit, Office 32-bit
Copy Office 32-bit\BSAC.ocx vào thư mục C:\Windows\System32\
(*) Nếu Window 64 bit, Office 32-bit
Copy Office 32-bit\BSAC.ocx vào thư mục C:\Windows\SysWOW64\
(*) Nếu Window 64 bit, Office 64-bit
Copy Office 64-bit\BSAC.ocx vào thư mục C:\Windows\System32\
Sau khi copy xong, hãy chạy chương trình "Command Prompt" quyền Administrator và đăng ký.
Ý code theo hình phải không ... Thấy OK đó ha
Thử tools sau đăng ký xem sao ... File *.ocx để ổ nào tùy thích nha miễn sao trên HDD cài Win ( USB là thua)
Mạnh đang nghĩ nếu Ứng dụng tốt ta nghĩ ra 1 cách là đính kèm File *.ocx vào Excel xong mang đi máy nào là có luôn trong đó ... Nhưng khó là làm sao Code để xuất File *.ocx đó từ Excel ra Folder
Sự kiện BSTaskPaneX1_OnVisible để báo người lập trình biết trạng thái ẩn/hiện.
Mã:
Private Sub BSTaskPaneX1_OnVisible(ByVal View As Boolean)
If Not View Then
MsgBox "Task Pane dang an (visible = False)."
Else
MsgBox "Task Pane dang hien thi (visible = True)."
End If
End Sub
Khi cần hiển thị lại thì chạy thủ tục:
Mã:
Sub ViewTaskPane()
UserForm3.BSTaskPaneX1.View = True
End Sub
BSAC.ocx lập trình trên Delphi cho hai nền tảng 32 và 64-bit. Để tôi test thêm control này trên Office 64 bit nữa nhé hpkhuong. Bạn thử trên máy Office 32-bit xem trước nhé.
Trong tập tin ví dụ nếu nhấn "Play video clip" thì sẽ xem một clip hay.
Tập tin video trước đó tôi đã nhồi vào Image với tên là MySecretImage. Code trong SaveVideoAndPlay cho thấy cách lấy nội dung từ Image MySecretImage rồi ghi ra đĩa, rồi chạy video đó.
Cách nhồi nội dung vào Image: chạy Sub FileToBitmapFile với FileName là đường dẫn tới tập tin cần nhồi. Code sẽ tạo 1 bitmap (nhái) và ghi trên đĩa với đường dẫn saveFilename. Nếu PictureName <> "" thì code thêm 1 Image trên ActiveSheet và đặt tên là PictureName (của tôi là MySecretImage), sau đó code nhồi bitmap (nhái) vừa ghi trên đĩa vào Image.
Sau này muốn lấy ra đĩa thì làm y hệt như trong SaveVideoAndPlay, tất nhiên không ghi thành CafeSuaNong.wmv mà là vd. hehe.DLL, blala.EXE, hichic.OCX v...v
Để xem được những comment của tôi trong VBE thì: Tools -> Options -> thẻ Editor format -> trong mục Font chọn Times New Roman (vietnamese). Muốn viết comment tiếng Việt bằng Unikey thì chọn bảng mã windows_1258
Trong tập tin ví dụ nếu nhấn "Play video clip" thì sẽ xem một clip hay.
Tập tin video trước đó tôi đã nhồi vào Image với tên là MySecretImage. Code trong SaveVideoAndPlay cho thấy cách lấy nội dung từ Image MySecretImage rồi ghi ra đĩa, rồi chạy video đó.
Cách nhồi nội dung vào Image: chạy Sub FileToBitmapFile với FileName là đường dẫn tới tập tin cần nhồi. Code sẽ tạo 1 bitmap (nhái) và ghi trên đĩa với đường dẫn saveFilename. Nếu PictureName <> "" thì code thêm 1 Image trên ActiveSheet và đặt tên là PictureName (của tôi là MySecretImage), sau đó code nhồi bitmap (nhái) vừa ghi trên đĩa vào Image.
Sau này muốn lấy ra đĩa thì làm y hệt như trong SaveVideoAndPlay, tất nhiên không ghi thành CafeSuaNong.wmv mà là vd. hehe.DLL, blala.EXE, hichic.OCX v...v
Để xem được những comment của tôi trong VBE thì: Tools -> Options -> thẻ Editor format -> trong mục Font chọn Times New Roman (vietnamese). Muốn viết comment tiếng Việt bằng Unikey thì chọn bảng mã windows_1258
Hay đó Anh để Em nghiên cứu kỹ có khó khăn chỗ nào em hỏi mong anh chỉ thêm
Em chuyển comment trong VBE tiếng việt có dấu thấy ok .... và nó là mặc định cho toàn bộ file Excel trên máy đó luôn ...
thấy tiện lâu lâu copy trên mạng ghi chú dán vào nó không lỗi Font
Anh @batman1 Em mới thử code thấy chạy rất tốt nhưng có 1 tham số saveFilename trong Hàm FileToBitmapFile em chưa hiểu lắm
1/ tham số này saveFilename xuất ra file đó là file thật hay giả và mục đích của nó là gì ?
2/ Khi ghi ảnh từ Sheet ra folder và sử dụng file đó nếu ko lỗi là tuyệt vời
ý tưởng của Em như sau
1/ Lưu File *.ocx hay *.Dll chứa thư viện hàm trong đó lên Sheet (Sử dụng code Anh viết)
2/ khi cần mang file đó đi máy khác viết code check xem file đó có tồn tại hay ko ... nếu chưa có xuất file đó ra xong Register cho nó
3/ Từ Excel chay hàm và các thủ tục cần thiết kết nối với thư viện hàm ... xong Ok nhứt
...
ngày mốt rảnh em mới thử lại khi file nó xuất ra xem có lỗi hay không ... nếu gọi hàm trong File *.dll mà chạy tốt thì quá tuyệt vời
4/ Em sẻ thử nhồi file đó lên Sheetmacro4 xem có Ok hay ko .... nếu ok xong ẩm nó đi là hay đó (cho nó gọn gàng)
5/ với code anh cho đó em sẻ vận dụng tốt cho công việc của mình
6/ Em thử code sau thấy lỗi trong trường hợp em ghi chú đó ... anh chỉ cho em với tại sao ?
Mã:
Sub AddFileToSheet()
Dim MyPicture, FilePath As String
Dim SaveFile
FilePath = ThisWorkbook.Path & "\BSAC.ocx"
SaveFile = ("D:\BSAC.ocx")
MyPicture = "PictureName"
Call FileToBitmapFile(FilePath, SaveFile, MyPicture) ''Chay Tot
''Call FileToBitmapFile(FilePath, FilePath, MyPicture) ''lam treo File Excel ???
End Sub
Anh @batman1 Em mới thử code thấy chạy rất tốt nhưng có 1 tham số saveFilename trong Hàm FileToBitmapFile em chưa hiểu lắm
1/ tham số này saveFilename xuất ra file đó là file thật hay giả và mục đích của nó là gì ?
2/ Khi ghi ảnh từ Sheet ra folder và sử dụng file đó nếu ko lỗi là tuyệt vời
ý tưởng của Em như sau
1/ Lưu File *.ocx hay *.Dll chứa thư viện hàm trong đó lên Sheet (Sử dụng code Anh viết)
2/ khi cần mang file đó đi máy khác viết code check xem file đó có tồn tại hay ko ... nếu chưa có xuất file đó ra xong Register cho nó
3/ Từ Excel chay hàm và các thủ tục cần thiết kết nối với thư viện hàm ... xong Ok nhứt
...
ngày mốt rảnh em mới thử lại khi file nó xuất ra xem có lỗi hay không ... nếu gọi hàm trong File *.dll mà chạy tốt thì quá tuyệt vời
4/ Em sẻ thử nhồi file đó lên Sheetmacro4 xem có Ok hay ko .... nếu ok xong ẩm nó đi là hay đó (cho nó gọn gàng)
5/ với code anh cho đó em sẻ vận dụng tốt cho công việc của mình
6/ Em thử code sau thấy lỗi trong trường hợp em ghi chú đó ... anh chỉ cho em với tại sao ?
Mã:
Sub AddFileToSheet()
Dim MyPicture, FilePath As String
Dim SaveFile
FilePath = ThisWorkbook.Path & "\BSAC.ocx"
SaveFile = ("D:\BSAC.ocx")
MyPicture = "PictureName"
Call FileToBitmapFile(FilePath, SaveFile, MyPicture) ''Chay Tot
''Call FileToBitmapFile(FilePath, FilePath, MyPicture) ''lam treo File Excel ???
End Sub
Nói nôm na thì là: Do chỉ có thể nhập ảnh vào Image nên ta soạn một tập tin BMP với nội dung tập tin nguồn (DLL, OCX, TXT, EXE ...) với tư cách là những bai mầu của bitmap 24bit (với bitmap 24bit thì mỗi pixel được đại diện bởi 3 bai R, G, B - 3 bai * 8 bit = 24bit). Tôi dùng 24bit vì dạng này đơn giản nhất. Tất nhiên mỗi bitmap BMP ngoài các bai mầu còn có header - các cấu trúc xác định bitmap: width, height, số bit, độ lớn của tập tin v...v. Sau header thì đến chuỗi bai dài dằng dặc xác định mầu của mỗi pixel. Nếu không có header thì vd. không biết các bai kia có ý nghĩa thế nào. Vì nếu bitmap trắng-đen thì chỉ cần 1bit (0 = đen, 1 = trắng) để ghi mầu của pixel nên trong 1 bai ghi được mầu của 8 pixel. Nếu là 24bit thì phải 3 bai mới ghi được mầu của 1 pixel. Nếu là 2 bit, 4bit, 8 bit thì lại còn phức tạp nữa. Không có header thì cũng không biết ảnh có width, height như thế nào. Code chẳng qua soạn cái header kia còn mảng bai mầu thì ta lấy chính nội dung của tập tin nguồn.
Trong chú thích có ghi rõ: "BMP như thế sẽ được ghi trên đĩa với tên saveFilename (định dạng là BMP)"
Tức là nhập một tên bất kỳ "D:\ ...\hichic.bmp". Code sẽ soạn bitmap như ở trên và ghi ra đĩa với tên "D:\ ...\hichic.bmp". Tôi chọn cách đơn giản là ghi ra đĩa với tên "D:\ ...\hichic.bmp" để sau đó dùng LoadPicture load ảnh vào Image.
Thực ra không bắt buộc phải nhập hichic.BMP mà có thể nhập hichic.OCX. Vì quan trọng là cái lõi chứ không phải định dạng. Bạn phải chuột trên tập tin bla.txt rồi đổi tên thành bla.DLL cũng thành công. Nhưng lõi vẫn là văn bản. Chỉ có điều lúc đó Windows không biết đó là văn bản nên bạn không thể click để mở. Lúc đó phải chọn "Open with ..." rồi chọn notepad.
Như vậy bạn vẩn có thể nhập "... BSAC.ocx" thay cho "... BSAC.bmp" nhưng đó phải là tập tin khác - nếu trùng tên thì phải là thư mục khác.
Code có lỗi do FilePath là tập tin nguồn. Khi bạn gọi
Các bạn quan tâm BSAC thì hãy tải phiên bản BSAC v2.0 theo link sau. Phiên bản này fix TreeView, Task Pane lỗi trong Windows 10 64-bit và Office 64-bit
Thêm một ví dụ về tạo giao diện phần mềm trong Excel cùng Task Pane, TreeView unicode đẹp.
Điều quan trọng nhất của ví dụ này là phương pháp tạo Task Pane bằng class BSTaskPanes.Add(). Phương pháp này khi mở file Excel và cho mở Task Pane tại sự kiện Workbook_Open() không bị lỗi.
Các video hướng dẫn trước đây tôi dùng BSTaskPaneX kéo thả trực tiếp trên Userform làm dễ hơn, tuy nhiên nếu khi mở file Excel đồng thời mở Task Pane sẽ bị lỗi.