BCB如何加载字符串资源文件(语言资源文件)?

         如何在软件.exe中嵌入语言资源呢。常规的想法是, 将语言字符串放到一个文件中, 然后在程序中去读取。 然而这样做存在一个问题: 最后发布的.exe必须依赖于语言字符串文件, 比如lang.txt.   于是, 我们想, 能不能把这些字符串通过某种方式嵌入到.exe中呢? 这样, 在发布程序的时候, 就不用管语言资源了。

        当然可以, 且看步骤:

1.  建立一个C++ Builder工程, 顺便画出控件布局。

2. 在当前目录下添加资源文件lang_ch.rc和lang_en.rc, 并且要添加到工程中, 便于编译生成应用程序需要的lang_ch.res和lang_en.res.   发布.exe程序的时候, 不需要发布lang_ch.res和lang_en.res, 因为他们已经内嵌在.exe中。

3. 写如下代码, 然后编译连接, 运行。

      

       代码如下:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Label1->Caption = LoadStr(1);  // LoadStr是系统库函数, 此时, 从嵌入.exe中的lang_ch.res中读取字符串
    Label2->Caption = LoadStr(2);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    Label1->Caption = LoadStr(101); 
    Label2->Caption = LoadStr(102);
}
//---------------------------------------------------------------------------

     资源文件lang_ch.rc和lang_en.rc如下:

STRINGTABLE
BEGIN
1 "姓名:"
2 "学号:"
END

STRINGTABLE
BEGIN
101 "Name:"
102 "ID:"
END


      编译连接运行后, 程序可实现双语切换:

BCB如何加载字符串资源文件(语言资源文件)?_第1张图片

你可能感兴趣的:(BCB如何加载字符串资源文件(语言资源文件)?)