Đồ án Thiết kế từ điển từ hư

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

 

doc42 trang | Chia sẻ: netpro | Lượt xem: 1672 | Lượt tải: 2download
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 L­u 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÷ nh­ng 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 ®Ó l­u nã. Mçi khi tra tõ, ta kiÓm tra tõ ®ã cã tån t¹i trong danh s¸ch nh÷ng tõ ®· tra ch­a, nÕu ch­a 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 ®· l­u ë 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 l­u l¹i tÊt c¶ c¸c b­íc tra tõ, nghÜa lµ l­u 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 ch­a. Ta cßn cã thªm mét con trá ®Ó l­u 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× ng­ng 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 ch­a, 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 l­u ë 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Ø l­u d÷ liÖu ë d¹ng file v¨n b¶n tøc chØ l­u 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 ch­a 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 l­u 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 ®Ó l­u 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: - L­u 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 nh­ng 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:

  • docDOAN.DOC
  • rarCHUONGTRINH.rar