Từ 1 tới 10 trên tổng số 10 kết quả

Đề tài: Bộ gõ tiếng việt bằng c#

  1. #1
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    Mặc định Bộ gõ tiếng việt bằng c#

    Mình muốn làm 1 bộ gõ tiếng việt chơi . Tất nhiên để ngang cơ unikey thì không dám mơ vì không có điều kiện bỏ nhiều thời gian như nó , thuật toán làm không thể nói là đơn giản được , chưa kể bỏ dấu sai thì phiền phức lắm . Tuy nhiên , mình đã tìm được nhân cho bộ gõ , lấy nhân từ scim table (search google thấy liền) mấy hôm mò Ubuntu phát hiện ra , nó là 1 từ điển các nguyên âm đã bỏ dấu sẵn nên hoàn toàn có thể an tâm về chất lượng , đồng thời dùng nó không cần phải lo nghĩ về xử lý dấu luôn .
    Do có 1 số vấn đề với hook (chưa biết xài ) nên mình làm trước bộ gõ cho textbox có hai kiểu telex và vni , bảng mã unicode dựng sẵn . Code thì cực kỳ dễ , đâ là code bộ gõ ngắn nhất từ trước đến nay (85 dòng , còn chưa thèm rút chứ rút phát chỉ 40-50 dòng thôi) , mọi người test thử xem có ổn không . Hiện unikey có vài nhược điểm khi chạy vista 64bit , mình định build 1 cái để dùng cho khu vực này :

    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Text;
    7. using System.Windows.Forms;
    8. using System.IO;
    9.  
    10. {
    11.     public partial class Form1 : Form
    12.     {
    13.         string[] vni1, vni2;
    14.         char c;
    15.         int i, vitri;
    16.         public Form1()
    17.         {
    18.             InitializeComponent();
    19.             vni1 = File.ReadAllLines("vni2.txt");
    20.             vni2 = new string[vni1.Length];
    21.             for (i = 0; i < vni1.Length; i++)
    22.             {
    23.                 vitri = vni1[i].IndexOf('\t');
    24.                 vni2[i] = vni1[i].Substring(vitri + 1);
    25.                 vni1[i] = vni1[i].Substring(0, vitri);
    26.             }
    27.             Array.Sort(vni1, vni2);
    28.         }
    29.  
    30.         private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    31.         {
    32.             c = (char)e.KeyChar;
    33.             txtTam1.Text += c; //o6t
    34.             txtTam2.Text += c; //ôt
    35.             vitri = Array.BinarySearch(vni1, txtTam1.Text);
    36.             if (vitri >= 0)
    37.             {
    38.                 //xoá mấy phần tử đứng trước
    39.                 textBox1.Select(textBox1.SelectionStart - txtTam2.Text.Length + 1, txtTam2.Text.Length - 1);
    40.                 textBox1.SelectedText = "";
    41.                 //thêm từ
    42.                 textBox1.SelectedText = txtTam2.Text = vni2[vitri];
    43.                 e.Handled = true;
    44.             }
    45.             else
    46.             {
    47.                 vitri = ~vitri;
    48.                 if (vni1.Length == vitri || vni1[vitri].IndexOf(txtTam1.Text) != 0)
    49.                 {
    50.                     txtTam1.Text = txtTam2.Text = c.ToString();
    51.                 }
    52.             }
    53.         }
    54.  
    55.         private void radioButton2_CheckedChanged(object sender, EventArgs e)
    56.         {
    57.             if (radioButton2.Checked == true)
    58.             {
    59.                 vni1 = File.ReadAllLines("vni2.txt");
    60.                 vni2 = new string[vni1.Length];
    61.                 for (i = 0; i < vni1.Length; i++)
    62.                 {
    63.                     vitri = vni1[i].IndexOf('\t');
    64.                     vni2[i] = vni1[i].Substring(vitri + 1);
    65.                     vni1[i] = vni1[i].Substring(0, vitri);
    66.                 }
    67.                 Array.Sort(vni1, vni2);
    68.             }
    69.             else
    70.             {
    71.                 vni1 = File.ReadAllLines("telex2.txt");
    72.                 vni2 = new string[vni1.Length];
    73.                 for (i = 0; i < vni1.Length; i++)
    74.                 {
    75.                     vitri = vni1[i].IndexOf('\t');
    76.                     vni2[i] = vni1[i].Substring(vitri + 1);
    77.                     vni1[i] = vni1[i].Substring(0, vitri);
    78.                 }
    79.                 Array.Sort(vni1, vni2);
    80.             }
    81.         }
    82.     }
    83. }
    yêu cầu máy phải có framework 2.0 mới chạy (vista thì không cần)
    Attached Files Attached Files
    Đã được chỉnh sửa lần cuối bởi tienlbhoc : 23-07-2008 lúc 06:56 PM.
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Dr vừa tải về thử và thấy cũng hay lắm, nhưng Dr nghĩ là nếu bạn muốn phát triển hơn thì hãy tham khảo thêm các bài viết về tiếng Việt của tác giả Đặng Trần Hiếu và bộ gõ của him, Dr thấy đó thực sự hữu ích.

    Nếu tiến muốn người khác phát triển mà open-source thì hãy học và tạo Design, Analysis và xây dựng kiến trúc rõ ràng, ... cho dù phần mềm nhỏ. Việc viết code thực sự là việc khá đơn giản và gần cuối cùng của việc phát triển phần mềm.
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  3. #3
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    dr có biết bài đó ở đâu không , search google toàn hướng dẫn cách cài đặt bộ gõ avim thôi
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

  4. #4
    Ngày gia nhập
    03 2008
    Bài viết
    57

    Mình đã tải về và thấy nó cũng hay. Nhưng thấy cái này dựa vào 2 file text vni2.txt và telex2.txt để tra từ vừa gõ vào rồi thay nó với từ có sẵn trong 2 file này. mà mình thấy 2 file này có thể tự tạo bằng tay với unikey hay vietkey 2000 cũng được. --> chạy nền Unikey á !!!!
    Mình vẫn chưa biết cách sử dụng cái mã Unicode mà windows hỗ trợ sẵn. Mình nhớ hình như trong MFC có mấy DLL hỗ trợ việc này. Còn trong C# không rõ lắm. Bác nào biết chỉ với
    Đã được chỉnh sửa lần cuối bởi thanhluan07 : 24-07-2008 lúc 09:49 PM.

  5. #5
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    C# hỗ trợ trực tiếp Unicode, không cần làm bất cứ 1 thao tác nào khác , nên lập trình cứ thế mà xài thôi , đơn giản lắm , ở trên mình đâu có code nào phải dùng để xử lý unicode đâu
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

  6. #6
    Ngày gia nhập
    11 2007
    Bài viết
    153

    Mặc định Bộ gõ tiếng việt bằng c#

    Cũng hay đấy nhỉ mỗi tội nó không nhúng được vào các phần mềm khác để gõ tiếng việt ??? Hay mình nhầm anyway thx!
    ttecak ?

  7. #7
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    chưa nhúng được , mới làm mà , đây làm mục ý tưởng mà , có phải sản phẩm đâu
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

  8. #8
    Ngày gia nhập
    12 2006
    Bài viết
    28

    Thanks!!Mình thấy nó cũng rất bổ ích cho những ai học C Sharp
    bigdog

  9. #9
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    Mình đã làm được thêm tí xíu , đã hook được keyboard : Hook keyboard và mouse hook trong c# không cần code
    Nhưng vẫn chưa biết sendkey unicode (c# chỉ cung cấp hàm sendkey dùng các lĩnh vực kiểu như tổ hợp phím Ctrl+C , Enter thôi ) .
    Nên dùng tạm clipboard. sendkey ctrl+V vào .
    Chỉ gõ được trên notepad và textbox , word không gõ được , openoffice nó báo dữ liệu chưa có định dạng văn bản.
    Đây là chuơng trình của mình (đã cập nhật dữ liệu từ điển vần lên rất nhiều).

    code đây
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Text;
    7. using System.Windows.Forms;
    8. using System.IO;
    9. using gma.System.Windows;
    10.  
    11. namespace TextBoxKey
    12. {
    13.     public partial class Form1 : Form
    14.     {
    15.         string[] vni1, vni2;
    16.         char c;
    17.         int i, vitri;
    18.         string tam;
    19.         UserActivityHook actHook;
    20.         public Form1()
    21.         {
    22.             actHook = new UserActivityHook(false,true);
    23.             actHook.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
    24.             InitializeComponent();
    25.             vni1 = File.ReadAllLines("vni.txt");
    26.             vni2 = new string[vni1.Length];
    27.             for (i = 0; i < vni1.Length; i++)
    28.             {
    29.                 vitri = vni1[i].IndexOf('\t');
    30.                 vni2[i] = vni1[i].Substring(vitri + 1);
    31.                 vni1[i] = vni1[i].Substring(0, vitri);
    32.             }
    33.             Array.Sort(vni1, vni2);
    34.         }
    35.  
    36.         private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    37.         {
    38.             if (e.KeyChar <32)
    39.                 return;
    40.             c = (char)e.KeyChar;
    41.             textBox1.Text += c; //o6t
    42.             textBox2.Text += c; //ôt
    43.             vitri = Array.BinarySearch(vni1, textBox1.Text);
    44.             if (vitri >= 0)
    45.             {
    46.                 //xoá mấy phần tử đứng trước
    47.                 tam = "";
    48.                 for (i = 0; i < textBox2.Text.Length-1; i++)
    49.                     tam += "{BS}";
    50.                 SendKeys.Send(tam);
    51.                 //thêm từ
    52.                 Clipboard.SetText(vni2[vitri] , TextDataFormat.UnicodeText);
    53.                 SendKeys.Send("^V");
    54.                 textBox2.Text = vni2[vitri];
    55.                 e.Handled = true;
    56.             }
    57.             else
    58.             {
    59.                 vitri = ~vitri;
    60.                 if (vni1.Length == vitri || vni1[vitri].ToUpper().IndexOf(textBox1.Text.ToUpper()) != 0)
    61.                 {
    62.                     textBox1.Text = textBox2.Text = c.ToString();
    63.                 }
    64.             }
    65.         }
    66.  
    67.         private void button1_Click(object sender, EventArgs e)
    68.         {
    69.             Application.Exit();
    70.         }
    71.  
    72.         private void radioButton1_CheckedChanged(object sender, EventArgs e)
    73.         {
    74.             if (radioButton1.Checked == true)
    75.             {
    76.                 vni1 = File.ReadAllLines("vni.txt");
    77.                 vni2 = new string[vni1.Length];
    78.                 for (i = 0; i < vni1.Length; i++)
    79.                 {
    80.                     vitri = vni1[i].IndexOf('\t');
    81.                     vni2[i] = vni1[i].Substring(vitri + 1);
    82.                     vni1[i] = vni1[i].Substring(0, vitri);
    83.                 }
    84.                 Array.Sort(vni1, vni2);
    85.             }
    86.             else
    87.             {
    88.                 vni1 = File.ReadAllLines("telex.txt");
    89.                 vni2 = new string[vni1.Length];
    90.                 for (i = 0; i < vni1.Length; i++)
    91.                 {
    92.                     vitri = vni1[i].IndexOf('\t');
    93.                     vni2[i] = vni1[i].Substring(vitri + 1);
    94.                     vni1[i] = vni1[i].Substring(0, vitri);
    95.                 }
    96.                 Array.Sort(vni1, vni2);
    97.             }
    98.         }
    99.     }
    100. }

    Hé hé , bây giờ nó đã run được trên mọi ứng dụng rồi bằng cách thay vì send phím ctrl+V thành phím shift+ insert . Đây có cả soft lẫn mã nguồn luôn
    Text Code:
    1. http://www.mediafire.com/?pacjnhqiywt

    Đã thuần phục được thằng sendkey(tự nhiên khởi động máy lại xong là không thấy sendkey bị sao hết nên dùng luôn) , build thêm bản mới hỗ trợ 2 kiểu là kiểu thường và clipboard , bà con (nhất là ai dùng vista) , xem xem đã chạy ổn chưa . Nếu ổn rồi thì mình sẽ bỏ scim , xây dựng thuật toán đàng hoàng
    Attached Files Attached Files
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

  10. #10
    Ngày gia nhập
    07 2007
    Bài viết
    41

    Lúc đầu nghe ông bảo chưa dùng được sendkeys với unicode, vì không nghĩ có khác biệt nên nãi giờ ngồi code thử, đúng là dùng bình thường.
    Visual C# Code:
    1. StringBuilder sb = new StringBuilder(s.Length);
    2. foreach (char c in s) {
    3.     switch (c)
    4.     {
    5.         case '\r':
    6.          break;
    7.         case '\n':
    8.          sb.Append("{ENTER}");
    9.          break;
    10.         case '\t':
    11.         sb.Append("{TAB}");
    12.         break;
    13.         case '+':
    14.         case '^':
    15.         case '%':
    16.         case '~':
    17.         case '(':
    18.         case ')':
    19.         case '{':
    20.         case '}':
    21.         case ']':
    22.         case '[':
    23.             sb.Append('{');
    24.             sb.Append(c);
    25.             sb.Append('}');
    26.             break;
    27.         default:
    28.             sb.Append(c);
    29.             break;
    30.     }
    31. }
    32.  
    33. System.Windows.Forms.SendKeys.Send(sb.ToString());
    Đã được chỉnh sửa lần cuối bởi zxc : 29-07-2008 lúc 02:45 PM.

Các đề tài tương tự

  1. Giáo viên nhận dạy kèm tiếng anh giao tiếp tại TPHCM hoặc Toeic
    Gửi bởi phi60801530 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 1
    Bài viết cuối: 11-02-2017, 09:10 PM
  2. Trả lời: 0
    Bài viết cuối: 18-04-2012, 12:24 PM
  3. [Kinh nghiệm học tiếng Anh]Học tiếng Anh hiệu quả-English Made Simple!
    Gửi bởi Nhung Tran trong diễn đàn English for IT | Tiếng anh cho dân CNTT
    Trả lời: 5
    Bài viết cuối: 17-12-2010, 10:26 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn