Xuất kết quả (Hàm Translate)

Một phần của tài liệu Thiết kế từ điển từ công cụ tiếng Việt (Trang 26 - 29)

II. Tra từ

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.

nghệp

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 (adsbygoogle = window.adsbygoogle || []).push({});

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

nghệp

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

nghệp

Ch

Chơng 3ơng 3

Thiết kế giao diện cập nhật

Thiết kế giao diện cập nhật (adsbygoogle = window.adsbygoogle || []).push({});

Để 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)

Hình 2-4. Giao diện cập nhật của từ điển

Một phần của tài liệu Thiết kế từ điển từ công cụ tiếng Việt (Trang 26 - 29)