lehongduc Thành viên đẳng cấp    Bài viết: 169 Chủ đề: 21 Tham Gia: 02-12 -11 Điểm danh tiếng: 33 Tiền Access: 6,040.17Ac$ #1 20-07-19, 10:48 AM (Được chỉnh sửa: 22-07-19, 08:47 AM bởi Noname.) Chào các Bạn, Về vấn đề tạo ra những hộp thông báo bằng tiếng Việt Unicode đã được chúng ta thảo luận nhiều trước đây rồi. Nay tôi xin trao đổi cùng với các Bạn một thủ thuật nhỏ thôi để tạo ta thông báo tiếng Việt Unicode mà không cần phải sử dụng thêm bất kỳ một thư viện API hỗ trợ Unicode nào khác, cũng không cần phải tạo sẵn một bảng ghi thông báo tiếng Việt riêng để tham chiếu khi gọi hàm. Đó là cách thức rất đơn giản như sau: 1. Viết 1 hàm hiển thị thông báo sử dụng hàm MsgBox mặc định, với nội dung thông báo được chuyển mã sang Unicode tùy theo bảng mã tiếng Việt khi ta viết code. 2. Khi cần hiển thị thông báo bằng tiếng Việt Unicode, ta chỉ cần gọi hàm nêu trên là đủ. Sau đây là 1 ví dụ minh họa: 1. Viết hàm hiển thị thông báo bằng tiếng Việt Unicode: Mã:Function fcMsgBoxUni(ByVal PromptUni As Variant, Optional ByVal Buttons As VbMsgBoxStyle = vbOKOnly, Optional ByVal TitleUni As Variant = vbNullString) As VbMsgBoxResult Dim Msg As String Dim Response As Long Msg = BK1ToUni(PromptUni) If Not IsMissing(TitleUni) Then TitleUni = BK1ToUni(TitleUni) Response = Eval("MsgBox('" & Msg & "'," & Buttons & ",'" & TitleUni & "')") fcMsgBoxUni = Response End FunctionCác Bạn chú ý sẽ thấy trong nội dung hàm này tôi có sử dụng 1 hàm chuyển mã nội dung thông báo từ bảng mã BK HCM 1 Byte sang Unicode, đó là hàm BK1ToUni 2. Và sau đây là 1 procedure có sử dụng hàm fcMsgBoxUni nếu trên. Mã:Sub TestMsg() Dim Msg As String Dim Resp As Long Msg = "}Ýy l¿ théng b¾o bÙng tiäng Vièt Unicode" Msg = Msg & vbCrLf & "Sø dÖng h¿m MsgBox mÜc ½Ình" Msg = Msg & "@" & "Vði nîi dung théng b¾o bÙng tiäng Vièt Font BK HCM 1 byte" Msg = Msg & vbCrLf & "½õôc chuyæn mÁ sang Unicode bÙng h¿m BK1ToUni" & "@" Resp = fcMsgBoxUni(Msg, 64, "Théng b¾o bÙng tiäng Vièt Unicode") End Sub Kết quả khi ta chạy Procedure TestMsg trên sẽ được hộp thông báo như ảnh sau đây: Hie File đính kèm MsgBoxUnicode.zip (Kích cỡ: 45.71 KB / Tải về: 119) Chữ ký của lehongduc Lê Hồng Đức Số ĐT: 0913.941.144 Email: [email protected], [email protected] Website: http://quantribanhang.vn Website Find Reply http2 Access Cơ Bản  Bài viết: 39 Chủ đề: 12 Tham Gia: 17-12 -12 Điểm danh tiếng: 1 Tiền Access: 1,020.31Ac$ #2 22-07-19, 05:30 PM sao bạn không viết như thế này cho gọn . 1 tạo 1 table với tên .SyMsgLib , cấu trúc là : msgNo (data type : number) ; Description (data type : text); msgtitle (data type : text) module viết đoạn code sau . lưu lại . Option Compare Database Private Declare Function GetActiveWindow Lib "user32" () As Long Private Declare Function MessageBoxW Lib "user32" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long Public Function MsgBoxUni(ByVal PromptUni As Variant, Optional ByVal Buttons As VbMsgBoxStyle = vbOKOnly, Optional ByVal TitleUni As Variant = vbNullString) As VbMsgBoxResult 'BStrMsg,BStrTitle : La chuoi Unicode Dim BStrMsg, BStrTitle 'Ham StrConv Chuyen chuoi ve ma Unicode BStrMsg = StrConv(PromptUni, vbUnicode) BStrTitle = StrConv(TitleUni, vbUnicode) MsgBoxUni = MessageBoxW(GetActiveWindow, BStrMsg, BStrTitle, Buttons) End Function Public Function MsgBoxUniFont(ByVal PromptUniFont As Variant, Optional ByVal Buttons As VbMsgBoxStyle = vbOKCancel, Optional ByVal TitleUniFont As Variant = vbNullString) As VbMsgBoxResult 'BStrMsg,BStrTitle : La chuoi Unicode Dim BStrMsg, BStrTitle 'Ham StrConv Chuyen chuoi ve ma Unicode BStrMsg = StrConv(PromptUniFont, vbUnicode) BStrTitle = StrConv(TitleUniFont, vbUnicode) MsgBoxUniFont = MessageBoxW(GetActiveWindow, BStrMsg, BStrTitle, Buttons) End Function trong form bạn có thể tạo nút command button . sự kiện click ghi thế này để hiện thị thông báo MsgBoxUni DLookup("[Description]", "symsglib", "[msgNo] = 17"), vbCritical, DLookup("[msgtitle]", "symsglib", "[msgNo] = 17") Chữ ký của http2 Xin chào, mình là http2, Tham gia http://thuthuataccess.com/forum từ ngày 17-12 -12. Website Find Reply thanhdau Access Cơ Bản  Bài viết: 10 Chủ đề: 4 Tham Gia: 03-09 -19 Điểm danh tiếng: 0 Tiền Access: 266.99Ac$ #3 28-04-20, 02:12 PM Xin hỏi cách viết tiếng Việt trong MsgBoxUnicode.mdb ví dụ: Théng b¾o bÙng tiäng Vièt Unicode Sao mình viết không được. Cần thiết lập bộ gõ như thế nào. Xin cảm ơn Chữ ký của thanhdau thanhdau,gia nhập Thủ Thuật Access từ 03-09 -19. Website Find Reply thanhdau Access Cơ Bản  Bài viết: 10 Chủ đề: 4 Tham Gia: 03-09 -19 Điểm danh tiếng: 0 Tiền Access: 266.99Ac$ #4 28-04-20, 02:35 PM Mình làm được rồi, cám ơn nhiều Chữ ký của thanhdau thanhdau,gia nhập Thủ Thuật Access từ 03-09 -19. Website Find Reply Bienxanh Access Nhập Môn Bài viết: 5 Chủ đề: 1 Tham Gia: 30-03 -20 Điểm danh tiếng: 0 Tiền Access: 189.20Ac$ #5 30-04-20, 07:35 AM Không biết sử dụng thư viện API có nặng gì không ạ? Em có đang sử dụng 1 hàm cũng khá hay em chỉ cần viết "chafo casc bajn" thì nó tự convert thành tiếng việt rồi ạ. Và như thế em cũng thấy khá nhanh khi code đỡ phải thao tác nhiều mà lại còn ngắn gọn ạ. Chữ ký của Bienxanh Bienxanh,gia nhập Thủ Thuật Access từ 30-03 -20. Website Find Reply ongke0711 Honorary members    Bài viết: 3,578 Chủ đề: 62 Tham Gia: 10-04 -15 Điểm danh tiếng: 165 Tiền Access: 92,558.56Ac$ #6 30-04-20, 08:52 AM (30-04-20, 07:35 AM)Bienxanh Đã viết: Không biết sử dụng thư viện API có nặng gì không ạ? Em có đang sử dụng 1 hàm cũng khá hay em chỉ cần viết "chafo casc bajn" thì nó tự convert thành tiếng việt rồi ạ. Và như thế em cũng thấy khá nhanh khi code đỡ phải thao tác nhiều mà lại còn ngắn gọn ạ. Hầu hết các ứng dụng điều tận dụng các hàm API có sẳn trong Windows để chạy cho nhẹ thay vì viết thêm hàm khác. Cách của bạn cũng là 1 cách hay nhưng nó ngắn ngọn khi bạn lập trình chứ không ngắn gọn khi chạy ứng dụng - đây mới là cái quan trọng. Khi chạy ứng dụng, khi cần hiện thông báo lỗi, hàm Msgbox của bạn sẽ phải thực hiện thêm công đoạn gọi hàm chuyển chuỗi mà bạn viết sang charcode, lưu xuống memory rồi mới câu móc hiển thị ra Msgbox, mỗi lần chạy là mỗi lần chuyển đổi. Còn các hàm hiện thông báo TV hiện tại mọi người đang sử dụng là người lập trình mất thời gian một lần chuyển đổi sang charcode trước ở lúc lập trình sau đó ứng dụng khi chạy không cần chuyển đổi nữa. Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake! ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ Website Find Reply Bienxanh Access Nhập Môn Bài viết: 5 Chủ đề: 1 Tham Gia: 30-03 -20 Điểm danh tiếng: 0 Tiền Access: 189.20Ac$ #7 30-04-20, 08:01 PM (30-04-20, 08:52 AM)ongke0711 Đã viết: (30-04-20, 07:35 AM)Bienxanh Đã viết: Không biết sử dụng thư viện API có nặng gì không ạ? Em có đang sử dụng 1 hàm cũng khá hay em chỉ cần viết "chafo casc bajn" thì nó tự convert thành tiếng việt rồi ạ. Và như thế em cũng thấy khá nhanh khi code đỡ phải thao tác nhiều mà lại còn ngắn gọn ạ. Hầu hết các ứng dụng điều tận dụng các hàm API có sẳn trong Windows để chạy cho nhẹ thay vì viết thêm hàm khác. Cách của bạn cũng là 1 cách hay nhưng nó ngắn ngọn khi bạn lập trình chứ không ngắn gọn khi chạy ứng dụng - đây mới là cái quan trọng. Khi chạy ứng dụng, khi cần hiện thông báo lỗi, hàm Msgbox của bạn sẽ phải thực hiện thêm công đoạn gọi hàm chuyển chuỗi mà bạn viết sang charcode, lưu xuống memory rồi mới câu móc hiển thị ra Msgbox, mỗi lần chạy là mỗi lần chuyển đổi. Còn các hàm hiện thông báo TV hiện tại mọi người đang sử dụng là người lập trình mất thời gian một lần chuyển đổi sang charcode trước ở lúc lập trình sau đó ứng dụng khi chạy không cần chuyển đổi nữa. Vâng đúng là sẽ có ưu nhược điểm riêng của nó. Tại em k nhận thấy sự chậm chạp nên cũng k thấy rõ à Chữ ký của Bienxanh Bienxanh,gia nhập Thủ Thuật Access từ 30-03 -20. Website Find Reply |