Thừa kế Textbox để đánh chữ Việt trong Unicode
Số trang: 8
Loại file: pdf
Dung lượng: 214.11 KB
Lượt xem: 20
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Thừa kế Textbox để đánh chữ Việt Unicode
Lập trình dùng thừa kế
Hết rồi giai đoạn bực mình với VB6 thì sự giới hạn về lập trình theo hướng đối tượng (Object Oriented), .NET cho phép ta tha hồ thừa kế. Do đó, một trong những dự án nho nhỏ đầu tiên của chúng ta là thừa kế từ Textbox bình thường để tạo một Textbox, tạm gọi là vnTextbox, hỗ trợ đánh chữ Việt Unicode theo lối VNI hay VIQR. Dĩ nhiên, ta vẫn tiếp tục giữ các programs bỏ dấu chuyên nghiệp ưng ý của mình như VietKey, UniKey,...
Nội dung trích xuất từ tài liệu:
Thừa kế Textbox để đánh chữ Việt trong Unicode Thừa kế Textbox để đánh chữ Việt Unicode Lập trình dùng thừa kế Hết rồi giai đoạn bực mình với VB6 thì sự giới hạn về lập trình theo hướng đối tượng (Object Oriented), .NET cho phép ta tha hồ thừa kế. Do đó, một trong những dự án nho nhỏ đầu tiên của chúng ta là thừa kế từ Textbox bình thường để tạo một Textbox, tạm gọi là vnTextbox, hỗ trợ đánh chữ Việt Unicode theo lối VNI hay VIQR. Dĩ nhiên, ta vẫn tiếp tục giữ các programs bỏ dấu chuyên nghiệp ưng ý của mình như VietKey, UniKey, VPSKey, .v.v.., nhưng có thể sau nầy sẽ có trường hợp ta cung cấp cho khách hàng một chương trình áp dụng tiếng Việt để họ dùng cho nhu cầu chuyên môn mà không cần phải dùng thêm một program bỏ dấu hỗ trợ. Để tạo một Control thừa kế từ Textbox bạn khởi động một Project mới loại Windows Control Library như sau: Kế đó, khi mở code ra thay thế hai hàng: Public Class UserControl1 Inherits System.Windows.Forms.UserControl bằng hai hàng sau: Public Class vnTextbox Inherits System.Windows.Forms.TextBox Đánh dấu theo lối VNI Ðể đánh dấu cho các nguyên âm chữ Việt, trong vnTextbox ta tạm dùng phương pháp VNI. Tức là ta đánh nguyên âm trước, kế đó ta đánh một con số từ 1 đến 9 để bỏ dấu. Các con số 1..6 theo sau chữ a chẳng hạn, sẽ cho ta các chữ á à ả ã ạ â; số 7 theo sau chữ u sẽ cho ta ư; số 8 theo sau chữ a sẽ cho ta ă; số 9 theo sau chữ d sẽ cho ta đ. Để bỏ hai dấu thì ta dùng hai con số, thí dụ a36 thì sẽ đuợc hiển thị thành ẩ, còn u27 thì sẽ cho ừ. Ðể đánh các chữ đ và Ð ta dùng d9 và D9. Chắc chắn bạn sẽ thấy program nầy đơn sơ quá, nhưng nó sẽ dễ hiểu, và sau đó, nếu thích bạn có thể thêm thắt các chức năng. Để bỏ dấu theo lối VIQR thì thay vì các con số 1,2,3,4,5,6,7,8,9 ta dùng ' ` ? ~ . ^ + (hay *) ( d (hay -). Ðặc biệt control vnTextbox nầy dùng gần như hoàn toàn look-up table để tính ra các nguyên âm có dấu. Trước hết, mỗi khi user đánh một con số từ 1 đến 9, thì program nhìn xem character phía trước cursor (gọi là LastCh) là chữ gì. Kế đó nó tìm đến hàng chữ chứa toàn bộ những nguyên âm có thể thay thế LastCh, tùy theo con số mà user vừa đánh vào. Ở đây kể cả trường hợp user vừa đánh một Backspace. Cái bảng chứa những hàng chữ ấy đuợc chứa trong một array-of-string tên ChList và nó được initialised trong Constructor Sub New của vnTextbox như dưới đây: Private ChList(148) As String ' List of character groups like aáàảãạâ-ă ChList(0) = aáàảãạăắằẳẵặâấầẩẫậeéèẻẽẹêếềểễệiíìỉĩịoóòỏõọôốồổỗộơớờởỡợuúùủũụưứừửữựyýỳỷ ỹỵdđAÁÀẢÃẠĂẮẰẲẴẶÂẤẦẨẪẬEÉÈẺẼẸÊẾỀỂỄỆIÍÌỈĨỊOÓÒỎÕỌÔỐỒỔỖỘƠỚỜỞỠỢUÚÙỦŨỤƯỨỪỬỮỰY ÝỲỶỸỴD ChList(1) = aáàảãạâ-ă ChList(2) = a^àảãạấ-ắ ChList(3) = aá^ảãạầ-ằ ChList(4) = aáà^ãạẩ-ẳ ChList(5) = aáàả^ạẫ-ẵ ChList(6) = aáàảã^ậ-ặ ChList(7) = aắằẳẵặâ-^ ChList(8) = ăắằẳẵặấ-ắ ChList(9) = ăắằẳẵặầ-ằ ChList(10) = ăắằẳẵặẩ-ẳ ChList(11) = ăắằẳẵặẫ-ẵ ChList(12) = ăắằẳẵặậ-ặ ChList(13) = aấầẩẫậ^-ă ChList(14) = âấầẩẫậấ-ắ ChList(15) = âấầẩẫậầ-ằ ChList(16) = âấầẩẫậẩ-ẳ ChList(17) = âấầẩẫậẫ-ẵ ChList(18) = âấầẩẫậậ-ặ ChList(19) = eéèẻẽẹê ChList(20) = e^èẻẽẹế ChList(21) = eé^ẻẽẹề ChList(22) = eéè^ẽẹể ChList(23) = eéèẻ^ẹễ ChList(24) = eéèẻẽ^ệ ChList(25) = eếềểễệ^ ChList(26) = êếềểễệế ChList(27) = êếềểễệề ChList(28) = êếềểễệể ChList(29) = êếềểễệễ ChList(30) = êếềểễệệ . . . ChList(0) chứa toàn bộ các nguyên âm. Tương ứng với mỗi nguyên âm (LastCh) trong ChList(0) là một hàng chứa tất cả mọi chữ có thể đuợc dùng để thay thế LastCh khi user đánh vào một con số 1..9 hay Backspace. Thí dụ nếu LastCh làà, ta sẽ dùng ChList(3), nó chứa các chữ: aá^ảãạầ-ằ Kế đó nếu user đánh số 3 ta sẽ thay thế dấu sắc thành dấu hỏi để có chữ ả. Còn nếu thay vì đánh số 3, user đánh số 8, thì ta sẽ có chữ ằ, tức là thêm dấu ă cho chữ à. Nếu user đánh thêm một số 7 thì character tướng ứng với số 7 trong hàng aá^ảãạầ-ằ là -, hể gặp character - thì ta làm ngơ. Nếu user đánh thêm một số 2 sau chữà bạn sẽ thấy character tướng ứng với số 2 trong hàng aá^ảãạầ-ằ là ^. Điều nầy nhắc ta biết là user đánh a22, nên ta sẽ hiển thị a2. Nếu user đánh Backspace, thay vì một con số, ta sẽ dùng nguyên âm nằm ở đầu a. Như thế nếu LastCh là ẩ, thì sau một Backspace ta có ả, dòng, tức là chữ sau thêm một Backspace kế tiếp ta sẽ còn lại a. Kỹ thuật Program dùng để thay thế LastCh là select (highlight) LastCh rồi Paste nguyên âm mới. Dưới đây là Listing của Function GetToneCharPos() để trả về một giá trị từ 1 đến 9 tượng trưng cho dấu: Private Function GetToneCharPos( ByVal KeyChar As Integer) As Integer ' If Typing stype is VNI, see if user enters 1..9 or d ' If so return 1..9 and also 9 for d. Otherwise return -1 ' ' If Typing stype is VIQR, return 1..9 for characters '`?~.^+(d . Otherwise return -1 ' We also allow for * and - to be same as + and d successively. ' i.e. u+ or u* and dd or d- are OK. GetToneCharPos = -1 If mTypingStyle = VNI Then If (KeyChar = 68) Or (KeyChar = 100) Then ' ie. d for dd or DD GetToneCharPos = 9 ElseIf (KeyChar >= &H31) And (KeyChar If m.Msg 258 Then Return False Const Delay As Integer = 100 ' Obtain the Keystroke character Dim KeyChar As Integer = m.WParam.ToInt32 ' Process a keystroke Dim Pos, ToneCharPos, Offset As Integer Dim NewCh As String If KeyChar = 8 Then ' It's a backspace character If Me.SelectionStart = 0 Then Return True ' Obtain the position of the line containing all possible modified characters Pos = GetLastCharMapPos() ' Select the character just on the left of the cursor Me.SelectionStart -= 1 Me.SelectionLength = 1 If Pos > 0 Then If LastCh ChList(Pos).Substring(0, 1) Then ' Get here if backspace means removing ^ or ', ` etc.. ' Copy the new (modified) character to clipboard, it's the leftmost ' character on the line Clipboard.SetDataObject(ChList(Pos).Substring(0, 1)) ...
Nội dung trích xuất từ tài liệu:
Thừa kế Textbox để đánh chữ Việt trong Unicode Thừa kế Textbox để đánh chữ Việt Unicode Lập trình dùng thừa kế Hết rồi giai đoạn bực mình với VB6 thì sự giới hạn về lập trình theo hướng đối tượng (Object Oriented), .NET cho phép ta tha hồ thừa kế. Do đó, một trong những dự án nho nhỏ đầu tiên của chúng ta là thừa kế từ Textbox bình thường để tạo một Textbox, tạm gọi là vnTextbox, hỗ trợ đánh chữ Việt Unicode theo lối VNI hay VIQR. Dĩ nhiên, ta vẫn tiếp tục giữ các programs bỏ dấu chuyên nghiệp ưng ý của mình như VietKey, UniKey, VPSKey, .v.v.., nhưng có thể sau nầy sẽ có trường hợp ta cung cấp cho khách hàng một chương trình áp dụng tiếng Việt để họ dùng cho nhu cầu chuyên môn mà không cần phải dùng thêm một program bỏ dấu hỗ trợ. Để tạo một Control thừa kế từ Textbox bạn khởi động một Project mới loại Windows Control Library như sau: Kế đó, khi mở code ra thay thế hai hàng: Public Class UserControl1 Inherits System.Windows.Forms.UserControl bằng hai hàng sau: Public Class vnTextbox Inherits System.Windows.Forms.TextBox Đánh dấu theo lối VNI Ðể đánh dấu cho các nguyên âm chữ Việt, trong vnTextbox ta tạm dùng phương pháp VNI. Tức là ta đánh nguyên âm trước, kế đó ta đánh một con số từ 1 đến 9 để bỏ dấu. Các con số 1..6 theo sau chữ a chẳng hạn, sẽ cho ta các chữ á à ả ã ạ â; số 7 theo sau chữ u sẽ cho ta ư; số 8 theo sau chữ a sẽ cho ta ă; số 9 theo sau chữ d sẽ cho ta đ. Để bỏ hai dấu thì ta dùng hai con số, thí dụ a36 thì sẽ đuợc hiển thị thành ẩ, còn u27 thì sẽ cho ừ. Ðể đánh các chữ đ và Ð ta dùng d9 và D9. Chắc chắn bạn sẽ thấy program nầy đơn sơ quá, nhưng nó sẽ dễ hiểu, và sau đó, nếu thích bạn có thể thêm thắt các chức năng. Để bỏ dấu theo lối VIQR thì thay vì các con số 1,2,3,4,5,6,7,8,9 ta dùng ' ` ? ~ . ^ + (hay *) ( d (hay -). Ðặc biệt control vnTextbox nầy dùng gần như hoàn toàn look-up table để tính ra các nguyên âm có dấu. Trước hết, mỗi khi user đánh một con số từ 1 đến 9, thì program nhìn xem character phía trước cursor (gọi là LastCh) là chữ gì. Kế đó nó tìm đến hàng chữ chứa toàn bộ những nguyên âm có thể thay thế LastCh, tùy theo con số mà user vừa đánh vào. Ở đây kể cả trường hợp user vừa đánh một Backspace. Cái bảng chứa những hàng chữ ấy đuợc chứa trong một array-of-string tên ChList và nó được initialised trong Constructor Sub New của vnTextbox như dưới đây: Private ChList(148) As String ' List of character groups like aáàảãạâ-ă ChList(0) = aáàảãạăắằẳẵặâấầẩẫậeéèẻẽẹêếềểễệiíìỉĩịoóòỏõọôốồổỗộơớờởỡợuúùủũụưứừửữựyýỳỷ ỹỵdđAÁÀẢÃẠĂẮẰẲẴẶÂẤẦẨẪẬEÉÈẺẼẸÊẾỀỂỄỆIÍÌỈĨỊOÓÒỎÕỌÔỐỒỔỖỘƠỚỜỞỠỢUÚÙỦŨỤƯỨỪỬỮỰY ÝỲỶỸỴD ChList(1) = aáàảãạâ-ă ChList(2) = a^àảãạấ-ắ ChList(3) = aá^ảãạầ-ằ ChList(4) = aáà^ãạẩ-ẳ ChList(5) = aáàả^ạẫ-ẵ ChList(6) = aáàảã^ậ-ặ ChList(7) = aắằẳẵặâ-^ ChList(8) = ăắằẳẵặấ-ắ ChList(9) = ăắằẳẵặầ-ằ ChList(10) = ăắằẳẵặẩ-ẳ ChList(11) = ăắằẳẵặẫ-ẵ ChList(12) = ăắằẳẵặậ-ặ ChList(13) = aấầẩẫậ^-ă ChList(14) = âấầẩẫậấ-ắ ChList(15) = âấầẩẫậầ-ằ ChList(16) = âấầẩẫậẩ-ẳ ChList(17) = âấầẩẫậẫ-ẵ ChList(18) = âấầẩẫậậ-ặ ChList(19) = eéèẻẽẹê ChList(20) = e^èẻẽẹế ChList(21) = eé^ẻẽẹề ChList(22) = eéè^ẽẹể ChList(23) = eéèẻ^ẹễ ChList(24) = eéèẻẽ^ệ ChList(25) = eếềểễệ^ ChList(26) = êếềểễệế ChList(27) = êếềểễệề ChList(28) = êếềểễệể ChList(29) = êếềểễệễ ChList(30) = êếềểễệệ . . . ChList(0) chứa toàn bộ các nguyên âm. Tương ứng với mỗi nguyên âm (LastCh) trong ChList(0) là một hàng chứa tất cả mọi chữ có thể đuợc dùng để thay thế LastCh khi user đánh vào một con số 1..9 hay Backspace. Thí dụ nếu LastCh làà, ta sẽ dùng ChList(3), nó chứa các chữ: aá^ảãạầ-ằ Kế đó nếu user đánh số 3 ta sẽ thay thế dấu sắc thành dấu hỏi để có chữ ả. Còn nếu thay vì đánh số 3, user đánh số 8, thì ta sẽ có chữ ằ, tức là thêm dấu ă cho chữ à. Nếu user đánh thêm một số 7 thì character tướng ứng với số 7 trong hàng aá^ảãạầ-ằ là -, hể gặp character - thì ta làm ngơ. Nếu user đánh thêm một số 2 sau chữà bạn sẽ thấy character tướng ứng với số 2 trong hàng aá^ảãạầ-ằ là ^. Điều nầy nhắc ta biết là user đánh a22, nên ta sẽ hiển thị a2. Nếu user đánh Backspace, thay vì một con số, ta sẽ dùng nguyên âm nằm ở đầu a. Như thế nếu LastCh là ẩ, thì sau một Backspace ta có ả, dòng, tức là chữ sau thêm một Backspace kế tiếp ta sẽ còn lại a. Kỹ thuật Program dùng để thay thế LastCh là select (highlight) LastCh rồi Paste nguyên âm mới. Dưới đây là Listing của Function GetToneCharPos() để trả về một giá trị từ 1 đến 9 tượng trưng cho dấu: Private Function GetToneCharPos( ByVal KeyChar As Integer) As Integer ' If Typing stype is VNI, see if user enters 1..9 or d ' If so return 1..9 and also 9 for d. Otherwise return -1 ' ' If Typing stype is VIQR, return 1..9 for characters '`?~.^+(d . Otherwise return -1 ' We also allow for * and - to be same as + and d successively. ' i.e. u+ or u* and dd or d- are OK. GetToneCharPos = -1 If mTypingStyle = VNI Then If (KeyChar = 68) Or (KeyChar = 100) Then ' ie. d for dd or DD GetToneCharPos = 9 ElseIf (KeyChar >= &H31) And (KeyChar If m.Msg 258 Then Return False Const Delay As Integer = 100 ' Obtain the Keystroke character Dim KeyChar As Integer = m.WParam.ToInt32 ' Process a keystroke Dim Pos, ToneCharPos, Offset As Integer Dim NewCh As String If KeyChar = 8 Then ' It's a backspace character If Me.SelectionStart = 0 Then Return True ' Obtain the position of the line containing all possible modified characters Pos = GetLastCharMapPos() ' Select the character just on the left of the cursor Me.SelectionStart -= 1 Me.SelectionLength = 1 If Pos > 0 Then If LastCh ChList(Pos).Substring(0, 1) Then ' Get here if backspace means removing ^ or ', ` etc.. ' Copy the new (modified) character to clipboard, it's the leftmost ' character on the line Clipboard.SetDataObject(ChList(Pos).Substring(0, 1)) ...
Tìm kiếm theo từ khóa liên quan:
công nghệ thông tin kỹ thuật máy tính lập trình quản trị mạng tin học vi tínhTài liệu có liên quan:
-
52 trang 469 1 0
-
24 trang 370 1 0
-
Top 10 mẹo 'đơn giản nhưng hữu ích' trong nhiếp ảnh
11 trang 369 0 0 -
96 trang 335 0 0
-
74 trang 329 0 0
-
Đồ án tốt nghiệp: Xây dựng ứng dụng di động android quản lý khách hàng cắt tóc
81 trang 321 0 0 -
Tài liệu dạy học môn Tin học trong chương trình đào tạo trình độ cao đẳng
348 trang 321 1 0 -
Báo cáo thực tập thực tế: Nghiên cứu và xây dựng website bằng Wordpress
24 trang 305 0 0 -
Tài liệu hướng dẫn sử dụng thư điện tử tài nguyên và môi trường
72 trang 304 0 0 -
Giáo trình Hệ thống mạng máy tính CCNA (Tập 4): Phần 2
102 trang 300 0 0