{ Title : MutilLanguage Author : Taozhiyu Email : [email protected] Homepage : http://www.angelfire.com/super/taozhiyu }unit MutilLanguage;interfaceuses Registry, Forms, SysUtils, Windows, reinit; function SwichLanguage(AForm : TForm ; Language : string) : boolean; function ReadStr(StringID : integer) : string;implementation{$R Mystr.RES}const ENGLISH = (SUBLANG_ENGLISH_UK shl 10) or LANG_ENGLISH; //参看TaoZhiYu的英文帮助 CHINESE = (SUBLANG_CHINESE_SIMPLIFIED shl 10) or LANG_CHINESE; //定义语言常量 CurrentEnglish = 10; //常量,用于读取资源文件中的字符 CurrentChinese = 20; function WriteRegistry(Name,Value:string):boolean; //向注册表写数据。 var RegisterTemp : TRegistry; begin result := false; RegisterTemp := TRegistry.Create; with RegisterTemp do begin try RootKey:=HKEY_CURRENT_USER; if OpenKey('Software\Borland\Locales',true) then begin WriteString(Name,Value); result := true; end; CloseKey; finally Free; end; end; end;function ReadRegistry(Name : String): string; //从注册表读取数据 var RegisterTemp : TRegistry; begin result := ''; RegisterTemp := TRegistry.Create; with RegisterTemp do begin try RootKey:=HKEY_CURRENT_USER; if OpenKey('Software\Borland\Locales',true) then result:= ReadString(Name); CloseKey; finally Free; end; end end;function CheckCurrentLanguage : integer; //根据从注册表中读取的数据选择英文还是中文。 begin result := 0; if ReadRegistry(Application.ExeName) = 'ENG' then result := CurrentEnglish else result := CurrentChinese; end;function ReadStr(StringID : integer) : string; //从自定义资源文件中读取字符,这部分非系统的。 var txtCaption : array[0..255] of char; begin result := ''; StringID := StringID + CheckCurrentLanguage; //注意这里,如果你自定义的需要实现双语的超过两位数,那么前面定义的CurrentEnglish 和CurrentChinese就要变成3位的。 if LoadString(HInstance, StringID , txtCaption,SizeOf(txtCaption))>0 then result:=StrPas(txtCaption); //根据上面的StringID来从资源文件中选择相应的语言. end;function RefreshFormFace(AForm : TForm ; Language : string) : boolean; //刷新窗体和窗体中各控件 var LoadSuccess : integer; FormRect:TRect; begin result := false; LoadSuccess := 0; FormRect:=AForm.BoundsRect; if Language = 'CHN' then LoadSuccess := LoadNewResourceModule(CHINESE); if Language = 'ENG' then LoadSuccess := LoadNewResourceModule(ENGLISH); if LoadSuccess <> 0 then begin LockWindowUpdate(AForm.Handle); ReinitializeForms; AForm.SetBounds(FormRect.Left,FormRect.Top,FormRect.Right-FormRect.Left,FormRect.Bottom-FormRect.Top); LockWindowUpdate(0); end; result := true; end;function SwichLanguage(AForm : TForm ; Language : string) : boolean; //设定相应的语言过程 begin result := false; WriteRegistry(Application.ExeName , Language); //写入注册表以保存当前设置的语种 RefreshFormFace(AForm , Language); result := true; end;end.
Title : MutilLanguage
Author : Taozhiyu
Email : [email protected]
Homepage : http://www.angelfire.com/super/taozhiyu
}unit MutilLanguage;interfaceuses
Registry, Forms, SysUtils, Windows, reinit;
function SwichLanguage(AForm : TForm ; Language : string) : boolean;
function ReadStr(StringID : integer) : string;implementation{$R Mystr.RES}const
ENGLISH = (SUBLANG_ENGLISH_UK shl 10) or LANG_ENGLISH; //参看TaoZhiYu的英文帮助
CHINESE = (SUBLANG_CHINESE_SIMPLIFIED shl 10) or LANG_CHINESE; //定义语言常量 CurrentEnglish = 10; //常量,用于读取资源文件中的字符
CurrentChinese = 20;
function WriteRegistry(Name,Value:string):boolean; //向注册表写数据。
var
RegisterTemp : TRegistry;
begin
result := false;
RegisterTemp := TRegistry.Create;
with RegisterTemp do
begin
try
RootKey:=HKEY_CURRENT_USER;
if OpenKey('Software\Borland\Locales',true) then
begin
WriteString(Name,Value);
result := true;
end;
CloseKey;
finally
Free;
end;
end;
end;function ReadRegistry(Name : String): string; //从注册表读取数据
var
RegisterTemp : TRegistry;
begin
result := '';
RegisterTemp := TRegistry.Create;
with RegisterTemp do
begin
try
RootKey:=HKEY_CURRENT_USER;
if OpenKey('Software\Borland\Locales',true) then
result:= ReadString(Name);
CloseKey;
finally
Free;
end;
end
end;function CheckCurrentLanguage : integer; //根据从注册表中读取的数据选择英文还是中文。
begin
result := 0;
if ReadRegistry(Application.ExeName) = 'ENG' then
result := CurrentEnglish
else
result := CurrentChinese;
end;function ReadStr(StringID : integer) : string; //从自定义资源文件中读取字符,这部分非系统的。
var
txtCaption : array[0..255] of char;
begin
result := '';
StringID := StringID + CheckCurrentLanguage; //注意这里,如果你自定义的需要实现双语的超过两位数,那么前面定义的CurrentEnglish 和CurrentChinese就要变成3位的。
if LoadString(HInstance, StringID , txtCaption,SizeOf(txtCaption))>0 then
result:=StrPas(txtCaption);
//根据上面的StringID来从资源文件中选择相应的语言.
end;function RefreshFormFace(AForm : TForm ; Language : string) : boolean; //刷新窗体和窗体中各控件
var
LoadSuccess : integer;
FormRect:TRect;
begin
result := false;
LoadSuccess := 0;
FormRect:=AForm.BoundsRect;
if Language = 'CHN' then LoadSuccess := LoadNewResourceModule(CHINESE);
if Language = 'ENG' then LoadSuccess := LoadNewResourceModule(ENGLISH);
if LoadSuccess <> 0 then
begin
LockWindowUpdate(AForm.Handle);
ReinitializeForms;
AForm.SetBounds(FormRect.Left,FormRect.Top,FormRect.Right-FormRect.Left,FormRect.Bottom-FormRect.Top);
LockWindowUpdate(0);
end;
result := true;
end;function SwichLanguage(AForm : TForm ; Language : string) : boolean; //设定相应的语言过程
begin
result := false;
WriteRegistry(Application.ExeName , Language); //写入注册表以保存当前设置的语种
RefreshFormFace(AForm , Language);
result := true;
end;end.
///////////////////////////////////////////
CloneCenter
多语言看看
http://expert.csdn.net/Expert/topic/1205/1205651.xml?temp=.0418207