作者: 餘偉能
日期: 2004-Feb-18
Delphi一直以來都沒有為多國言語(Multiple Language)提供太多的支持, 使應(yīng)用程序難以實(shí)現(xiàn)國際化,當(dāng)要開發(fā)一個(gè)跨國際的應(yīng)用程序時(shí),就遇上重重的困難。作者本人2001年初曾參與編寫一個(gè)電子報(bào)關(guān)的應(yīng)用程序,程序會(huì)用在中國,美國,香港及臺(tái)灣等地,以后還打算用在日本及韓國。這個(gè)時(shí)候,應(yīng)用程序就必須能同時(shí)能輸入多國語言文字,而且能在同一個(gè)操作平臺(tái)輸入多國語言。由于當(dāng)時(shí)剛用Delphi,在多國語言文字方面走了很多的彎路。 Delphi在多國語言上沒有下太多的功夫,所以在開發(fā)多國語言時(shí),就很困難。以前也問過Borland的工程師關(guān)于多國文字的問題,但都隱約其詞??磥?,要實(shí)現(xiàn)這個(gè)功能只能自已想辦法。Microsoft? Word使我對(duì)實(shí)現(xiàn)多國語言有了一線希望,因?yàn)樗軐?shí)現(xiàn)多種語言文字的輸入與打印。
分析:
1.在應(yīng)用程序開發(fā)中,應(yīng)用程序要實(shí)現(xiàn)多國語言,必須用Unicode,因?yàn)橹挥肬nicode才能同時(shí)容納世界上的所有文字的及其內(nèi)碼,才能在同一張窗體上實(shí)現(xiàn)多國語言。
2.它受到操作平臺(tái)的限制。上面說過了,只用Unicode才能實(shí)現(xiàn)多國語言并存的問題, 所以操作平臺(tái)必須以Unicode為基本內(nèi)碼。Microsoft? 的操作平臺(tái)中只有Windows NT?以后版本才支持,所以后面的內(nèi)容都以Windows NT?內(nèi)核技術(shù)平臺(tái)為主。至于Microsoft? Word為什么能在Window9x中實(shí)現(xiàn)多國語言,我現(xiàn)在還不知它搞了什么高招,因?yàn)閃indows9x天生的缺陷與Windows9x將會(huì)被淘汰,所以我不打算在Winows9x上想太多的辦法,這也有可能是Borland不為多國語言做太多的工作的原因。
3.應(yīng)用程序的
數(shù)據(jù)庫必須支持Unicode內(nèi)碼。應(yīng)用輸入的內(nèi)容都會(huì)存到數(shù)據(jù)庫中,所以數(shù)據(jù)庫要用一個(gè)支持Unicode的數(shù)據(jù)庫,否則存入的數(shù)據(jù)將無法讀回多國語言文字(或要花很多工作來完成)。目前全面支持Unicode的主流數(shù)據(jù)庫有Microsoft
access 2000, SQL server 2000,
Oracle 9x,Oracle 9x在建立數(shù)據(jù)庫中必須自定義安裝并選擇內(nèi)碼為Unicode。
4.應(yīng)用程序一般分為輸入界面與報(bào)表。換句話來說,應(yīng)用程序必須能輸入,顯示并打印多國語言文字(同時(shí)容納繁簡英日韓等)。
應(yīng)用程序的Unicode
輸入法。 當(dāng)然, 應(yīng)用程序不必一定要用它。 但在測(cè)試時(shí)必須能在同一個(gè)窗體輸入柜中輸入多國語言文字才能證明程序的可行性?,F(xiàn)在能在繁簡英日韓等
字體中自由轉(zhuǎn)換的輸入法只有Microsoft?微軟拼音輸入法。
分析完后, 應(yīng)用程序必須做以上的準(zhǔn)備工作,我用的是:
1. Microsoft ? Windows 2000
PRofessional
2. Microsoft ? Access database 2000
3. 開發(fā)工具是Broand Delphi 7。
4. 界面控作我用了TNTComponent, 它是改寫了Delphi的控件來支持Unicode, TNTComponent是一個(gè)開源代碼控件, 大家可以放心使用及更改。你可以到:http://home.ccci.org/wolbrink下載并安裝 (因?yàn)樗挠梅ㄅc基本的控件一樣, 所以不再說明用法)。
5. 報(bào)表控件我用的是Qreport 3.6.2, 因?yàn)樗恢С諹nicode, 所在我改寫了它的代碼, 使到它能支持多國語言文字。 本文提供補(bǔ)丁代碼下載 (Http://happy.gsidc.com)。 (因?yàn)镼report是Delphi5, 6時(shí)候Delphi自帶的控件, 本文假設(shè)讀者已會(huì)使用它來打印報(bào)表)。
6. Microsoft?微軟拼音輸入法。 可以到微軟網(wǎng)站免費(fèi)下載。(注:如果要有日語等, 需要下載語言包)
以上準(zhǔn)備工作做好后, 就可以進(jìn)入應(yīng)用程序的開發(fā)過程。
第一個(gè)Hello Unicode.
1. 新建一個(gè)工程。我們需要一個(gè)應(yīng)用程序來運(yùn)行程序, 所以新建一個(gè)工程。
2. 去掉Form1。由于Delphi的Form1是基于一般的單字節(jié)類型來寫的, 所以最好把它去掉。

3. 新建一個(gè)TntForm1, 并加入一個(gè)TntEdit輸入柜和一個(gè)按鈕。安裝完TNTComponent后,
a.) 應(yīng)用程序的新加頁面會(huì)出現(xiàn)TntForm(Unicode)的選項(xiàng), 新建一個(gè)TNTFrom1, 可以更好地控制Unicode。
b.) Delphi的控件面板上會(huì)出現(xiàn)新的TNT控件組頁, 在多國語言應(yīng)用程序開發(fā)中, 建議要用到Unicode輸入或顯示的地方全部都使用此類面板上的控件。
4. 新建一個(gè)報(bào)表窗體, 并加入一個(gè)QRLabel。
5. 編寫窗體代碼。雙系TntForm1上的TntButton1, Users報(bào)表窗體并輸入以下代碼。
6. 測(cè)試及運(yùn)行結(jié)果。在程序中我輸入五種語言字體。如下:
a.) “國”字是繁體
b.) “國”字是簡體
c.) “邨”字是香港特有字,不在繁體字庫中,必須由倉頡等輸入法輸入。
d.) “China”是英文
e.) “の幼兒園 ひまわり”是日本字體
程序結(jié)果證明, 應(yīng)用程序已實(shí)現(xiàn)對(duì)多國應(yīng)用程序的輸入, 顯示及打印功能。下面再來一個(gè)讀寫數(shù)據(jù)(多國字體)到數(shù)據(jù)庫的例子。
一個(gè)與讀寫數(shù)據(jù)數(shù)的應(yīng)用程序。
1. 新建一個(gè)Access數(shù)據(jù)庫。因?yàn)榇死右褦?shù)據(jù)存到數(shù)據(jù)庫中,所以要在開始前新建一個(gè)數(shù)據(jù)庫。
2. 新建一個(gè)工程。我們需要一個(gè)應(yīng)用程序來運(yùn)行程序, 所以新建一個(gè)工程。
3. 去掉Form1。由于Delphi的Form1是基于一般的單字節(jié)類型來寫的, 所以最好把它去掉。
4. 新建一個(gè)TntForm1, 并加入一個(gè)TntEdit輸入柜兩個(gè)按鈕分別為BtnAdd, BtnPreview (一個(gè)是用來增加多國語言文字到數(shù)據(jù)庫, 另一個(gè)是打印據(jù)據(jù)庫內(nèi)容到報(bào)表)。最后填好數(shù)據(jù)庫聯(lián)接并啟到聯(lián)接。 注:安裝完TNTComponent后
f.) 應(yīng)用程序的新加頁面會(huì)出現(xiàn)TntForm(Unicode)的選項(xiàng), 新建一個(gè)TNTFrom1, 可以更好地控制Unicode。
g.) Delphi的控件面板上會(huì)出現(xiàn)新的TNT控件頁, 在多國語言應(yīng)用程序開發(fā)中, 建議要用到Unicode輸入或顯示的地方全部都使用此類面板上的控件。
5. 新建一個(gè)報(bào)表窗體, 并加入一個(gè)QRDBText, 定義QRDBText的字段為上面數(shù)據(jù)庫字段名, 這里是用Contents。
6. 編寫窗體代碼。Users報(bào)表窗體。
a.) 雙系TntForm1上的BtnAdd, 輸入以下代碼。
b.) 雙系TntForm1上的BtnPreview, 輸入以下代碼。
7. 測(cè)試及運(yùn)行結(jié)果。在程序中我輸入五種語言字體。如下:
h.) “國”字是繁體
i.) “國”字是簡體
j.) “邨”字是香港特有字,不在繁體字庫中,必須由倉頡等輸入法輸入。
k.) “China”是英文
l.) “の幼兒園 ひまわり”是日本字體
程序結(jié)果證明, 應(yīng)用程序已實(shí)現(xiàn)對(duì)多國應(yīng)用程序的輸入,讀寫, 顯示及打印功能。
標(biāo)題請(qǐng)注明是: CSDN的朋友。
否則可以會(huì)刪除, 不便之處, 敬請(qǐng)?jiān)彙?