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

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