• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Từng bước xây dựng bộ gõ Tiếng Việt

Các bài viết hướng dẫn và tham khảo chung, không thuộc ngôn ngữ nào

Điều hành viên: vietluyen

Hình đại diện của người dùng
tuyen_dt18
Guru
Guru
Bài viết: 256
Ngày tham gia: T.Bảy 19/04/2008 8:46 pm
Đến từ: Hưng Yên
Been thanked: 43 time
Liên hệ:

Từng bước xây dựng bộ gõ Tiếng Việt

Gửi bàigửi bởi tuyen_dt18 » T.Năm 19/03/2009 8:49 pm

Tên bài viết: Từng bước xây dựng bộ gõ Tiếng Việt
Tác giả: tuyen_dt18
Cấp độ bài viết: Chưa đánh giá
Tóm tắt:



Sau một thời gian nghiên cứu, và đã cho ra sản phẩm VBKey 1.0, là bộ gõ Tiếng Việt viết bằng ngôn ngữ VB6.0, tôi sẽ đưa ra toàn bộ hiểu biết của mình trong quá trình nghiên cứu, viết ra bộ gõ VBKey cho các bạn phần nào biết về cách lập trình một bộ gõ.
Bài viết của tôi sẽ chia làm 3 Phần.
Phần 1 : Giới thiệu chung về bộ gõ
Phần 2: Thuật toán để lập trình một bộ gõ
Phần 3: Mã nguồn
Sau đây là chi tiết của bài viết.

PHẦN 1 : Giới thiệu chung về bộ gõ Tiếng Việt
Bộ gõ Tiếng Việt cho phép người dùng máy tính bằng cách nào đó sử dụng bàn phím đưa được các ký tự Tiếng Việt hiển thị trên các thiết bị , các chương trình máy tính khác,...
Nguyễn tắc chung của bộ gõ là sử dụng Hook bàn phím - tức là chặn các thông điệp về bàn phím như : trạng thái bàn phím, mã phím , các thông điệp...Sau đó dùng các thuật giải riêng của mình xử lý chuỗi bbooj đẹm đã thu bắt được thành chuỗi Tiếng Việt và xuất ra các thiết bị hay chương trình máy tính khác chuỗi vừa được sử lý.
Một số bộ gõ nổi tiếng đã ra đời như : Unikey, Vietkey, DotnetKey, VBkey, ...

PHẦN 2 : Xây dựng thuật toán để lập trình một bộ gõ

Thuật toán được dựa trên bộ gõ VBKey do tôi lập trình.
( chờ tiếp)


Hỏi ý kiến tác giả trước khi sử dụng hoặc trích dẫn rõ nguồn bài viết khi sử dụng.

Hình đại diện của người dùng
tuyen_dt18
Guru
Guru
Bài viết: 256
Ngày tham gia: T.Bảy 19/04/2008 8:46 pm
Đến từ: Hưng Yên
Been thanked: 43 time
Liên hệ:

Re: Từng bước xây dựng bộ gõ Tiếng Việt

Gửi bàigửi bởi tuyen_dt18 » T.Sáu 20/03/2009 10:10 am

PHẦN II :

Đầu tiên là cách xử lý tổng quát.Hoạt động của một chương trình gõ Tiếng Việt là thu nhận các phím do user gõ vào, sau đó xử lý và cho ra chuỗi đã được xử lý.Cuối cùng là cần phải xuất đến của sổ đang Focus chuỗi đã xử lý đó.Nhưng nếu chỉ xuất thôi thì trong cửa sổ sẽ tồn tại cả chuỗi ban đầu và chuỗi đã xử lý.Vậy nên trước hết phải xóa các ký tự ban đầu đi đã.Sau đó mới xuất chuỗi đã xử lý sau.
Việc xóa chuỗi ban đầu cũng khá phức tạp.Tùy theo mỗi cách lập trình của từng người mà có nhiều cách xử lý.Còn theo cách của tôi, chúng ta sẽ căn cứ vào chuỗi bộ đệm mà ta đã nhận và thêm các ký tự từ bàn phím vào để tìm "từ cuỗi cùng trong chuỗi" để xử lý.Ví dụ ta có được chuỗi bộ đệm như sau : Câu lacj.
Vì từ Câu đã được xử lý rồi nên không phải chạy qua để kiểm tra nữa mà chỉ lấy từ cuối cùng thôi.Đó là chữ lacj.Các bạn có rất nhiều cách để lấy ra từ cuối cùng trong câu.Một cách là ta viết sẵn một hàm luôn cho biết vị trí đầu tiên của từ cuối cùng cuỉa một chuỗi.Sau đó mỗi lúc cần ta gọi hàm và truyền tham số là chuỗi bộ đệm là OK.
Sau đó tùy vào chức năng mỗi hàm, thủ tục mà các bạn cần lấy ra chuỗi nguyên am như thế nào
Ví dụ : Ta có hàm xử lý dấu câu( kiểu Telex) thì mỗi khi ta thu nhặt được một trong các ký tự "f,s,r,x,j" thì ta gọi hàm này
Trong hàm ta cần lấy ra chuỗi nguyên âm để xác định vị trí đặt dấu.Nếu không tìm thấy thì ta chỉ đặt tiếp ký tự nhận được vào bộ đệm.
Nếu tìm thấy ,ví dụ chữ "a" trong ví dụ trên và ta nhận được ký tự gõ là "j".Vì đây là 1 nguyên âm nên tất nhiên đặt dấu ngay tại vị trí của nguyên âm này.Vậy ta được chữ ạ.Ta phải thay chữ "a" trong chuỗi bộ đệm ban đầu bằng "ạ".Sau đó xác định số ký tự cần xóa trong cửa sổ Focus căn cứ vào chuỗi bộ đệm, để sau đó dùng một hàm hay thủ tục giả lập phím back để xóa các ký tự ban đầu trong cửa sổ Focus.
Cụ thể trong ví dụ trên - từ "lacj" và chuỗi bộ đệm là "Câu lacj".Chuỗi có độ dài 8 và vị trí tìm thấy chữ "a" là 6.Vậy số ký phím Back cần nhấn(tức là số ký tự cần xóa ) = độ dài chuỗi bộ đệm trừ đi vị trí chữ "a" (vị trí chữ đầu tiên của chuỗi nguyên am tìm được).Sau khi cho cho ra chuỗi bộ đệm là "Câu lạc" và một chuỗi bộ đệm khác là "ạ" đồng thời ghép nốt các ký tự còn lại sau chữ "a" trong chuỗi bộ đệm vào chuỗi này.Cụ thể là "ạc".Bây giờ ta xóa chuỗi "acj" trong cửa sổ Focus và xuất chuỗi "ạc" đã xử lý . Thế là trong cửa sổ sẽ được chuỗi "Câu lạc".Với tất cả các hàm xử lý các ký tự và kiểu gõ khác cũng tương tự.
(chờ tiếp phần II...)
Hỏi ý kiến tác giả trước khi sử dụng hoặc trích dẫn rõ nguồn bài viết khi sử dụng.


Quay về “Bài viết hướng dẫn”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.0 khách