MỤC LỤC
Chương 1 Tổng quan đềtài . 12
1.1 Giới thiệu lĩnh vực và ý nghĩa đềtài. 12
1.2 Các kết quảnghiên cứu hiện nay vềlĩnh vực này . 14
1.3 Nội dung nghiên cứu của đềtài . 16
1.4 Tóm tắt kết quảcủa đềtài . 17
1.5 Bốcục luận văn. 18
Chương 2 Hệ điều hành Symbian . 19
2.1 Lịch sử. 19
2.2 Kiến trúc tổng quan của HDH Symbian . 20
2.3 Các đặc tính . 21
2.4 Các thiết kếcủa HDH Symbian . 23
2.5 Kĩthuật chung(Generic Technology-GT) đểphát triển hệ điều hành Symbian . 26
2.5.1Base. 27
2.5.2Framework . 29
2.5.3Communications . 30
2.5.4Messaging . 32
2.5.5Browsing . 32
2.5.6Application Engines. 33
2.5.7Java runtime . 34
2.5.8Connectivity. 35
2.6 Các hàm APIs của HDH Symbian . 36
2.6.1Trao đổi thông điệp. 37
2.6.2TCP/IP và sockets API . 37
2.6.3Communication API(các hàm vềgiao tiếp). 37
2.6.4Các ứng dụng và dịch vụ. 38
2.6.5Symbian là một hệ điều hành đa nhiệm:. 38
2.6.6Các mã lệnh (code) có thểdùng lại được. . 40
Chương 3 Vấn đềvềphát triển ứng dụng trên hệ điều hành Symbian . 41
3.1 Bộnhớtrong Symbian phone . 41
3.2 Kiến trúc của 1 phần mềm trên Symbian. 42
3.2.1Kiến trúc thưviện : (Library Architecture). 42
3.2.2Kiến trúc lớp của ứng dụng : (Application Class Architecture) . 44
3.3 Các ngôn ngữcó thểdùng phát triển ứng dụng trên HDH Symbian . 46
3.3.1Phát triển ứng dụng bằng C++:. 47
3.3.2Phát triển ứng dụng bằng Java . 48
3.3.3Phát triển ứng dụng bằng WAP và HTML: . 49
Chương 4 Xây dựng ứng dụng VNSmartType . 50
4.1 Giới thiệu . 50
4.2 Các chức năng. 50
KHOA CNTT – ĐH KHTN
8
4.3 Kỹthuật chạy nền (Background) . 53
4.4 Kỹthuật bắt phím . 54
4.5 Xửlý Tiếng Việt . 60
4.6 Tổchức lưu trữdữliệu . 64
4.7 Chức năng AutoComplete. 70
4.8 Chức năng AutoCorrect . 72
4.9 Chức năng thêm dấu tự động (Automatic AddAccents). 74
4.10 Chức năng xoá dấu (Remove Accents). 77
4.11 Các chức năng khác . 78
Chương 5 Cài đặt và thửnghiệm . 79
5.1 Tìm hiểu DTDD Nokia 9210 . 79
5.1.1Giới thiệu . 79
5.1.2Các tính năng chính của Nokia: . 80
5.1.3Cấu trúc của Nokia . 81
5.2 Cách biên dịch 1 chương trình. 82
5.3 Cài đặt một chương trình vào Emulator . 83
5.4 Cài đặt một chương trình vào máy Nokia 9210. 84
5.5 Cài đặt & Sửdụng ứng dụng VNSmartType trên máy Nokia 9210 . 85
Chương 6 Tổng kết & Đánh giá . 96
Phần phụlục. 101
A.Tìm hiểu thêm vềNokia 9210 . 101
B.Tiếng Việt Unicode . 116
C. Công cụMEAD(Minimal Eikon Application Development) . 121
D. Công cụMenu Builder. 122
E. Tìm hiểu trình giảlập Symbian 6.0 EPOC . 122
F. Tra cứu API phát triển ứng dụng . 123
G. Hướng dẫn từng bước (Tutorial) . 126
Thuật ngữ131
Tài liệu tham khảo . 133
133 trang |
Chia sẻ: netpro | Lượt xem: 1615 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Luận văn Nghiên cứu hệ điều hành Symbian và xây dựng ứng dụng trên các thiết bị di động Nokia 9210, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
p của ứng dụng
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 3 Vấn đề phát triển ứng dụng trên Symbian
45
Chẳng hạn có CExample- là tên của ứng dụng, được viết bởi lập trình viên. Các lớp
CEik- được cung cấp bởi Uikon Core API. CCoeControl và CCoeAppUi thuộc về
UI Control Framework. CApaDocument và CApaApplication thuộc về AppArc.
Trong đó:
o Lớp application định nghĩa các thuộc tính của ứng dụng: UID, tiêu đề
và tạo mới một document.
o Lớp document trình bày mô hình dữ liệu cho ứng dụng. Trong các
ứng dụng về tập tin, nó thực hiện các thao tác đọc/ghi dữ liệu. Nó tạo
một yêu cầu của tài liệu bằng cách tạo appUI.
o appUi là nơi tập trung các lớp giao diện. Nó tạo và sở hữu các control
để hiển thị dữ liệu, và bắt tất cả các sự kiện từ control.
o AppView có thể xem như là một control để hiện thị dữ liệu và tương
tác người dùng. Một ứng dụng phức tạp có thể có nhiều cách để hiển
thị dữ liệu, do đó sẽ có nhiều view.
Tuy nhiên đối với kiến trúc này thì có một số điểm cần lưu ý khi lập trình :
o Sự phân cách giữa xử lý dữ liệu và hiển thị dữ liệu.
o Sự thống nhất giữa xử lý file và các tài liệu.
o Có thể nhúng ứng dụng khác vào ứng dụng hiện thời.
o Hướng sự kiện.
Như vậy thì cấu trúc của một ứng dụng có thể biểu diễn như trong sơ đồ sau :
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 3 Vấn đề phát triển ứng dụng trên Symbian
46
Hình 3-5 Liên hệ giữa các thành phần trong kiến trúc của ứng dụng
Trình tự thực hiện các thành phần trong ứng dụng là : Application tạo một
document, rồi đến lượt document tạo App UI, AppUI tiếp tục tạo View.
Khi AppUI nhận lệnh (command), AppView nhận và hiển thị dữ liệu. Document
chứa mô hình được hiển thị bởi view.
3.3 Các ngôn ngữ có thể dùng phát triển ứng dụng trên HDH
Symbian
Phần mềm viết trên HDH Symbian, version 6.0 có thể được phát triển bằng 4 ngôn
ngữ:
o EPOC C++ : HDH Symbian được viết bằng C++. Do đó, dùng
EPOC C++ thì rất hiệu quả và có thể truy cập đến tất cả các hàm APIs
mà HDH Symbian có cung cấp.
o Java: Java 2, Micro Edition, với rich profiles. PersonalJava 3.0 bao
gồm trọn bộ đầy đủ hệ quản lý dữ liệu Java và các hàm APIs cho giao
tiếp, đồ họa AWT. JavaPhone 1.0 cung cấp khả năng truy cập ở các
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 3 Vấn đề phát triển ứng dụng trên Symbian
47
thiết bị không dây, chẳng hạn như contacts, schedule, telephony,
power monitoring ….
o WAP: HDH Symbian version 6.0 cài đặt WAP version 1.1
communication stacks và browsers standars
o HTML: trình duyệt web của Symbian version 6.0 cài đặt HTML 3.2
với đầy đủ bộ khung, HTTPS và nhúng Java applets.
3.3.1 Phát triển ứng dụng bằng C++:
Mã nguồn cho 1 project viết bằng C++ bao gồm:
o C++ source file( .cpp, .h)
o tập tin nguồn cho resource của chương trình ( resource files, bitmap,
icons)
o những tập tin hệ thống của project: tập tin chứa thông tin xây dựng
(bld.inf), 1 hay nhiều makefile specifications ( .mmp)
SDK của cả Quartz và Crystal của Symbian cung cấp các công cụ để xây dựng
chương trình bằng C++:
o công cụ xây dựng các makefiles và điều khiển các tác vụ mà được
điều khiển bời tiến trình xây dựng (build process).
o công cụ để chuyển makefile specifications thành makefile hay
workspace của Visual C++ IDE.
o Trình biên dịch GNU C++, phiên bản 98r2, thiết kết riêng cho các yêu
cầu của EPOC và xây dựng các chương trình cho các máy hoạt động
dựa trên ARM.
o Trình biên dịch và chuyển đổi các resources của chương trình
(resource files, bitmap, icons)
o Help compiler
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 3 Vấn đề phát triển ứng dụng trên Symbian
48
o Công cụ trợ giúp thường trú, để chuyển phần trợ giúp viết cho EPOC
R5 thành cho Quartz và Crystal.
o tập tin cài đặt từ hệ thống cài đặt của Symbian.
o App wizard
o GUI icon và application information file builder.
o Perl, ngôn ngữ scripting được dùng bởi rất nhiều công cụ.
Để xây dựng và debug chương trình bằng mày giả lập thì cần phải có Microsoft
Visual C ++,version 6.0.
3.3.2 Phát triển ứng dụng bằng Java
Mã nguồn cho 1 project viết bằng Java bao gồm:
o Java source file( .java)
o Các tập tin cần thiết cho việc xác định ứng dụng sẽ được cài đặt như
thế nào ( .app, .txt)
o Sử dụng JavaDoc cho việc documeting APIs và implemention.
SDK của cả Quartz và Crystal của Symbian cung cấp các công cụ để xây dựng
chương trình bằng Java:
o batch files để xây dựng các tập tin JAR cho các máy giả lập.
o GUI icon và application information file builder.
o GUI icon và application information file builder, như trong C++,
nhưng có hổ trợ riêng cho các yêu cầu của Java.
o tập tin cài đặt từ hệ thống cài đặt của Symbian.
Để xây dựng và debug chương trình bằng mày giả lập thì cần phải có môi trường
lập trình Java chuẩn. Còn để phát triển và debug bằng phương pháp Java nguyên
thủy cần có SDK của Quarzt hay Crystal C++: SDKs cho Java bao gồm phần bổ
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 3 Vấn đề phát triển ứng dụng trên Symbian
49
sung C++ SDKs chứa phần hổ trợ cho build-time của phương phát Java nguyên
thủy. Ta vẫn có thể dùng thư viện của Java mà không cần SDKs của C++.
Ngoài ra, SDKs của quarzt và Crystal cung cấp hổ trợ đầy đủ cho việc xây dựng các
ứng dụng.
3.3.3 Phát triển ứng dụng bằng WAP và HTML:
Cũng có thể nhưng rất hiếm khi dùng 2 ngôn ngữ này để xây dựng phần mềm trên
HDH Symbian.Cách làm cũng giống như C++ và Java:
o viết trang HTML hay WML
o sao chép những trang này đến thư mục thích hợp trong máy giả lập.
o dùng ứng dụng WAP hay WEB trên mày giả lập để biên dịch các
trang này.
o sửa lại cho thật đúng và biên dịch những trang này trên máy giả lập.
o dùng hệ thống cài đặt để cài đặt những trang này trên thiết bị thật.
Thường thì người ta phát triển nội dung HTML và Wap bằng server và sau đó biên
dịch trên thiết bị thật. Các thiết bị dùng HDH Symbian, và máy giả lập đều có thể
nối mạng nội bộ với nhau bằng cách dùng Windows NT Remote Access Services
(RAS), để giảm bớt giá thành kiểm tra và tăng tốc độ kiểm tra lên.
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 4 Xây dựng ứng dụng VNSmartType
50
Chương 4 Xây dựng ứng dụng VNSmartType
4.1 Giới thiệu
Ý tưởng : Như đã đề cập ở chương 1, với các thiết bị cầm tay thông minh như
Pocket PC, smartphone nói chung, hệ điều hành Symbian 6.0 và Nokia 9210 nói
riêng dường như chưa có một ứng dụng hỗ trợ soạn thảo Tiếng Việt hoàn chỉnh.
Một bộ gõ Tiếng Việt, một số chức năng sao cho gõ soạn thảo nhanh chóng tiện lợi
đối với những người sử dụng dạng điện thoại Crystal3 vẫn còn là điều mơ ước. Với
các phím bấm tương đối nhỏ, soạn thảo không thể nhanh, việc có các chức năng hỗ
trợ quả là rất quý giá và tiện lợi vô cùng. Đó là những ý tưởng ban đầu để hình
thành nên VNSmartType. Một bộ gõ Tiếng Việt hoàn chỉnh, không những thế mà
còn là một công cụ hỗ trợ soạn thảo đa dụng, dường như bạn không cần phải gõ
từng chữ một với nhiều dấu rườm rà phức tạp vốn là đặc thù của Tiếng Việt.
4.2 Các chức năng
Trước hết VNSmartType phải là một bộ gõ tiếng việt, tương tự như Vietkey hay
Unikey trên PC. Với vai trò là “một bộ gõ tiếng Việt”, VNSmartType phải hỗ trợ
các kiểu gõ tiếng Việt khác nhau như chúng ta đã biết trên PC, đó là 3 kiểu gõ thông
dụng nhất hiện nay4:
VNI
TELEX
VIQR
Và hỗ trợ toàn bộ bằng bảng mã Unicode (đây có thể xem là một trong những đặc
tính mạnh mẽ của hệ điều hành Symbian 6.0). Với 3 kiểu gõ thông dụng này hầu
3 Dạng điện thoại có phần cứng tương tự máy tính cá nhân
4 Chi tiết về các kiểu gõ xin mời tham khảo phần phụ lục.
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 4 Xây dựng ứng dụng VNSmartType
51
như đã đáp ứng nhu cầu của người dùng, đặc biệt cho người dùng cảm giác gần gũi
với chiếc máy tính cá nhân quen thuộc.
Tuy nhiên, không phải không có những trở ngại, chúng ta hãy xem lại hình minh
hoạ sau đây :
Hình 4-1 DTDD Nokia 9210
Dễ dàng nhận thấy với Nokia 9210, sự hạn chế về các thiết bị là rất rõ ràng: bàn
phím nhỏ, khó bấm, một số nút để soạn thảo nhanh trong PC bị lược bỏ, chính vì
vậy dù đã hỗ trợ soạn thảo tiếng Việt khá hoàn chỉnh thì người dùng vẫn cảm thấy
thật sự khó khăn khi thao tác.
Chính vì vậy, một bộ gõ tiếng Việt cũng chưa thể khắc phục những hạn chế mà thiết
bị đem lại cho người dùng.
Vậy chúng ta cần gì ?
Chúng ta cần một chức năng có khả năng tự động hoàn chỉnh từ khi chúng ta chỉ
đánh một vài từ đầu tiên (AutoComplete). Ví dụ chỉ cần đánh từ “ph” sẽ cho chúng
ta một loạt các từ bắt đầu bằng “ph” như “phở gà”, ”phong thuỷ”, ”phương án”,
”phi vật thể”, ”phiếu thu tiền”…, và chỉ cần nhấn một phím, ta sẽ có được từ mình
mong muốn.
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 4 Xây dựng ứng dụng VNSmartType
52
Chúng ta cần một chức năng có thể viết ra một từ thật dài mà ta thường hay dùng
khi ta chỉ đánh một từ tắt của nó(AutoCorrect), ví dụ chúng ta chỉ cần đánh “it” lập
tức cụm từ “dài ngoằn nghèo” “information technology” hay “Công nghệ thông
tin” sẽ xuất hiện.
Nhận xét : Với 2 chức năng trên, chúng ta cảm thấy vô cùng tiện lợi và không cần
phải gõ quá nhiều, việc này có ý nghĩa thật quan trọng trong thời đại công nghệ hiện
nay khi công việc luôn dồn dập cấp bách và cần sự ngắn gọn, tiện lợi, nhanh chóng.
Tiến xa hơn một bước, với Tiếng Việt chúng ta thường mất công bỏ các loại dấu
khác nhau như huyền, sắc, ngã, hỏi, nặng… Việc ấy càng mất công khi thiết bị cầm
tay vốn là quá nhỏ. Với AutoComplete và AutoCorrect chúng ta không cần đánh
nhiều nhưng chúng ta cũng không thể lưu tất cả những từ của Tiếng Việt được, đó
là chuyện không thể vì hạn chế về bộ nhớ xử lý….
Hai chức năng cơ bản trên chỉ hỗ trợ “những từ chúng ta thường dùng nhất”, xin
nhắc lại “thường dùng nhất” mà thôi chúng ta không thể lạm dụng lưu quá nhiều từ
sẽ dẫn tới xử lý chậm và tốn hao bộ nhớ.
Chính vì vậy VNSmartType hỗ trợ thêm chức năng “tự động thêm dấu văn bản”
(Automatic Add Accents), đây là một chức năng khá thông minh, giúp chúng ta rất
nhiều đặt biệt là khi có sự kết hợp với 2 chức năng hỗ trợ trên. Thử tượng tưởng
thay vì chúng ta gõ “Cộng hoà xã hội chủ nghĩa Việt Nam” chúng ta chỉ cần gõ các
chữ không dấu “Cong hoa xa hoi chu nghia Viet Nam” lập tức câu ấy sẽ được thêm
các dấu Tiếng Việt nhanh chóng.
Có chức năng thêm dấu văn bản thì cũng phải có chức năng xoá dấu văn bản
(Automatic Remove Accents), nhiều người nói rằng chức năng này vô lý quá, vì
người Việt ai cũng muốn đọc văn bản có dấu chứ ai lại muốn đọc văn bản không
dấu bao giờ !
Nhưng hãy nghĩ kỹ ! Với các đời điện thoại di động hiện nay, không phải máy nào
cũng hỗ trợ Unicode, tức là rất nhiều máy không thể hiển thị tin nhắn Tiếng Việt,
chính vì vậy nếu muốn gửi tin nhắn cho các loại máy khác nhau chúng ta nên có
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 4 Xây dựng ứng dụng VNSmartType
53
chức năng thêm dấu cũng như xoá dấu để các máy khác nhau đều nhận được tin
nhắn đó. Càng quan trọng hơn nếu đó là một lời nhắn cấp bách !
Tóm lại : VNSmartType có các chức năng sau đây :
- Bộ gõ Tiếng Việt hoàn chỉnh
- “Bộ tứ” chức năng hỗ trợ thông minh :
o AutoComplete
o AutoCorrect
o Automatic Add Accents
o Automatic Remove Accents
- Cùng với những chức năng người dùng khác như cho phép tìm, thêm xoá,
sửa các từ trong list các từ của các chức năng…..
4.3 Kỹ thuật chạy nền (Background)
Trước hết, một bộ gõ tiếng Việt phải đáp ứng các yêu cầu cần thiết sau :
Chạy đồng thời với các chương trình khác, để bất cứ đang ở ứng dụng soạn thảo nào
có hỗ trợ Unicode đều phát huy tác dụng được.
Bắt được phím bấm của các chương trình khác để từ đó tuỳ biến xử lý hiển thị tiếng
Việt.
Như vậy việc cần làm của chúng ta là phải tìm kiếm API hỗ trợ việc chạy đồng thời
với các chương trình khác (nói ngắn gọn là chạy nền – chạy background) và tìm
cách bắt tất cả các phím của các ứng dụng đồng thời với bộ gõ của chúng ta.
Việc chạy nền không quá khó khăn trong Symbian 6.0 vì hệ điều hành này đã hỗ trợ
các API của lớp CAcitve được cụ thể hoá cho Dialog có tên là CancelDialog đã xây
dựng sẵn. Đây là dialog được xây dựng kế thừa của lớp CActive, đối tượng được
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 4 Xây dựng ứng dụng VNSmartType
54
đóng gói để yêu cầu những dịch vụ không đồng bộ và để bắt tất cả các sự kiện. Sử
dụng CancelDialog nhằm tạo thành 1 long running task dùng để chạy nền.
Đây là một hỗ trợ vô cùng ý nghĩa đối với người lập trình vì các API hỗ trợ trong
Symbian đều rất khó khăn cho người lập trình vì tính phức tạp và khó thử nghiệm,
vì thế việc có sẵn vài lớp và ứng dụng, nhất là những vấn đề liên quan đến tương tác
người dùng là vô cùng quý giá.
Như vậy, chúng ta đã giải quyết được vấn đề thứ nhất là vấn đề chạy background
nhờ sử dụng dialog có sẵn là CancelDialog của Symbian cung cấp.
4.4 Kỹ thuật bắt phím
Như đã nói ở trên, việc bắt các phím của các ứng dụng khác là yêu cầu bắt buộc của
một bộ gõ tiếng Việt.
Symbian cung cấp một tập API phục vụ cho việc xen vào bắt các phím của các ứng
dụng đang chạy, sử dụng cơ chế đồng hành của các tiến trình. Sau đây là một số
khái niệm cũng như tổng quan một số lớp mà chúng ta sử dụng để xử lý bắt phím .
(Chi tiết hơn xin tham khảo phần phụ lục).
Window Server Session
Khi một ứng dụng bắt đầu thì Symbian coi như đó là một session. Sesion này được
quản lý bởi Window Server, do đó Window Server Session chính là nơi lưu trữ các
thông tin về cửa sổ…Để lấy thông tin về cửa sổ ta có thể dùng các lớp thành viên
của Window Server Client Side (tham khảo thêm trong SDK Documentation).
Trong ví dụ này, chúng ta chỉ sử dụng lớp RWsSession và RWindowGroup.5
Window Group
Khi một session bắt đầu thì các cửa sổ được xem như là một Window Group. Để
quản lý các thông tin này Symbian dùng lớp RWindowGroup.
5 Chi tiết hơn xin tham khảo phần Phụ lục – RwsSession , RWindowGroup
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 4 Xây dựng ứng dụng VNSmartType
55
CActive, CActiveScheduler
Một đối tượng được quản lý trong scheduler được gọi là “active object” và lớp để
biểu diễn đối tượng này là CActive. Để diễn tả cho bộ điều phối, Symbian cung cấp
lớp CActiveScheduler6.
Cách bắt phím
Để bắt được phím đầu tiên ta phải lấy được bộ điều phối (scheduler) của Symbian.
Sau đó ta thêm vào scheduler hàm xử lý để bắt tất cả sự kiện phím rồi xử lý. Việc
này cũng tương tự như Hook trên Windows.Để bắt sự kiện phím ta làm những bước
sau :
o Kết nối Window Server Session để lấy các thông tin về các cửa sổ.
o Từ Window Server Session lấy Window Group.
o Từ Window Group ta sẽ “capture” các phím mà cần phải xử lý.
Sau các bước này, khi có sự kiện phím xảy ra mà phím này ta đang “capture” thì
thông điệp này sẽ được gửi đến hàm xử lý. Sau đây là source code minh họa:
// Khai báo lớp CKeyboardScheduler để lấy bộ scheduler.
class CKeyboardScheduler : public CActiveScheduler
{
};
// Khai báo “active object” để chèn đối tượng này vào bộ điều phối (scheduler).
class CLongProcess : public CActive
{
public:
….
6 Chi tiết hơn xin tham khảo phần Phụ lục – CactiveScheduler
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 4 Xây dựng ứng dụng VNSmartType
56
// hàm chính dùng để đăng ký và xử lý
void ConstructL();
void RunL();
void CaptureASCIIiKey();
void CancelCaptureASCIIKey()
;…..
private:
…..
// các biến window server session, window group
RWsSession iWs;
RWindowGroup iWg;
….
}
Sau đây là bản cài đặt hoàn chỉnh :
Void CLongProcess::ConstructL()
{
// con trỏ đến bộ điều phối sẽ lấy được
CKeyboardScheduler* runner;
// Kết nối tới window server
User::LeaveIfError(iWs.Connect());
// Lấy window group của session
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 4 Xây dựng ứng dụng VNSmartType
57
iWg=RWindowGroup(iWs);
// Tạo các thông số cần thiết cho window group
User::LeaveIfError(iWg.Construct((unsigned long)this,EFalse));
// “Capture” các phím cần thiết
CaptureASCIIkeys();
// Lấy bộ điều phối hiện thời, nếu chưa có install mới
if(!CActiveScheduler::Current())
{
Runner=new CKeyboardScheduler();
if (Runner)
CKeyboardScheduler::Install(Runner);
}
else
Runner=(CKeyboardScheduler*)CActiveScheduler::Current();
// Thêm đối tượng của chúng ta vào bộ điều phối.
Runner->Add(this);
}
void CLongProcess::CaptureASCIIKey()
{ int i. j;
// Các phím cần bắt từ FromKey->ToKey
for (i=Fromkey;i<=Tokey;i++)
{
CapturedKeys[j]=iWg.CaptureKey(i,0,0);
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 4 Xây dựng ứng dụng VNSmartType
58
j++;
}
// bắt luôn 2 phím backspace và enter
CapturedKeys[j]=iWg.CaptureKey(8,0,0);
j++;
CapturedKeys[j]=iWg.CaptureKey(13,0,0);
}
void CLongProcess :: CancelCaptureASCIIKey()
{
int i;
for(i=0;i<=NoOfCapturedKeys;i++)
iWg.CancelCaptureKey(CapturedKeys[i]);
}
// Hàm xử lý khi có sự kiện xảy ra
void CLongProcess:RunL()
{
TWsEvent iWsEvent;
int rFocus;
// Lấy thông tin của sự kiện
iWs.GetEvent(iWsEvent);
TInt eventType=iWsEvent.Type();
// lấy window đang được focus
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 4 Xây dựng ứng dụng VNSmartType
59
rFocus=iWs.GetFocusWindowGroup();
// chỉ nhận sự kiện phím
switch (eventType)
{
case EEventKey:
// Đưa về sự kiện phím
TKeyEvent& key = *iWsEvent.Key();
// tạm thời giải phóng các phím để tránh gửi lặp lại
CancelCaptureASCIIKey();
// Xử lý
Xử lý tiếng việt-phần 4
// Kết thúc xử lý, bắt lại các phím
CaptureASCIIkeys();
default:
break;
}
// gửi yêu cầu nhận sự kiện
iWs.EventReady(&iStatus);}
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 4 Xây dựng ứng dụng VNSmartType
60
4.5 Xử lý Tiếng Việt
Chúng ta đã chuẩn bị tất cả, 2 yêu cầu của một bộ gõ ta đã chuẩn bị xong, bây giờ
việc còn lại là xử lý hiển thị tiếng Việt theo bảng mã Unicode.
Phần xử lý tiếng Việt sử dụng một số mảng để lưu trữ các ký tự tiếng Việt, các ký
tự có thể làm thay đổi dấu của kí tự khác theo kiểu đánh Telex7 (các kiểu đánh khác
cũng tương tự nhưng chỉ thay đổi các ký tự làm đổi dấu), và các mảng lưu các ký tự
tiếng việt được phân loại theo dấu của nó.
_ToConvert_ch[NoToConvert]={'a','A','d','D','e','E','o','O','u','U','[',']','f','F','j','J','r','R',
's','S','x','X','z','w','W'};
Mảng vietchars gồm các ký tự: a, â, ă, e, ê, i, o, ô, ơ, u, ư, y; A, Â, Ă, E, Ê, I, O, Ô,
Ơ, U, Ư, Y
int _vietchars[24]= { 97, 226, 259, 101, 234, 105, 111, 244, 417, 117, 432, 121,
65, 194, 258, 69, 202, 73, 79, 212, 416, 85, 431, 89};
Mảng vietsac gồm các ký tự: cũng gồm các ký ở trên nhưng có thêm dấu sắc
int _vietsac[24]= { 225, 7845, 7855, 233, 7871, 237, 243, 7889, 7899, 250, 7913,
253, 193, 7844, 7854, 201, 7870, 205, 211, 7888, 7898, 218, 7912, 221};
Mảng viethuyen gồm các ký tự: cũng gồm các ký ở trên nhưng có thêm dấu huyền
int _viethuyen[24] ={ 224, 7847, 7857, 232, 7873, 236, 242, 7891, 7901, 249,
7915, 7923, 92, 7846, 7856, 200, 7872, 204, 210, 7890, 7900, 217, 7914, 7922};
Mảng vietnang gồm các ký tự: cũng gồm các ký ở trên nhưng có thêm dấu nặng
7 Tham khảo các kiểu đánh tiếng việt và bảng mã Unicode trong phần Phụ lục
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 4 Xây dựng ứng dụng VNSmartType
61
int _vietnang[24]={7841, 7853, 7863, 7865, 7879, 7883, 7885, 7897, 7907, 7909,
7921, 7925,7840, 7852, 7862, 7864, 7878, 7882, 7884, 7896, 7906, 7908, 7920,
7924};
Mảng viethoi gồm các ký tự: cũng gồm các ký ở trên nhưng có thêm dấu hỏi
int _viethoi[24]= { 7843, 7849, 7859, 7867, 7875, 7881, 7887, 7893, 7903, 7911,
7917, 7927, 7842, 7848, 7858, 7866, 7874, 7880, 7886, 7892, 7902, 7910, 7916,
7926};
Mảng vietnga gồm các ký tự: cũng gồm các ký ở trên nhưng có thêm dấu ngã
int _vietnga[24]= {227, 7851, 7861, 7869, 7877, 297, 245, 7895, 7905, 361, 7919,
7929,195, 7850, 7860, 7868, 7876, 296, 213, 7894, 7904, 360, 7918, 928};
Các hàm xử lý
//Hàm này dùng để bắt các ký tự ASCII
void CaptureASCIIkeys();
//Sử dụng hàm này để thôi không bắt các phím, để xử lý vừa nhận được.
void CancelCaptureASCIIKey();
/*Kiểm tra ký tự ch có thể làm thay đổi kí tự trước hay không? Đó là các phím
trong mảng _ToConvert_ch */
bool CanConvertOther(int ch);
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 4 Xây dựng ứng dụng VNSmartType
62
/*Hàm này :
- trả về mảng kí tự tiếng việt mà có dấu do code_type tạo
- nếu code_type là S thì trả về vietsac
- nếu code_type là F thì trả về viethuyen
- nếu code_type là R thì trả về viethoi
- nếu code_type là X thì trả về vietnga
- nếu code_type là J thì trả về vietnang
- nếu code_type là z thì trả về vietchars*/
Int* PtrArray(char code_type):
/*Hàm này:
- trả về vị trí kí tụ buffer trong mảng chữ việt
- lấy ra mảng chữ việt chứa buffer*/
Int InArray(char buffer):
//Hàm này kiểm tra buffer có trong mảng vietchars không
Bool inVietchars(char buffer)
/*Hàm này :
- Chuyển các ký tự đặc biệt của Telex như : [, ], w, W thành chữ ư,ơ
- Các kí tự khác giữ nguyên*/
TInt DirectConvert(char ch);
/*Hàm này :
- kiểm tra xem buffer có làm thay đổi buffer
- trả ra kí tự mới tạo thành và cờ hiệu cho việc có lưu kí tự mới vào buffer không*/
int vietunicode(int buffer,int code_type, int* return_char,bool* isRestore)
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 4 Xây dựng ứng dụng VNSmartType
63
//Hàm này gửi phím đến ứng dụng
void sendkey(int Wgr,TWsEvent iWsEvent, char repeat,int mycode);
//Hàm này Gửi ký tự delete đến ứng dụng
void deletekey(int Wgr,TWsEvent iWsEvent);
Bảng 4-1 Các hàm xử lý của bộ gõ tiếng Việt
Thuật giải
Hình 4-2 Thuật toán của bộ gõ tiếng Việt
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 4 Xây dựng ứng dụng VNSmartType
64
4.6 Tổ chức lưu trữ dữ liệu
Để các chức năng hỗ trợ AutoComplete, AutoCorrect và Add Accents hoạt động ta
phải lưu trữ dữ liệu là những từ do người dùng thêm vào trong quá trình sử dụng để
khi cần có thể đánh nhanh, gõ tắt được.
Cách tốt nhất để lưu trữ đối với các thiết bị di động là phải đảm bảo tính đơn giản
dễ truy xuất và truy xuất phải nhanh chóng.
Lưu trữ vào tập tin nhị phân là cách phù hợp đối với trường hợp Unicode như ứng
dụng này. Ta sẽ lưu trữ vào file nhị phân toàn những số nguyên biểu thị là mã
Unicode của các chữ cái. Lưu trữ 1 từ là việc lưu trữ một dãy số nguyên kết thúc
bằng số đặc biệt -1.
Giả sử lưu trữ chữ “học” ta phải lưu trữ 3 số nguyên biểu thị mã unicode của 3 chữ
cái: “h” “ọ” và “c”, mã của 3 chữ “h”, ”ọ” và “c” lần lượt là 104, 7885, và 99. Như
vậy lưu chữ “học” trong file sẽ lưu theo thứ tự như sau :104 7885 99 -1 với -1 là số
kết thúc của một chữ cần lưu. Cứ như vậy muốn lưu bao nhiêu chữ thì ta lưu lần
lượt như vậy.
Còn phần xử lý chính là chúng ta sẽ lấy các số từ file lên rồi tái tạo lại thành từng từ
theo cấu trúc sau :
struct Word
{
int nChar; //số ký tự chứa trong 1 từ
int charArr[MAXSIZE]; //mảng chứa mã unicode của từng ký tự
}
Chúng ta sẽ tái tạo toàn bộ từ những số lấy từ file và cho vào một mảng gồm các từ
cần dùng và sau này các thao tác tìm, thêm, xoá ...đều chỉ lưu trên mảng.
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 4 Xây dựng ứng dụng VNSmartType
65
Kỹ thuật tổng quát về xử lý file (tập tin) trên Symbian
Vấn đề đầu tiên phải ghi nhận là : việc xử lý file trên hệ điều hành Symbian khó
khăn và phức tạp hơn rất nhiều so với việc xử lý file trên máy tính cá nhân.
Xử lý file trên Symbian phải thông qua 2 giai đoạn chính :
Giai đoạn tạo file : Đây là giai đoạn tạo mới cho file bao gồm việc tạo mới một
file, và tạo “gốc” (root) cho file. Làm việc với file trên Symbian chúng ta cần làm
quen với gốc (root) ,sau này mọi phần tử thêm ,tìm đều xử lý thông qua root này,
với một id cho root được xem là duy nhất. Đoạn code minh hoạ sau sẽ nêu chi tiết
của bước tạo file này.
TParse filestorename;
/* với aName là tên file do ta truyền vào ,ta dùng fsSession là một biến thuộc kiểu
RFs ,làm việc như là một File Server ,dòng lệnh này chịu trách nhiệm phân tích
tên file đưa vào thành file name kiểu TParse để xử lý*/
fsSession.Parse(aName,filestorename);
// Khởi tạo đối tượng lưu trữ file ,dòng code này có nghĩa là tạo file mới với tên
//truyền vào ,nếu file đã tồn tại thì ghi đè.
CFileStore* store = CPermanentFileStore::ReplaceLC(fsSession,
filestorename.FullName(), EFileRead|EFileWrite);
// Bắt đầu thiết lập store root
store->SetTypeL(store->Layout());
/* Tạo luồng cho lớp CItemArray , CItemArray là một lớp kế thừa từ Cbase được
xem như linh hồn của file ,vì nó xử lý tất cả các thao tác như là lưu trữ ,thêm một
item vào root ,xoá một item khỏi root…..*/
TStreamId id=CItemArray::CreateL(*store);
//Tạo id cho root
KH
OA
C
NT
T –
Đ
H
KH
TN
Chương 4 Xây dựng ứng dụng VNSmartType
66
store->SetRoo
Các file đính kèm theo tài liệu này:
- Tìm hiểu về hệ điều hành symbian và cách để xây dựng ứng dụng trên các thiết bị di động.pdf