"Delphi之完全漢語"終結版(已於「家用電腦」37期發表,新瓶舊醋請諒解!)
西安梁明
-------------------------------------------------- ------------------------------
本人在寫這篇文章前曾有這樣一個骯髒的念頭:絕對不能把這一招"漏給"別人!但是,良心馬上告訴我,絕對不能有如此的想法!於是立刻把她寫下來,既算是對上次那篇"Delphi之完全漢語"文章的補充,又算是對自己良心的報答吧!
現在切入正題:大家知道,我們在處理Delphi自身的訊息時(我這裡指的是包括Delphi系統對話框、異常提示等所有來自Delphi自身的消息),一般採取的辦法是"走在Delphi的前面" ,或是屏蔽掉系統的作用,從而用我們自己的方式處理,以期達到為用戶提供純漢語環境的目的.然而,這一切只能憑藉程式設計師的已有經驗來主觀預測!由於系統的複雜性以及我們自身的水平所限,這樣作的結果難免會顧此失彼,也許隨時可能發生的問題都處理得不徹底甚至根本就未處理.試想:在用戶使用過程中冒出一些英文的提示,你的程式的"檔次"是不是將大打折扣?
因此,我們還必須去尋找更加理想更加徹底的方法,至少,當讓程序出現Bug時,普通用戶能看懂提示(可不是讓你為所欲為與噢).幸好,經過筆者這一陣的反複試驗,已經找另一個萬全之策.下面就請聽我一一道來(僅限於你的Delphi版本有VCL的源代碼--即專業版或企業版):
0.備份Delphi的VCL原始碼(所在目錄一般為"X:PRogram FilesBorlandDelphi4SourceVcl").當然,根據需要,僅備份我們需要修改的幾個檔案也可;
1.在Delphi環境下開啟VCL目錄下的BdeConst.pas,Consts.pas,BdeConst.pas,DbConsts.pas,midconst.pas,mxConsts.pas,OleConst.pas,WebConst.pas等單元檔案,這些單元檔案定
義了Delphi用到的常數;
2.把Delphi自己定義的字串常數"翻譯"成我們偉大的母語--漢語;
3."翻譯"工作完成後,依原始檔案名稱儲存;
4.現在就來試試我們的成果,新建一個工程,故意編寫一些會出現系統提示的程式碼,並在編譯前,到Delphi的Project Options對話框的Directories/Conditionals頁的Search Path選項下,添加搜索路徑(也即剛才我們修改常數單元所在的目錄),確定後退出;
5.就觀看你的英文翻譯程度吧!
注意:
①如果你的版本為Delphi 3的話,以上的路徑作對應的變化,且Project Options對話框的Directories/Conditionals為Directories;
②對編譯條件的該動只對此工程有效,新建工程後需重新設定.如果你希望一勞永逸的話,請隨我來:
執行Windows登錄編輯程式Regedit.exe,開啟HKEY_CURRENT_USER->Software->Borland->Delphi->4.0->Library,在其中一為"Search path"的串值中加入"$(DELPHI)SourceVCL".Ok ,目的達到!
以下是筆者修改Consts.pas單元檔案中函數MessageDlg的常數後用該函數發送的訊息.這次,我們看到的再也不是半"英"半陽的訊息框了.怎麼樣,夠靚吧?
……
Begin
MessageDlg('感覺如何?'+#13#10#13#10+
'我這裡就是把"SMsgDlgInformation"翻譯為'訊息';'+#13#10+
'把"SOKButton"翻譯為'確定'而得到的結果!',
mtInformation,[mbok],0);
End;
……
****此處插入圖4****
上面的動作是不是太老實了一點?!其實,我們完全可以根據自己的意願來定制這些常量(只要Inprise同意),使其達到一種的特殊效果,比如,我們可以將"SMsgDlgInformation"翻譯為你的軟體標題或自己的工作室名稱等等,如此一來,你的非凡個性將展示無遺!
有關Delphi"完全漢語"方面的經驗、技巧筆者就打算介紹這麼多(等我手上的這兩個程序有交待後我會把這一整套東東放在我的個人主頁上,到時請去Down吧).當然,冠以"完全漢語"實令我臉紅,但本人多麼希望Inprise公司早點結束我們"羨慕"VB程式設計師的時代!
現在還有一些問題,例如:Delphi的環境是英文的,報表預覽的提示及按鈕也是英文的等等.對於第一個問題,我個人認為倒沒有多大必要,因為沒有哪一個程式設計師連菜單都看不懂的,我們努力的目標是用戶;對於第二個問題也有辦法解決,在此本不應該涉及此話題,但我在網上看到有很多人在問這個問題,因此也在此略談一下,作為這個話題的結尾吧:
①依照要求訂好QuickRep的內容;
②仿照QuickRep的預覽模式或自行自訂QRPreview;
③在QuickRep的OnPreview事件中將QuickRep的QRPrinter賦值給QRPreview的QRPrinter
(如QRPreview1.QRPrinter:=Quickrep1.QRPrinter;)即可讓QRPreview取代QuickRep
的預覽模式了.
版主:梁明
日期:1999-03-01
E-mail:[email protected]