Delphi ResourceString的用法
在Delphi編程的那段“古老”的日子里(就是在版本4之前),在程序中使用字符串有兩個基本的方法。你可以使用字符串將它們嵌入到源程序中,例如:
MessageDlg( 'Leave your stinkin' mitts off that button, fool!',mtError, [mbOK], 0);
或者,你可以創(chuàng)建一個文本文件(使用.rc擴展名),例如:
STRINGTABLE DISCARDABLE
{
1 "Dialog Expert"
2 "Dialog Expert from demonstration Expert DLL."
3 "Application Expert"
4 "Application Expert from demonstration Expert DLL"
5 "&Create"
6 "&Next"
7 "An application name is required!"
8 "The application name is not a valid identifier."
9 "The path entered does not exist."
10 MAIN.PAS"
11 "MAIN.DFM"
12 "MAIN.TXT"
...
// Variable names.
20 "StatusLine"
...
}
然后你需要做的工作是將它編譯成為資源文件,加入到Delphi的工程或者單元中,使用命令行工具Brcc32.exe編譯,然后在程序中當(dāng)你使用到這些字符串時,使用LoadStr等函數(shù)將它們從資源中提取出來。這看起來有點麻煩,而且你可能會被困在這麻煩的操作中,因此你可能會無休止地將字符串加入到你的源代碼中而不是使用資源。
現(xiàn)在,resourcestring關(guān)鍵字的出現(xiàn),可以幫助你擺脫這麻煩的工作。resourcestring帶給我們兩個好處:可以簡單地加入字符串,而且所有的字符串集中保存在同一個位置;同時,使用resourcestring提供更好的內(nèi)存管理,因為所有在resourcestring部分的字符串是以資源形式保存在應(yīng)用程序中。
讓我們趕快進入使用resourcestring關(guān)鍵字的新世界,增加一個單元到你的工程中,名字是ResStrngs(或者其它名字),然后將所有的字符串(特別是那些將會被用戶看到的字符串:列表的內(nèi)容,錯誤消息等等)加入到這個單元的接口(Interface)部分,就像下面一樣:
unit ResStrngs;
interface
resourcestring
// 著名的軍事家
SGeneralElectric = 'General Electric';
SGeneralMills = 'General Mills';
SGeneralUsage = 'General Usage';
SGeneralHospital = 'General Hospital';
SGeneralLedger = 'General Ledger';
SGeneralProtectionFault = 'General Protection Fault';
SGeneralSQLError = 'General SQL Error';
SGeneralLeeSpeaking = 'General Lee Speaking';
SCorporalPunishment = 'Corporal Punishment';
SSgtFury = 'Sgt. Fury';
SSgtCarter = 'Sgt. Carter';
SSgtSchultz = 'Sgt. Schultz';
SSargentShriver = 'Sargent Shriver';
SCaptKangaroo = 'Capt. Kangaroo';
SCaptUnderpants = 'Capt. Underpants';
SColonelKlink = 'Colonel Klink';
SPrivateBenjamin = 'Private Benjamin';
SPrivateProperty = 'Private Property';
SLeftenantDan = 'Leftenant Dan';
SMutineerChristian = 'Mutineer Christian';
SAtlantaHawks = 'Atlanta Hawks';
// 友好的提示
SDontSleepInTheSubwayDarlin =
'Don't sleep in the subway darlin'';
// 你還可以繼續(xù)增加字符串
implementation
end.
在任何可能引用這些字符串的單元的實現(xiàn)(implementation)部分的uses語句中加入此單元。然后,你可以這樣使用這些字符串:
if ItIsPetulasVirtualHusband and HeIsLate then
MessageDlg(SDontSleepInTheSubwayDarlin,
mtInformation, [mbOK], 0);
還有一個例子:Borland/Inprise同樣使用字符串資源,你可以看看..\source\vcl目錄下的consts.pas、dbconsts.pas等文件。
將字符串集中放在resourcestring部分還有一個好處就是,通常程序員并不是最適合寫用戶將會看到的反饋信息或者錯誤消息的人,他們寫的往往太技術(shù)性,例如:“模塊xyz:生成子線程時發(fā)生一個未預(yù)期錯誤”,這對用戶來說等于沒說,也許“請在開始前保存修改”會更好一些。
將這些消息字符串單獨保存在一個分離的文件中,可以讓那些適合編寫用戶消息的人來處理(當(dāng)然,要有程序員來當(dāng)顧問,以便確定每條消息表示什么含義)。如果你不想讓這些非編程人員來修改你的.pas文件,你可以將這些字符串保存到一個文件文件中交給他們處理,當(dāng)他們處理完成后,你再將他們修改后的字符串復(fù)制到你的resourcestring部分。
最后但是也非常重要的是,當(dāng)把用戶或以看到的字符串都收集在一個地方,可以讓你很容易地讓你的應(yīng)用程序國際化和本地化。使用Delphi的ITE(Integrated Translation Environment 集成翻譯環(huán)境),國際化和本地化你的應(yīng)用程序的字符串幾乎是半自動完成的。使用ITE,你可以為每種語言創(chuàng)建一個獨立的.dll。如果你發(fā)布時帶有多個.dll文件,通過程序運行的計算機系統(tǒng)的地區(qū)號,你的程序可以自動調(diào)用對應(yīng)的.dll。
ITE主要的工具就是資源DLL向?qū)?Resource DLL Wizard) (File | New | Resource DLL Wizard) 和翻譯管理器(Translation Manager)。翻譯管理器用于輸入翻譯的內(nèi)容,可以查看Delphi的幫助文件的"Integrated Translation Environment"部分獲得具體信息。
除Delphin提供的ITE外,還有第三方的相關(guān)工具。我喜歡使用來自 "in the box." 的工具,當(dāng)然,像ITE一樣,只要他工作得好。
總結(jié)
以上是生活随笔為你收集整理的Delphi ResourceString的用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 01XC-1: 动态规划
- 下一篇: AspectJ之@DeclarePare