MỤC LỤC
ĐẶT VẤN ĐỀ 6
PHẦN I. CƠ SỞ LÝ THUYẾT XÂY DỰNG TỪ ĐIỂN TỪ HƯ 9
CHƯƠNG 1. TÌM HIỂU VỀ TỪ ĐIỂN VÀ TỪ HƯ 10
I. Từ điển và vấn đề tin học hóa 10
II. Giải pháp thiết kế giao diện 10
III. Giải pháp xây dựng dữ liệu 13
1. Tổng quát 13
2. Cơ sở dữ liệu của từ điển từ hư 14
3. Xây dựng cơ sở dữ liệu từ vựng cho từ điển từ hư 14
4. Tổ chức dữ liệu 14
5. Xử lý 15
CHƯƠNG 2. LƯU GIỮ CSDL TỪ ĐIỂN TỪ HƯ NHỜ CÁC BỘ CHỮ TIẾNG VIỆT TRONG MÁY TÍNH 17
I. Chọn bộ chữ thích hợp 17
II. Gõ tiếng Việt 17
PHẦN II. THIẾT KẾ CHƯƠNG TRÌNH 19
CHƯƠNG 1. LỰA CHỌN PHẦN MỀM 20
CHƯƠNG 2. THIẾT KẾ GIAO DIỆN CHÍNH 21
I. Các công cụ của giao diện chính 21
1. Nút lệnh tra từ (cmdReference) 21
2. Nút lệnh những từ đã tra (cmdHistory) 22
3. Nút lệnh quay lui (cmdBack) 23
4. Nút lệnh thêm từ vào từ điển (cmdAdd) 23
5. Nút lệnh sửa đổi từ trong từ điển (cmdReplace) 23
6. Nút lệnh xóa từ (cmdRemove) 23
7. Nút lệnh thoát (Exit) 24
II. Tra từ 24
1. Các phương án tra từ 24
2. Xuất kết quả (Hàm Translate) 26
CHƯƠNG 3. THIẾT KẾ GIAO DIỆN CẬP NHẬT 29
1. Nút lệnh thêm nghĩa 29
2. Nút xóa nghĩa 30
3. Nút đánh dấu từ, và tự động đánh dấu từ 31
4. Nút sao lưu kết quả và thoát 31
KẾT QUẢ DEMO 32
I. Cài đặt chương trình: 32
II. Chạy chương trình: 32
KẾT LUẬN 36
PHỤ LỤC 1 GIỚI THIỆU CÁC FONT MÃ TIẾNG VIỆT 37
1. Font mã 1 byte 37
2. Font mã 2 byte 37
3. Font mã tổ hợp 37
4. Font ABC mã TCVN3 - 5712 37
PHỤ LỤC 2. MÃ RTF 39
TÀI LIỆU THAM KHẢO 42
42 trang |
Chia sẻ: netpro | Lượt xem: 1760 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Đồ án Thiết kế từ điển từ hư, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
green0\blue255;
\red0\green120\blue120;
\red255\green0\blue0;}
\deflang2057\pard \par }"
Ch¬ng 2
Lu gi÷ CSDL tõ ®iÓn tõ h nhê c¸c bé ch÷ tiÕng ViÖt trong m¸y tÝnh
I. Chän bé ch÷ thÝch hîp
Do hiÖn nay cã rÊt nhiÒu ph«ng ch÷ (fonts) tiÕng ViÖt ®îc x©y dùng trªn nhiÒu bé m· kh¸c nhau (kh¸c nhau vÒ bytes sö dông lµ 1 hoÆc 2, thø tù dÊu thanh, c¸ch bè trÝ c¸c ký tù...). §Ó tiÖn viÖc chuyÓn ®æi qua l¹i gi÷a c¸c m· sau nµy, chóng ta chän bé m· Telex chØ sö dông c¸c ký tù ASCII chuÈn 7-bits ®Ó biÓu diÓn dÊu tiÕng ViÖt. §Ó nhÊt qu¸n vµ kh«ng mÊt tÝnh tæng qu¸t, ta chän bé m· Telex cò, nghÜa lµ dÊu ph¶i ®i s¸t ngay sau ch÷ (H×nh 1-10).
§Ó hiÓn thÞ ®îc tiÕng viÖt ta chuyÓn ®æi m· nµy thµnh m· ABC theo tiªu chÈn TCVN3 chóng ta tiÕn hµnh qua hai bíc chuÈn_hãa_m· vµ chuyÓn_m·. ChuÈn_hãa_m· cã t¸c dông s¾p xÕp l¹i m· nguån theo ®óng vÞ trÝ c¸c dÊu ph¶i ®Æt ngay sau c¸c ký tù (tøc ph¶i ®óng nh m· Telex cò). ChuyÓn_m· lµm nhiÖm vô chuyÓn m· ®· ®îc chuÈn hãa.
VÝ dô: Côm tõ §¹i häc §µ N½ng cã thÓ gâ lµ: “DDaij hocj DDaf Nawngx”. Khi ®ã chuÈn_hãa_m· lµm nhiÖm vô chuyÓn m· trªn thµnh “DDaji hojc DDaf Nawxng” vµ chuyÓn_m· sÏ chuyÓn m· nµy thµnh “§¹i häc §µ N½ng”.
PhÇn nµy do Hoµng Quèc Th¸i thiÕt kÕ.
IBM
CP 01129
Microsoft
CP 1258
TCVN3
VietWare
BKtpHCM
VISCII
VNI
VietKey
Telex
H×nh 1-10 Bé m· trôc Telex
II. Gâ tiÕng ViÖt
V× tõ ®iÓn d¹ng ViÖt - ViÖt nªn vÊn ®Ò hæ trî gâ tiÕng ViÖt cho ngêi dïng lµ cÇn thiÕt. §Ó ®¬n gi¶n vµ kh«ng mÊt tÝnh phæ biÕn, ë ®©y ta ®a ra ph¬ng ¸n hç trî gâ tiÕng ViÖt theo kiÓu gâ Telex cò, nghÜa lµ ph¶i bá dÊu ngay sau tõ.
VÝ dô: ®Ó vµo dßng ch÷ §¹i häc §µ n½ng ta ph¶i gâ lµ: DDaji hojc DDaf nawxng.
- C¸c phÝm dÊu chØ cã t¸c dông theo ng÷ c¶nh tøc lµ nÕu kh«ng cã nguyªn ©m nµo ®øng tríc th× nã vÉn hiÓn thÞ nh trong chÕ ®é tiÕng Anh, vÝ dô phÝm f nÕu ®i sau ch÷ a th× sÏ thµnh ch÷ µ, cßn nÕu gâ riªng nã vÉn hiÖn ch÷ f.
- Tr¹ng th¸i hoa hoÆc thêng phô thuéc vµo tr¹ng th¸i CapsLock hay Shift cuèi cïng.
VÝ dô:
oO -> ¤
Oo -> «
dD -> §
Dd -> ®
Qui íc, ý nghÜa cña c¸c phÝm:
- f = huyÒn
- s = s¾c
- r = hái
- x = ng·
- j = nÆng
- aa = ©
- ee = ª
- oo = «
- w, uw =
- ow = ¬
- dd = ®
- z = khö dÊu (xo¸ dÊu)
LÆp dÊu:
- ddd = dd
- ooo = oo
- eee = ee
VÝ dô:
Ta gâ dßng ch÷
Níc ch¶y ®¸ mßn
b»ng d·y c¸c phÝm sau:
Nwowsc chary ddas mofn hoÆc
Nuwowsc chary ddas mofn
Chó ý: §Ó biÕt thªm chi tiÕt vÒ font m· tiÕng ViÖt, xin xem phÇn phô lôc 1 Giíi thiÖu c¸c font m· tiÕng ViÖt.
PhÇn II
ThiÕt kÕ ch¬ng tr×nh
Trong phÇn 1, ch¬ng 1, chóng ta ®· ph©n tÝch ®Ó ®a ra gi¶i ph¸p tèi u ®Ó thiÕt kÕ mét tõ ®iÓn. Trong phÇn nµy, chóng ta sÏ tõng bíc thiÕt kÕ cô thÓ mét tõ ®iÓn nh thÕ vµ thªm c¸c tÝnh n¨ng cña tõ ®iÓn nh: c¸c c«ng cô: tra tõ, liÖt kª nh÷ng tõ ®· tra, quay l¹i tõ ®· tra tríc ®ã, c¸c tÝnh n¨ng cËp nhËt tõ ®iÓn,...; c¸c khung tr¹ng th¸i, híng dÉn ngêi dïng, gióp ®ì,...
Ch¬ng 1
Lùa chän phÇn mÒm
ViÖc lùa chän, ¸p dông c«ng cô lËp tr×nh vµo thiÕt kÕ ch¬ng tr×nh lµ mét trong nh÷ng vÊn ®Ò quan träng, cÇn c©n nh¾c kü lìng, v× nã ¶nh hëng rÊt lín ®Õn kh¶ n¨ng lµm viÖc còng nh hiÖu qu¶ ®¹t ®îc cña c«ng viÖc. Trong lËp tr×nh m¸y tÝnh, sù lùa chän phÇn mÒm phô thuéc vµo kh¶ n¨ng hiÓu biÕt cña tõng ngêi vµ c«ng cô ngêi ®ã sö dông. Do ®ã, viÖc lùa chän phÇn mÒm ®Ó lËp tr×nh lµ mét bíc ®Çu quan träng trong c«ng t¸c lËp tr×nh. C¸c c©u hái ®Æt ra lµ: phÇn mÒm cã l¹c hËu kh«ng ? Nã cã ®Çy ®ñ c«ng cô ®Ó thiÕt kÕ phÇn mÒm kh«ng ? N©ng cÊp ch¬ng tr×nh cã dÔ dµng kh«ng...
HiÖn nay, lËp tr×nh ®îc c«ng nhËn lµ mét bé m«n khoa häc mµ viÖc n¾m v÷ng nã còng chÝnh lµ c¬ së, lµ c©u tr¶ lêi quyÕt ®Þnh cho sù thµnh c«ng cña ch¬ng tr×nh. NÕu ph©n chia theo mÆt øng dông th× lËp tr×nh ®îc chia thµnh hai lo¹i: lËp tr×nh hÖ thèng vµ lËp tr×nh øng dông. §Ó lËp tr×nh øng dông cã thÓ dïng ng«n ng÷ lËp tr×nh hoÆc phÇn mÒm øng dông.
PhÇn mÒm hiÖn nay rÊt ®a d¹ng vµ ph¸t triÓn cao. Tõ c¸c ng«n ng÷ nh Pascal, C, C++,... ®Õn c¸c ng«n ng÷ lËp tr×nh trùc quan nh Visual Basic, Visual C, Visual Java,... TÊt c¶ nh÷ng ng«n ng÷ nµy ®Òu cã nh÷ng thÕ m¹nh riªng cña nã. Tuy nhiªn khi thiÕt kÕ tõ ®iÓn em ®· chän ng«n ng÷ lËp tr×nh Visual Basic trong m«i trêng Windows v× nã cã nh÷ng u ®iÓm sau:
Nh÷ng u ®iÓm cña m«i trêng Windows vµ lËp tr×nh Visual Basic
Visual Basic lµ phÇn mÒm ch¹y trong m«i trêng Windows víi giao diÖn ®îc khai th¸c ë m«i trêng Windows. C¸c Giao diÖn ngêi dïng ®å ho¹, hay GUI (Graphical User Interface) ®· c¸ch m¹ng hãa ngµnh c«ng nghiÖp vi tÝnh. Chóng minh häa cho c©u ng¹n ng÷ “H×nh ¶nh ®¸ng gi¸ ngµn lêi nãi” vÉn ®óng ®èi víi hÇu hÕt ngêi dïng m¸y tÝnh. Thay v× dÊu nh¾c C:\> trong DOS tõng gÆp l©u nay, b©y giê ®îc giíi thiÖu mét mµn h×nh víi ®Çy ®ñ c¸c c«ng cô, nh bµy ra trªn mÆt bµn, víi c¸c ch¬ng tr×nh sö dông mouse vµ menu.
C¸c øng dông Windows thêng cã mét giao diÖn ngêi dïng nhÊt qu¸n. Cã nghÜa lµ ngêi dïng cã thÓ dµnh nhiÒu thêi gian h¬n ®Ó lµm chñ øng dông vµ Ýt mÊt thêi gian quan t©m ®Õn c¸c t¸c dông gâ phÝm trong c¸c menu vµ c¸c hép tho¹i. Cã thÓ nãi víi Visual Basic, viÖc lËp tr×nh díi Windows kh«ng chØ trë nªn hiÖu qu¶ h¬n mµ cßn lý thó h¬n.
Nhîc ®iÓm cña Visual Basic
Visual Basic ®ßi hái mét cÊu h×nh m¸y kh¸ cao. Víi phiªn b¶n 6.0 ®ßi hái ph¶i cã mét chip líp Pentium (166 hay tèt h¬n), vµ Ýt nhÊt 16 MB RAM (vµ 32 MB míi thùc sù tèi thiÓu. Sù cµi ®Æt ®Çy ®ñ phiªn b¶n Visual Basic m¹nh nhÊt, b¶n Enterprise, cã thÓ ®ßi hái ®Õn h¬n 300 MB kh«ng gian ®Üa cøng.
Ch¬ng 2
ThiÕt kÕ giao diÖn chÝnh
I. C¸c c«ng cô cña giao diÖn chÝnh
Tríc hÕt chóng ta h×nh dung l¹i nh÷ng tõ ®iÓn ®· cã tríc ®©y nh tõ ®iÓn L¹c ViÖt, tõ ®iÓn tra cøu Anh - ViÖt, ViÖt - Anh trong English Study,... Tuy chóng cã kh¸c vÒ ng«n ng÷ nhng còng cÇn cã c¸c chøc n¨ng nh vËy ®Ó ®¸p øng ®îc nhu cÇu ngêi dïng tra cøu, cËp nhËt. (Xem h×nh 2-1) C¸c tõ ®iÓn ®· x©y dùng díi ®©y ®Òu tu©n theo c¸c chuÈn vÒ giao diÖn API vµ tÝnh tiÖn lîi cña ngêi dïng.
C¸c nót lÖnh
H×nh 2-1. Giao diÖn chÝnh cña tõ ®iÓn
C¸c nót lÖnh ®iÒu khiÓn, thao t¸c tra tõ trªn tõ ®iÓn
1. Nót lÖnh tra tõ (cmdReference)
§Ó tra mét tõ ngêi dïng cã thÓ nhËp tõ vµo hép tõ khãa sau ®ã nhÊn Enter hoÆc nhÊn vµo nót tra tõ, hoÆc ®óp ®«i chuét vµ tõ ®· liÖt kª trªn danh s¸ch, hoÆc chän tõ trªn danh s¸ch sau ®ã nhÊn vµo nót tra tõ. Nh vËy nót tra tõ nhÊn xuèng t¬ng øng víi nhÊn Enter khi ta ®ang nhËp tõ vµo hép tra tõ, vµ còng t¬ng øng víi ®óp ®«i chuét vµo danh s¸ch c¸c tõ khãa khi ta ®ang chän tõ trªn danh s¸ch. Ngoµi ra, nÕu ta ®ang ë trong danh s¸ch nh÷ng tõ ®· tra (xem nót lÖnh nh÷ng tõ ®· tra) th× sù kiÖn nót tra tõ ®îc nhÊn còng chÝnh lµ quay trë vÒ tr¹ng th¸i tra tõ b×nh thêng. Nh vËy ta sö lý sù kiÖn nót tra tõ ®îc nhÊn nh sau, (xem H×nh 2.2)
If
T×m_thÊy_tõ then ®a_kÕt_qu¶_ra_mµn_h×nh
Else
Th«ng_b¸o_lçi
End If
If
ë_tr¹ng_th¸i_nh÷ng_tõ_®·_tra then vÒ_tr¹ng_th¸i_b×nh_thêng
Else
Tra_tõ
End If
H×nh 2-2 ThuËt to¸n xö lý sù kiÖn nót tra tõ ®îc nhÊn
Tr¹ng_th¸i_nh÷ng_tõ_®·_tra lµ tr¹ng th¸i mµ danh s¸ch c¸c tõ khãa ®îc thay b»ng danh s¸ch nh÷ng tõ ®· tra. §iÒu ®ã cã nghÜa lµ thuéc tÝnh Visible cña danh s¸ch tõ khãa ë tr¹ng th¸i Off, cña danh s¸ch nh÷ng tõ ®· tra ë tr¹ng th¸i On.
Tr¹ng_th¸i_b×nh_thêng lµ tr¹ng th¸i ngîc l¹i víi tr¹ng th¸i trªn, tøc thuéc tÝnh Visible cña danh s¸ch tõ khãa ë tr¹ng th¸i On, cña danh s¸ch nh÷ng tõ ®· tra ë tr¹ng th¸i Off.
Tra_tõ lµ mét hµm thùc hiÖn nhiÖm vô theo thuËt to¸n sau, (xem H×nh 2-3)
H×nh 2-3. ThuËt to¸n m« t¶ hµm tra tõ
Nh vËy ®o¹n m· cña sù kiÖn nót tra tõ ®îc nhÊn (cmdReference_click) nh sau:
Private Sub cmdReference_Click()
If Not txtKey.Enabled Then
txtKey.Enabled = True
lstKey.Visible = True
lstHistory.Visible = False
Else
txtKey.Text = lstKey.Text
Call Translate
End If
End Sub
2. Nót lÖnh nh÷ng tõ ®· tra (cmdHistory)
§Ó gióp ngêi dïng biÕt ®îc m×nh ®· tra nh÷ng tõ nµo vµ cã thÓ xem l¹i nÕu cÇn, ta ®a vµo tõ ®iÓn mét nót lÖnh cmdHistory lµm chøc n¨ng liÖt kª nh÷ng tõ ®· tra. Nh vËy ®Ó biÕt ®îc nh÷ng tõ ®· tra ta ph¶i cã mét danh s¸ch ®Ó lu nã. Mçi khi tra tõ, ta kiÓm tra tõ ®ã cã tån t¹i trong danh s¸ch nh÷ng tõ ®· tra cha, nÕu cha ta bæ xung vµo chóng.
Sù kiÖn nót lÖnh cmdHistory ®îc nhÊn sÏ liÖt kª mét danh s¸ch nh÷ng tõ ®· tra ®· lu ë trªn, ®ång thêi tõ ®iÓn sÏ kh«ng cho phÐp ngêi dïng nhËp tõ cÇn tra vµo hép nhËp tõ mµ chØ cho phÐp chän mét trong nh÷ng tõ ®· tra ®Ó xem l¹i kÕt qu¶ hay nhÊn nót tra tõ ®Ó quay vÒ tr¹ng th¸i b×nh thêng. Cô thÓ ta cã ®o¹n m· lÖnh cña sù kiÖn nót cmdHistory ®îc nhÊn.
Private Sub cmdHistory_Click()
lstKey.Visible = False ‘Cho an danh sach tu khoa
lstHistory.Visible = True ‘Cho hien danh sach History
txtKey.Enabled = False ‘Khong cho phep nhap tu
End Sub
3. Nót lÖnh quay lui (cmdBack)
Mét chøc n¨ng n÷a gióp cho ngêi dïng xem l¹i kÕt qu¶ cña tõ ®· tra kÕ tríc ®ã, tøc lµ quay lui tõ ®· tra võa råi. Ta lu l¹i tÊt c¶ c¸c bíc tra tõ, nghÜa lµ lu c¸c tõ ®· tra theo thø tù thµnh mét danh s¸ch (lstBack). Kh¸c víi danh s¸ch nh÷ng tõ ®· tra ë trªn, ë ®©y danh s¸ch lstBack kh«ng ®îc s¾p xÕp mµ chØ bæ xung ë cuèi, vµ khi bæ xung kh«ng cÇn kiÓm tra ®· cã trong danh s¸ch hay cha. Ta cßn cã thªm mét con trá ®Ó lu vÞ trÝ quay lui. Khi tra tõ, danh s¸ch lstBack ®îc bæ sung ë cuèi ®ång thêi con trá chØ ®Õn cuèi danh s¸ch. Khi quay lui, con trá sÏ gi¶m ®i mét cho ®Õn khi b»ng 0. Trong khi ®ang quay lui, nÕu ta tiÕp tôc tra th× danh s¸ch lstBack vÉn cø bæ sung ë cuèi ®ång thêi con trá l¹i quay l¹i cuèi danh s¸ch.
Nh vËy, nÕu sù kiÖn nót lÖnh cmdBack ®îc nhÊn liªn tiÕp sÏ lÇn lîc gi¶m con trá ®i mét ®ång thêi lÊy tõ trong danh s¸ch lstBack, t¹i vÞ trÝ con trá ra ®Ó tra.
Danh s¸ch lstBack ®îc xãa (Reset) khi ta cËp nhËt tõ ®iÓn - thay ®æi, xãa - ®Ó tr¸nh lçi quay l¹i tõ kh«ng cã trong tõ ®iÓn.
Gièng nh tõ ®iÓn L¹c ViÖt, do cã chøc n¨ng t×m l¹i nh÷ng tõ ®· tra nh ®· m« t¶ trªn nªn ta còng kh«ng cÇn thiÕt kÕ thªm nót lÖnh t×m tõ ®· tra sau ®ã (hay cßn gäi lµ quay tíi).
C¸c nót lÖnh thao t¸c cËp nhËt tõ ®iÓn
4. Nót lÖnh thªm tõ vµo tõ ®iÓn (cmdAdd)
V× mét tõ cã cÊu tróc kh¸ phøc t¹p nªn ta sÏ thiÕt kÕ mét giao diÖn cËp nhËt riªng (xÏ ®îc tr×nh bµy sau). Cho nªn sù kiÖn nót cmdAdd ®îc nhÊn sÏ gäi ®Õn Form cËp nhËt.
5. Nót lÖnh söa ®æi tõ trong tõ ®iÓn (cmdReplace)
Còng nh nót lÖnh thªm tõ, muèn söa ®æi mét tõ trong tõ ®iÓn ta ph¶i ®a cÊu tróc cña tõ ®ã lªn b»ng c¸ch t¸ch chóng ra thµnh tõng nghÜa vµ vÝ dô riªng biÖt, khi ®ã ta sÏ söa trªn tõng thµnh phÇn nµy lµm cho ngêi dïng c¶m thÊy râ rµng, dÓ hiÓu h¬n.
Trêng hîp thªm tõ vµ s÷a ®æi tõ lµ gièng nhau, chØ kh¸c lµ khi thªm tõ tÊt c¶ c¸c trêng trong Form cËp nhËt ®Òu trèng, cßn khi söa ®æi tõ c¸c trêng nµy ®îc n¹p d÷ liÖu theo cÊu tróc cña tõ muèn thay ®æi. Nh vËy sù kiÖn nót cmdReplace ®îc nhÊn còng t¬ng tù nh khi thªm tõ, sÏ gäi ®Õn Form cËp nhËt ®ång thêi ®a cÊu tróc cña tõ ®ã ®Ó Form cËp nhËt n¹p (Load) vµo c¸c trêng cña m×nh. Form cËp nhËt sÏ ®îc tr×nh bµy sau.
6. Nót lÖnh xãa tõ (cmdRemove)
Trong qu¸ tr×nh cËp nhËt tõ nÕu ngêi dïng thÊy mét tõ nµo ®ã bÞ sai, cã thÓ xãa chóng ®i b»ng c¸ch chän tõ ®ã trªn danh s¸ch c¸c tõ khãa råi nhÊp vµo nót Remove sÏ xãa tõ ®ã trong ®èi tîng tõ ®iÓn (Dictionary) ®ång thêi còng xãa trong danh s¸ch c¸c tõ khãa
Nh vËy ®Ó xãa mét tõ, tríc hÕt ta ph¶i kiÓm tra tõ ®îc chän xãa lµ tõ nµo. Khi kh«ng cã tõ nµo ®îc chän th× danh s¸ch c¸c tõ khãa (lstKey) cã lstKey.ListIndex = -1, cßn khi cã tõ ®îc chän th× lstKey.ListIndex sÏ nhËn gi¸ trÞ lµ vÞ trÝ dßng chän t¬ng øng. LstKey.ListIndex sÏ nhËn gÝ trÞ tõ 0 ®Õn sè lîng tõ trõ 1 (lstKey.ListCount - 1). Nh vËy sau khi xãa tõ trong danh s¸ch ta ph¶i ®Æt l¹i dßng chän. Vµ còng kh«ng lo¹i trõ trêng hîp khi kh«ng cßn tõ nµo trong danh s¸ch n÷a th× ngng kh«ng cho xãa tiÕp ®ång thêi kh«ng cho chøc n¨ng söa ®æi tõ ho¹t ®éng. Sau ®©u lµ ®o¹n m· cña sù kiÖn nót cmdRemove ®îc nhÊn:
Private Sub cmdRemove_Click()
If lstKey.ListIndex -1 Then ‘Kiem tra tu co duoc chon khong
temp = lstKey.ListIndex ‘Luu vi tri ban dau
If lstKey.ListCount > 0 Then
d.Remove (LCase(lstKey.Text)) ‘Xoa tu trong tu dien
lstKey.RemoveItem (lstKey.ListIndex)’ Xoa tu trong
’ danh sach
End If
'Dat lai dong chon
If temp > 0 Then
lstKey.Selected(temp - 1) = True
Else: If lstKey.ListCount > 0 Then lstKey.Selected(0)=True
End If
If lstKey.ListCount = 0 Then
cmdRemove.Enabled = False
cmdReplace.Enabled = False
End If
Change = True
End If
End Sub
7. Nót lÖnh tho¸t (Exit)
Khi tho¸t khái tõ ®iÓn, nÕu trong qu¸ tr×nh sö dông ngêi dïng cã thay ®æi (thªm tõ, söa ®æi tõ, xãa tõ) th× tõ ®iÓn sÏ nh¾c nhë ngêi dïng cã ghi l¹i kÕt qu¶ ®· söa ®æi hay kh«ng. Chän cã ®Ó ghi l¹i råi tho¸t, kh«ng ®Ó tho¸t kh«ng ghi l¹i, bá qua ®Ó bá qua kh«ng tho¸t.
II. Tra tõ
1. C¸c ph¬ng ¸n tra tõ
Cã nhiÒu c¸ch ®Ó tra mét tõ (xem phÇn nót lÖnh tra tõ), tuy nhiªn c¸ch phæ biÕn nhÊt vÉn lµ nhËp tõ vµo hép nhËp tõ sau ®ã nhÊn Enter ®Ó tra. ë ®©y ta xÐt kü h¬n vÒ ph¬ng ph¸p nµy.
§Ó linh ho¹t trong viÖc tra tõ, viÖc nhËp vµo mét tõ ®Ó tra cã thÓ x¶y ra mét trong c¸c ph¬ng ¸n sau:
Ph¬ng ¸n 1. Ngêi dïng nhËp vµo ®Çy ®ñ mét tõ xong nhÊn Enter, tõ ®iÓn sÏ t×m trong danh s¸ch c¸c tõ khãa, nÕu cã sÏ ®a ra kÕt qu¶, cßn kh«ng sÏ th«ng b¸o kh«ng t×m thÊy.
¦u ®iÓm: Thùc hiÖn nhanh v× trong qu¸ tr×nh nhËp tõ kh«ng cã sù t×m kiÕm tõ trong danh s¸ch, chØ khi kÕt thóc nhÊn Enter míi thùc hiÖn t×m kiÕm.
Nhîc ®iÓm: Ngêi dïng ph¶i nhËp hÕt c¶ tõ míi tra, vµ trong qu¸ tr×nh nhËp ngêi dïng kh«ng biÕt tõ ®ã ®· cã trong tõ ®iÓn hay cha, chØ khi nhÊn Enter. Trêng hîp nµy kh«ng phæ biÕn, g©y khã kh¨ng cho ngêi nhËp.
Ph¬ng ¸n 2. Trong khi ngêi dïng nhËp, nÕu tõ ®iÓn t×m thÊy cã tõ ®ã sÏ hiÖn s¸ng dßng chän t¹i danh s¸ch c¸c tõ khãa, cßn kh«ng th× sÏ kh«ng cã dßng chän s¸ng xuÊt hiÖn.
¦u ®iÓm: Cho ngêi dïng biÕt ®îc cã tõ cÇn t×m trong tõ ®iÓn hay kh«ng mµ kh«ng cÇn ph¶i nhÊn Enter míi biÕt. NÕu ngêi dïng kh«ng thÊy cã dßng chän s¸ng trong danh s¸ch tõ khãa nghÜa lµ kh«ng cã tõ ®ã trong tõ ®iÓn.
Nhîc ®iÓm: Ngêi dïng còng ph¶i ®¸nh hÕt tõ míi tra ®îc. Trêng hîp nµy vÉn cßn g©y khã kh¨n.
Ph¬ng ¸n 3. NhËp tõ cÇn tra trong hép nhËp tõ. Mçi khi ngêi dïng gâ vµo mét ký tù, danh s¸ch c¸c tõ sÏ tù ®éng cuén ®Õn ch÷ gièng víi néi dung ngêi dïng gâ vµo nhÊt.
¦u ®iÓm: lµm cho ngêi dïng dÔ dµng t×m ®Õn tõ cÇn t×m mµ kh«ng cÇn ®¸nh hÕt tõ, khi nµo thÊy dßng chän n»m trªn tõ cÇn tra lµ cã thÓ nhÊn Enter ®Ó tra. Trêng hîp nµy sÏ bá qua th«ng b¸o lçi kh«ng t×m thÊy tõ, nghÜa lµ nÕu kh«ng t×m thÊy tõ th× sÏ ®a ra tõ gÇn víi tõ nhËp vµo nhÊt trong danh s¸ch tõ.
Nhîc ®iÓm: Lµm chËm thao t¸c gâ phÝm.
Tuy nhiªn ph¬ng ¸n nµy còng lµ ph¬ng ¸n hay nhÊt mµ nhiÒu tõ ®iÓn ®· lÊy lµ mÆc ®Þnh.
ë ®©y ta ®a c¶ ba ph¬ng ¸n vµo tõ ®iÓn ®Ó cho ngêi dïng tù chän lùa. Trong ®ã, ph¬ng ¸n thø ba vÉn lµ ph¬ng ¸n hay nhÊt ®îc lÊy lµm mÆc ®Þnh. Nh vËy ta sÏ cã mét c«ng t¾c chuyÓn ®æi gi÷a ba ph¬ng ¸n nµy. Xem h×nh 2-2
Ph¬ng ¸n 1
Ph¬ng ¸n 2
Ph¬ng ¸n 3
1
2
3
H×nh 2-2. M« h×nh chuyÓn ®æi ba ph¬ng ¸n tra tõ
§Ó m« t¶ c«ng t¾c chuyÓn ®æi ba ph¬ng ¸n trªn ta thiÕt kÕ mét ®iÒu kiÓm h×nh ¶nh cã h×nh tîng c©y viÕt. Khi c©y viÕt ®Ó ®øng ngßi viÕt lªn trªn hµm ý ta (cÊt viÕt) kh«ng sö dông chÕ ®é tù ®éng dß t×m (ph¬ng ¸n 1). Khi c©y viÕt ®Ó ®øng, ngßi chóc xuèng hµm ý ta (sö dông viÕt) tù ®éng dß t×m tõ (ph¬ng ¸n 3). Cßn khi c©y viÕt n»m ngang tøc n»m gi÷a hai ph¬ng ¸n trªn (ph¬ng ¸n 2).
Khi nhÊp chuét vµo biÓu tîng c©y viÕt nã sÏ chuyÓn ®æi vßng trßn theo ba ph¬ng ¸n (3-2-1). MÆc ®Þnh lµ ph¬ng ¸n 3 tøc c©y viÕt ®Ó ®øng.
2. XuÊt kÕt qu¶ (Hµm Translate)
§Ó hiÓn thÞ tõ ®iÓn víi cÊu tróc nh mét file Word ta ph¶i xö lý chóng th«ng qua ®Þnh d¹ng file rtf (RichText Format) mµ trong Visual Basic ®ã lµ ®èi tîng RichTextBox. Mçi ®èi tîng cã hai trêng d÷ liÖu ®¸ng quan t©m lµ trêng v¨n b¶n (Text) vµ trêng m· ®Þnh d¹ng cho v¨n b¶n ®ã (TextRTF).
VÝ dô ®Ó hiÓn thÞ dßng ch÷ “Dai hoc Da Nang” font = “.vnTime” size=14, mµu ®á ta ph¶i viÕt mét ®o¹n m· nh sau:
{\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fswiss MS Sans Serif;}{\f1\froman\fcharset2 Symbol;}{\f2\fswiss\fprq2 .VnTime;}}
{\colortbl\red0\green0\blue0;\red255\green0\blue0;}
\deflang1033\pard\plain\f2\fs28\cf1 Dai hoc Da Nang
\par }
(Xem phô lôc 2 vÒ ý nghÜa cña c¸c m· rtf)
Nh vËy nÕu d÷ liÖu ®îc lu ë d¹ng file m· rtf th× dung lîng sÏ rÊt lín do ®ã qu¸ tr×nh n¹p d÷ liÖu sÏ chËm. §Ó kh¾c phôc vÊn ®Ò nµy ta chØ lu d÷ liÖu ë d¹ng file v¨n b¶n tøc chØ lu dßng “Dai hoc Da Nang”. Trªn ®ã ta qui ®Þnh thªm c¸c tab ®Þnh d¹ng riªng. Khi ®ã ta sÏ xö lý trªn v¨n b¶n nµy, chØ khi nµo muèn hiÓn thÞ th«ng tin ra mµn h×nh míi chuyÓn file v¨n b¶n ®ã thµnh m· rtf. §iÒu nµy cã nghÜa lµ ta chØ thay c¸c tab ®ã thµnh c¸c ®o¹n m· ®Þnh d¹ng t¬ng øng.
C¸c tab ®Þnh d¹ng ®îc qui ®Þnh nh ë b¶ng díi
Tab
§o¹n m· thay thÕ
Gi¶i thÝch
“$”
"\par \plain\li500\f4\fs24\cf2 "
B¾t ®Çu mét nghÜa
“#”
"\par \plain\li0\f3\fs24\cf1\i "
B¾t ®Çu mét vÝ dô
“^”
"\plain\f4\fs24\cf3 "
B¾t ®Çu ®¸nh dÊu ®á
“~”
"\plain\li0\f3\fs24\cf1\i "
KÕt thóc ®¸nh dÊu ®á thong gi¶i thÝch
“`”
"\plain\f4\fs24\cf2 "
KÕt thóc ®¸nh dÊu ®á trong vÝ dô
Chr(13)
"\par "
Xuèng dßng
Víi b¶ng font vµ b¶ng mµu ®îc ®Þnh nghÜa qua ®o¹n m·:
"{\rtf1\ansi\deff0\deftab720
{\fonttbl
{\f0\fswiss MS Sans Serif;}
{\f1\froman\fcharset2 Symbol;}
{\f2\fswiss MS Sans Serif;}
{\f3\fswiss .VnCourier;}
{\f4\fswiss .VnTeknical;}
{\f5\fswiss .VnTimeH;}}
{\colortbl
\red0\green0\blue0;
\red0\green0\blue255;
\red0\green120\blue120;
\red255\green0\blue0;}
\deflang2057\pard \par }"
§Ó biÕt thªm chi tiÕt ý nghÜa cña c¸c tab ®Þnh d¹ng v¨n b¶n trªn xin xem phÇn cÊu tróc file RTF.
NhiÖm vô cña hµm Translate lµ lÊy tõ trong hép nhËp tõ, t×m nã trong danh s¸ch tõ nÕu cã sÏ ®a ra kÕt qu¶, cßn kh«ng sÏ th«ng b¸o lçi kh«ng t×m thÊy.
Nh vËy c«ng viÖc cña hµm Translate lµ: Tríc hÕt, lo¹i bá c¸c dÊu (“.”, “,”, “:”, “!”,...) cã trong tõ nhËp vµo. Sau ®ã, kiÓm tra cã tån t¹i mét tõ nh vËy trong tõ ®iÓn kh«ng.
NÕu cã, c¸c viÖc ph¶i lµm:
- hiÖn dßng chän s¸ng lªn tõ ®ã trong danh s¸ch tõ
- CËp nhËt tõ ®ã vµo danh s¸ch quay lui (lstBack) (xem phÇn nót lÖnh quay lui)
- KiÓm tra trong danh s¸ch nh÷ng tõ ®· tra, nÕu cha tån t¹i mét tõ nh vËy th× bæ xung vµo danh s¸ch nh÷ng tõ ®· tra.
- Thay tÊt c¶ c¸c tab ®Þnh d¹ng thµnh c¸c ®o¹n m· ®Þnh d¹ng nh b¶ng trªn.
- HiÓn thÞ th«ng tin b»ng c¸ch dïng m·. M· cña th«ng tin hiÓn thÞ bao gåm phÇn ®Þnh nghÜa b¶ng font vµ b¶ng mµu ë trªn sau ®ã lµ phÇn m· ®· ®îc thay thÕ c¸c tab ë bíc kÕ trªn.
Sau ®©y lµ néi dung toµn bé hµm Translate
Public Sub Translate()
txtKey.Text = Trim(txtKey.Text)
txtKey.Text = Replace(txtKey.Text, ".", "")
txtKey.Text = Replace(txtKey.Text, ",", "")
txtKey.Text = Replace(txtKey.Text, ":", "")
txtKey.Text = Replace(txtKey.Text, ";", "")
txtKey.Text = Replace(txtKey.Text, "!", "")
txtKey.Text = Replace(txtKey.Text, "?", "")
txtKey.Text = Replace(txtKey.Text, """", "")
temp$ = LCase(txtKey.Text)
If d.Exists(temp$) Then
i = 0
Do While i < lstKey.ListCount And StrComp(txtKey.Text,
lstKey.List(i), vbTextCompare) > 0
i = i + 1
Loop
If i = lstKey.ListCount Then i = i - 1
lstKey.Selected(i) = True 'Dua con tro ve vi tri cua tu
ReDim Preserve B(BCount) As String
cmdHistory.Enabled = True
cmdReplace.Enabled = True
If BCount > 0 Then
cmdBack.Enabled = True
End If
Current = lstKey.ListIndex ‘dnh dau tu dang tra
‘Bo sung tu vao danh sach quay lui
B(BCount) = Str(Current) & "/" & lstKey.Text
BCurrent = BCount ‘Dua con tro Back den cuoi danh sach
BCount = BCount + 1
‘Bo sung tu vao danh sach nhung tu da tra
If lstHistory.ListCount = 0 Then
lstHistory.AddItem (txtKey.Text)
ReDim Preserve H(0) As Integer
H(0) = lstKey.ListIndex
Else
kt = False
For i = 0 To lstHistory.ListCount - 1
If StrComp(txtKey.Text, lstHistory.List(i)) = 0 Then kt = True
Next i
If Not kt Then
lstHistory.AddItem (txtKey.Text)
ReDim Preserve H(lstHistory.ListCount - 1) As Integer
H(lstHistory.ListCount - 1) = lstKey.ListIndex
End If
End If
‘Hien thi thong tin
rtbEntry.TextRTF = "{\rtf1\ansi\deff0\deftab720
{\fonttbl
{\f0\fswiss MS Sans Serif;}
{\f1\froman\fcharset2 Symbol;}
{\f2\fswiss .VnTimeH;}}
{\colortbl
\red0\green0\blue0;
\red255\green0\blue0;}
\deflang2057\pard "
& "\plain\qr\f2\fs32\cf1\b "
& txtKey.Text & " \par }"
temp$ = d.Item(temp$)
temp$ = Replace(temp$, "|", """")
temp$ = Replace(temp$, "^", "\plain\f4\fs24\cf3 ")
temp$ = Replace(temp$, "`", "\plain\f4\fs24\cf2 ")
temp$ = Replace(temp$, "~", "\plain\li0\f3\fs24\cf1\i ")
temp$ = Replace(temp$, Chr(13), " \par ")
temp$ = Replace(temp$, "#", "\par \plain\li0\f3\fs24\cf1\i ")
temp$ = Replace(temp$, "$", "\par \plain\li500\f4\fs24\cf2 ")
rtbItem.TextRTF = "{\rtf1\ansi\deff0\deftab720
{\fonttbl
{\f0\fswiss MS Sans Serif;}
{\f1\froman\fcharset2 Symbol;}
{\f2\fswiss MS Sans Serif;}
{\f3\fswiss .VnCourier;}
{\f4\fswiss .VnTeknical;}
{\f5\fswiss .VnTimeH;}}
{\colortbl
\red0\green0\blue0;
\red0\green0\blue255;
\red0\green120\blue120;
\red255\green0\blue0;}
\deflang2057\pard "
& temp$ & " \par }"
Else
Form3.Show vbModal, Me
End If
End Sub
Ch¬ng 3
ThiÕt kÕ giao diÖn cËp nhËt
§Ó râ rµng cho ngêi dïng khi cËp nhËt ta t¸ch mét tõ ra thµnh tõng thµnh phÇn riªng biÖt cña nã. Mét tõ cã c¸c thµnh phÇn sau:
- Tõ khãa ®Ó nhËn d¹ng tõ. §îc lu trong mét RichTextBox.
- Gi¶i thÝch bao gåm nhiÒu nghÜa, mçi nghÜa l¹i cã vÝ dô kÌm theo. Do sè lîng c¸c nghÜa lµ kh«ng cè ®Þnh vµ kh«ng giíi h¹n, nªn ta cã thÓ dïng mét danh s¸ch ®Ó lu c¸c nghÜa theo kiÓu chØ sè (nghÜa 1, nghÜa 2,...). Mçi nghÜa l¹i chia ra thµnh hai phÇn gi¶i thÝch vµ vÝ dô. Hai phÇn nµy ®îc ®a ra trong hai RichTextBox. Nh vËy ta cÇn cã c¸c c«ng cô sau: (Xem h×nh 2-4)
C¸c c«ng cô
H×nh 2-4. Giao diÖn cËp nhËt cña tõ ®iÓn
1. Nót lÖnh thªm nghÜa
Qu¸ tr×nh nhËp mét tõ bao gåm: tríc tiªn, nhËp tõ khãa tøc tªn cña tõ ®ã. Sau ®ã, nhËp c¸c nghÜa vµ vÝ dô b»ng c¸ch nhÊn vµo nót thªm nghÜa. Khi ®ã, tõ ®iÓn xÏ thùc hiÖn c¸c ®éng t¸c sau:
- Lu nghÜa tríc ®ã nÕu cã.
- §a tªn nghÜa (nghÜa 1, nghÜa 2,...) míi vµo danh s¸ch nghÜa.
- §a ra hai hép RichTextBox trèng ®Ó nhËp nghÜa vµ vÝ dô míi.
Víi nghÜa ®Çu tiªn sÏ tù ®éng ®a ra, nghÜa lµ nÕu tõ ®ã chØ cã mét nghÜa th× ta sÏ kh«ng nhÊn vµo nót thªm nghÜa.
Sau ®©u lµ ®o¹n m· cña sù kiÖn nót thªm nghÜa ®îc nhÊn:
Private Sub cmdPlus_Click()
‘Luu nghia truoc do
temp = lstMean.ListIndex + 1
If d1.Exists(Str(temp)) Then d1.Remove (Str(temp))
d1.Add Str(temp), rtbMean.Text & "$" & rtbExam.Text
‘Dua them nghia moi vao
lstMean.AddItem ("NghÜa" & Str(lstMean.ListCount + 1))
lstMean.Selected(lstMean.ListCount - 1) = True
‘Dua ra hai hop trong
rtbMean.Text = ""
rtbExam.Text = ""
If Not cmdMinus.Enabled Then cmdMinus.Enabled = True
rtbMean.Enabled = True
rtbMean.SetFocus
End Sub
2. Nót xãa nghÜa
Nót xãa nghÜa ®îc thiÕt kÕ nh»m gióp ngêi dïng lo¹i bá nghÜa khi nhËp sai, hoÆc c¶m thÊy kh«ng cÇn thiÕt. Khi xãa mét nghÜa cã nghÜa lµ ta xãa phÇn m« t¶ nghÜa vµ vÝ dô vÒ nghÜa ®ã. §ång thêi trong danh s¸ch c¸c nghÜa, tÊt c¶ c¸c nghÜa tríc nghÜa bÞ xãa ®îc gi÷ nguyªn. TÊt c¶ c¸c nghÜa ®»ng sau nghÜa bÞ xãa ®îc dêi lªn mét ®¬n vÞ (nghÜa lµ nÕu tríc ®ã lµ NghÜa 4 th× b©y giê sÏ lµ NghÜa 3).
Ta cã ®o¹n m· m« t¶ nót xãa nghÜa ®îc nhÊn nh sau:
Private Sub cmdMinus_Click()
temp = lstMean.ListIndex
If lstMean.ListCount > 0 Then ‘Co nghia duoc chon
If d1.Exists(Str(lstMean.ListIndex + 1)) Then
d1.Remove (Str(lstMean.ListIndex + 1))
End If
lstMean.RemoveItem (lstMean.ListIndex)
End If
i = temp + 2
Do While i <= lstMean.ListCount + 1
lstMean.List(i - 2) = "NghÜa " + Str(i - 1)
If d1.Exists(Str(i)) Then
st$ = d1.Item(Str(i))
d1.Remove (Str(i))
d1.Add Str(i - 1), st$
End If
i = i + 1
Loop
If temp > 0 Then
lstMean.Selected(temp - 1) = True
Else: If lstMean.ListCount > 0 Then
lstMean.Selected(0) = True
End If
End If
Call LoadMean
If lstMean.ListCount = 0 Then
‘Khong con nghia nao ca
cmdMinus.Enabled = False
rtbMean.Enabled = False
rtbExam.Enabled = False
End If
End Sub
3. Nót ®¸nh dÊu tõ, vµ tù ®éng ®¸nh dÊu tõ
Trong tõ ®iÓn, cã nh÷ng tõ kh¸c nhau nhng cã nghÜa gièng nhau nh tõ “hÌn chi”, “hÌn g×”, “hÌn nµo”,... khi ®ã ta chØ cÇn nhËp nghÜa cña mét tõ (vÝ dô tõ “hÌn chi”) cßn nh÷ng tõ kh¸c sÏ trá ®Õn tõ ®· nhËp nghÜa, tøc nghÜa cña chóng sÏ cã d¹ng “xem ...” hay “cã nghÜa nh...” (vÝ dô tõ “hÌn g×” cã nghÜa lµ “xem hÌn chi”). Nh vËy tõ tõ “hÌn chi” trong c©u “xem hÌn chi” cÇn ®îc ®¸nh dÊu ®Ô râ rµng vµ gióp ngêi dïng trá ®Õn tõ “hÌn chi” ®Ó xem kÕt qu¶ (®îc tr×nh bµy trong phÇn tríc). ViÖc ®¸nh dÊu mét tõ ë ®©y ta qui ®Þnh lµ mµu ®á. §Ó khái tèn thªm mét nót xãa ®¸nh dÊu, ta qui ®Þnh nót ®¸nh dÊu lµm chøc n¨ng ®¶o mµu. NghÜa lµ nÕu v¨n b¶n ®îc chän cã mµu b×nh thêng (xanh) th× nót ®¸nh dÊu cã chøc n¨ng ®æi thµnh mµ
Các file đính kèm theo tài liệu này:
- DOAN.DOC
- CHUONGTRINH.rar