整理日: 2015年2月16日

EcLanguage.h

/*----------------------------------------------------------------------------*/
// Copy Right : Copyright (C) 2009 XXXXX INC., LTD
// Customer :
// Project :
// Function : Provide multi language function change the UI
// accordingby System Language
// ----------------------------------------------------------------
// File Name : Language.h
// Summary :
// Create : 2009.02.10 by wang
// Modify :
// By : XXXXX INC.,LTD
//
// Modify List : yyyy,mm.dd Xxxxxxxxxxxxxxxxxxxxx by XX.XXXX
/*----------------------------------------------------------------------------*/ //--------------------------------------------------------------------------- #ifndef EcLanguageH
#define EcLanguageH
//--------------------------------------------------------------------------- #include <Forms.hpp>
#include <IniFiles.hpp> #include <tchar.h> // Language Class
class TEcLanguage
{
private:
String m_sLangPath; // Language file name
String m_sCurFile;
TStringList* m_pLangs;
TStringList* m_pExts;
String m_sLang;
int m_nCurID; bool HasProperty(TComponent* aObject,String PropStr);
int GetOperSystemLanID(); protected:
// Load string for control
virtual bool LoadLangFile(TForm* pFrm);
// Save control caption to language file
virtual void SetLangFile(TForm* pFrm); public:
TEcLanguage(String sConfigPath);
~TEcLanguage(); bool SetLangID(int nID);
int GetCurID(){return m_nCurID;};
TStringList* GetLangs(){return m_pLangs;};
String GetLanFile(){return m_sCurFile;}; // Load UI Language for one form
bool LoadLanguage(TForm* pFrm){return LoadLangFile(pFrm);}
// Save UI string and control size to specific file
void SetLanguage(TForm* pFrm){SetLangFile(pFrm);}; // Load resource string for others except control
String GetStr(int nNo, String sSection=_T("ResourceString"), String sKey=_T("Str"));
}; class TEcLanBug
{
private:
bool HasProperty(TComponent* aObject,String PropStr){return GetPropInfo(aObject, PropStr);}; public:
bool LoadLanguage(TForm* pFrm,String sLanFile);
void SetLanguage(TForm* pFrm,String sLanFile);
}; #endif

EcLanguage.cpp

/*----------------------------------------------------------------------------*/
// Copy Right : Copyright (C) 2009 XXXXX INC., LTD
// Customer :
// Project :
// Function :
// ----------------------------------------------------------------
// File Name : EcLanguage.cpp
// Summary :
// Create : 2009.02.10 by wang
// Modify :
// By : XXXXX INC.,LTD
//
// Modify List : yyyy,mm.dd Xxxxxxxxxxxxxxxxxxxxx by XX.XXXX
/*----------------------------------------------------------------------------*/ #include <vcl.h> #pragma hdrstop
#include "EcLanguage.h" #pragma package(smart_init) TEcLanguage::TEcLanguage(String sConfigPath)
{
// Languageファイルの場所を取って
m_sLangPath = sConfigPath+_T("\\Language\\"); String sLang = m_sLangPath + _T("Lang.ini"); m_pExts = new TStringList;
m_pExts->Clear(); m_pLangs = new TStringList;
m_pLangs->Clear(); TIniFile* iniFile = new TIniFile(sLang);
m_sLang = iniFile->ReadString("General", "AppName", "Daq3");
m_nCurID = iniFile->ReadInteger("General", "CurID", GetOperSystemLanID());
int nLangs = iniFile->ReadInteger("General", "Number", 4);
String sTmp,sTmp1,sTmp2;
for(int i=0;i<nLangs;++i){
sTmp.sprintf(_T("%03d_Ext"),i);
sTmp1 = iniFile->ReadString("Lang", sTmp, "");
if(sTmp1=="") continue;
sTmp.sprintf(_T("%s%s.%s"),m_sLangPath.c_str(),m_sLang.c_str(),sTmp1.c_str());
if(!FileExists(sTmp)) continue; sTmp.sprintf(_T("%03d_Name"),i);
sTmp2 = iniFile->ReadString("Lang", sTmp, "");
if(sTmp2=="") continue; m_pExts->Add(sTmp1);
m_pLangs->Add(sTmp2);
}
delete iniFile; int nCnt = m_pLangs->Count;
if(m_nCurID<0 || m_nCurID>=nCnt)
m_nCurID = 0;
if(nCnt==0){
m_nCurID = -1;
}else{
m_sCurFile.sprintf(_T("%s%s.%s"),m_sLangPath.c_str(),m_sLang.c_str(),m_pExts->Strings[m_nCurID].c_str());
}
} TEcLanguage::~TEcLanguage()
{
String sLang = m_sLangPath + "Lang.ini";
TIniFile* iniFile = new TIniFile(sLang);
iniFile->WriteInteger("General", "CurID", m_nCurID);
delete iniFile; delete m_pLangs;
delete m_pExts;
} // ==========================================================================
// Check specific property in the Object
// return : ture - have the property
// false - have not the property
// ==========================================================================
bool TEcLanguage::HasProperty(TComponent* aObject,String PropStr)
{
return (GetPropInfo(aObject, PropStr) != NULL); } // ==========================================================================
// Name : LoadLangFile
// Summary : Load Language string for one form
// Call : LoadLangFile(this);
// Parameter : pFrm : Form object opinter
// Return : true / false
// --------------------------------------------------------------------------
// [modify history]:
// ==========================================================================
bool TEcLanguage::LoadLangFile(TForm* pFrm)
{
if(-1==m_nCurID) return false;
TIniFile* iniFile;
iniFile = new TIniFile(m_sCurFile);
if(!iniFile) return false;
String sComponName = _T("None"); try{
String sTmp;
String sFrmName = pFrm->Name;
if(sFrmName==_T("")){
return false;
} pFrm->Font->Name = TFontName(iniFile->ReadString(_T("General"), _T("FontName"), _T("Arial")));
pFrm->Font->Charset = TFontCharset(iniFile->ReadInteger(_T("General"), _T("Charset"), 1));
pFrm->Font->Size = iniFile->ReadInteger(_T("General"), _T("FontSize"), 9); sTmp = iniFile->ReadString(sFrmName,sFrmName,_T(""));
if ((sTmp!=_T("")) && (pFrm->BorderStyle!=bsNone))
pFrm->Caption = sTmp; TControl* pControl;
TFont* pFont;
int nCount = pFrm->ComponentCount;
for(int ix =0 ;ix<nCount;ix++){ if (HasProperty(pFrm->Components[ix],_T("Caption"))){
sComponName=_T("");
sComponName = pFrm->Components[ix]->Name;
if(sComponName==_T("")) continue;
sTmp = iniFile->ReadString(sFrmName,sComponName,"");
if(sTmp!="")
SetStrProp(pFrm->Components[ix],_T("Caption"), sTmp); if (!HasProperty(pFrm->Components[ix],_T("ParentFont"))) continue;
pControl =dynamic_cast<TControl*>(pFrm->Components[ix]);
if(((TForm*)pControl)->ParentFont) continue; pFont = dynamic_cast<TFont*>(GetObjectProp(pControl,_T("Font")));
pFont->Charset = pFrm->Font->Charset;
pFont->Name = pFrm->Font->Name;
SetObjectProp(pFrm->Components[ix],_T("Font"),pFont);
} //if (HasProperty(pFrm->Components[ix],"ParentFont"))
//{
// pControl =dynamic_cast<TControl*>(pFrm->Components[ix]);
// if(((TForm*)pControl)->ParentFont) continue;
//
// pFont = dynamic_cast<TFont*>(GetObjectProp(pControl,"Font"));
// pFont->Charset = pFrm->Font->Charset;
// pFont->Name = pFrm->Font->Name;
// SetObjectProp(pFrm->Components[ix],"Font",pFont);
//
//}
}
pFrm->Update();
}catch (Exception &exception){ Application->ShowException(&exception); }catch (...){
try{ throw Exception(""); }catch (Exception &exception){ Application->ShowException(&exception);
}
}
delete iniFile; return true;
} // ==========================================================================
// Name : SetLangFile
// Summary : Save controls stirng of form to Language file
// Call : SetLangFile(this);
// Parameter : pFrm : Form object opinter
// Return : void
// --------------------------------------------------------------------------
// [modify history]:
// ==========================================================================
void TEcLanguage::SetLangFile(TForm* pFrm)
{
if(-1==m_nCurID) return;
String sCaption;
TIniFile* iniFile = new TIniFile(m_sCurFile);
try{ iniFile->WriteString(pFrm->Name,pFrm->Name,pFrm->Caption);
iniFile->WriteInteger("General", "Charset", pFrm->Font->Charset);
iniFile->WriteString("General", "FontName", pFrm->Font->Name);
iniFile->WriteInteger("General", "FontSize", pFrm->Font->Size); for(int ix =0 ;ix< pFrm->ComponentCount;ix++){ if (HasProperty(pFrm->Components[ix],_T("Caption")) ){ sCaption = GetStrProp(pFrm->Components[ix],_T("Caption"));
if(sCaption!=""){
iniFile->WriteString(pFrm->Name,pFrm->Components[ix]->Name,sCaption);
}
}
}
}catch (Exception &exception){ Application->ShowException(&exception); }catch (...){
try{ throw Exception(""); }catch (Exception &exception){ Application->ShowException(&exception);
}
}
delete iniFile;
} // ==========================================================================
// Name : GetResourceString
// Summary : Get one resource string to language file
// Call : GetResourceString(Str1,"Form1")
// Parameter : TmpStr : resoruce string
// SectionStr : Section string of ini file
// Return : string which read form the language file
// --------------------------------------------------------------------------
// [modify history]:
// ==========================================================================
String TEcLanguage::GetStr(int nNo, String sSection, String sKey)
{ if(-1==m_nCurID) return "***";
String sText;
TIniFile* iniFile = new TIniFile(m_sCurFile);
sKey.sprintf(_T("%s%03d"),sKey.c_str(),nNo);
sText = iniFile->ReadString(sSection,sKey,"");
delete iniFile; return sText;
} // ==========================================================================
// Name : GetOperSystemLanID
// Summary : get system language ID;
// Call : GetOperSystemLanID();
// Parameter : None;
// Return : int
// --------------------------------------------------------------------------
// [modify history]:
// ==========================================================================
int TEcLanguage::GetOperSystemLanID()
{ LCID lanid = GetSystemDefaultLCID(); //API fun
int nlanid = lanid;
int nLanType = 0; char szLan[10];
itoa(nlanid,szLan,16); //english
if (strcmp(szLan,"409")==0) nLanType=0;
//simple chinese language
if (strcmp(szLan,"804")==0) nLanType=1;
//japan language
if (strcmp(szLan,"411")==0) nLanType=2;
//complicated chinese language
if (strcmp(szLan,"404")==0) nLanType=3;
//Spanish (Traditional Sort) language
if (strcmp(szLan,"40a")==0) nLanType=4;
//Spanish (Mexican) language
if (strcmp(szLan,"80a")==0) nLanType=4; return nLanType;
} bool TEcLanguage::SetLangID(int nID)
{
if(m_nCurID==nID) return false;
m_nCurID = nID;
m_sCurFile.sprintf(_T("%s%s.%s"),m_sLangPath.c_str(),m_sLang.c_str(),m_pExts->Strings[m_nCurID].c_str()); return true; } bool TEcLanBug::LoadLanguage(TForm* pFrm,String sLanFile)
{ TIniFile* iniFile;
iniFile = new TIniFile(sLanFile);
if(!iniFile) return false;
try{
String sTmp;
pFrm->Font->Name = TFontName(iniFile->ReadString("General", "FontName", "Arial"));
pFrm->Font->Size = iniFile->ReadInteger("General", "FontSize", 9);
pFrm->Font->Charset = TFontCharset(iniFile->ReadInteger("General", "Charset", 1));
sTmp = iniFile->ReadString(pFrm->Name,pFrm->Name,"");
if(sTmp!="") pFrm->Caption = sTmp;
TControl* pControl;
TFont* pFont; for(int ix =0 ;ix<pFrm->ComponentCount;ix++){ if (HasProperty(pFrm->Components[ix],"Caption")){ sTmp = iniFile->ReadString(pFrm->Name,pFrm->Components[ix]->Name,"");
if(sTmp!="")
SetStrProp(pFrm->Components[ix],"Caption", sTmp); if (!HasProperty(pFrm->Components[ix],"ParentFont")) continue;
pControl =dynamic_cast<TControl*>(pFrm->Components[ix]);
if(((TForm*)pControl)->ParentFont) continue; pFont = dynamic_cast<TFont*>(GetObjectProp(pControl,"Font"));
pFont->Charset = pFrm->Font->Charset;
pFont->Name = pFrm->Font->Name;
SetObjectProp(pFrm->Components[ix],"Font",pFont);
} //if (HasProperty(pFrm->Components[ix],"ParentFont"))
//{
// pControl =dynamic_cast<TControl*>(pFrm->Components[ix]);
// if(((TForm*)pControl)->ParentFont) continue;
//
// pFont = dynamic_cast<TFont*>(GetObjectProp(pControl,"Font"));
// pFont->Charset = pFrm->Font->Charset;
// pFont->Name = pFrm->Font->Name;
// SetObjectProp(pFrm->Components[ix],"Font",pFont);
//
//}
}
pFrm->Update(); }catch (Exception &exception){ Application->ShowException(&exception); }catch (...){
try{ throw Exception(""); }catch (Exception &exception){ Application->ShowException(&exception);
}
}
delete iniFile; return true;
} void TEcLanBug::SetLanguage(TForm* pFrm,String sLanFile)
{
String sCaption;
TIniFile* iniFile = new TIniFile(sLanFile);
try{ iniFile->WriteString(pFrm->Name,pFrm->Name,pFrm->Caption);
iniFile->WriteInteger("General", "Charset", pFrm->Font->Charset);
iniFile->WriteString("General", "FontName", pFrm->Font->Name);
iniFile->WriteInteger("General", "FontSize", pFrm->Font->Size); for(int ix =0 ;ix< pFrm->ComponentCount;ix++){ if (HasProperty(pFrm->Components[ix],_T("Caption")) ){ sCaption = GetStrProp(pFrm->Components[ix],_T("Caption"));
if(sCaption!=""){
iniFile->WriteString(pFrm->Name,pFrm->Components[ix]->Name,sCaption);
}
}
}
}catch (Exception &exception){ Application->ShowException(&exception); }catch (...){
try{ throw Exception(""); }catch (Exception &exception){ Application->ShowException(&exception);
}
}
delete iniFile;
}

BCB 语言类的更多相关文章

  1. OC语言类的本质和分类

    OC语言类的深入和分类 一.分类 (一)分类的基本知识  概念:Category  分类是OC特有的语言,依赖于类. 分类的作用:在不改变原来的类内容的基础上,为类增加一些方法. 添加一个分类: 文件 ...

  2. 李洪强iOS开发之OC语言类的深入和分类

    OC语言类的深入和分类 一.分类 (一)分类的基本知识  概念:Category  分类是OC特有的语言,依赖于类. 分类的作用:在不改变原来的类内容的基础上,为类增加一些方法. 添加一个分类: 文件 ...

  3. 模块的封装之C语言类的封装

    [微知识]模块的封装(一):C语言类的封装 是的,你没有看错,我们要讨论的是C语言而不是C++语言中类的封装.在展开知识点之前,我首先要 重申两点: 1.面向对象是一种思想,基本与所用的语言是无关的. ...

  4. 模块的封装之C语言类的继承和派生

    [交流][微知识]模块的封装(二):C语言的继承和派生 在模块的封装(一):C语言的封装中,我们介绍了如何使用C语言的结构体来实现一个类的封装,并通过掩码结构体的方式实 现了类成员的保护.这一部分,我 ...

  5. 设计一个网上书店,该系统中所有的计算机类图书(ComputerBook)每本都有10%的折扣,所有的语言类图书(LanguageBook)每本都有2元的折扣,小说类图书(NovelBook)每100元

    现使用策略模式来设计该系统,绘制类图并编程实现 UML类图 书籍 package com.zheng; public class Book { private double price;// 价格 p ...

  6. iOS学习之Object-C语言类和对象

    一.OC语言的特点:封装,继承,多态:包含一个运行时系统:类库丰富. 二.面向对象      1.概述      OOP(Object Oriented Programming)面向对象编程.     ...

  7. SQL语言类

     SQL语分为四类:数据查询语言DQL,数据操纵语言DML. 数据定义语言DDL,数据控制语言DCL. 1 数据查询语言DQL 数据查询语言DQL基本结构是由SELECT子句.FROM子句,WHE ...

  8. C#语言——类

    C#——类 一.String 类 系统内置的处理字符串类型的函数方法类.方便我们对字符串类型进行一系列的处理. 1.Length:获取字符串的长度,返回一个int类型的值 string x=Conso ...

  9. 黑马程序员——OC语言 类和对象

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)类 1)类的声明 代码编写 ①定义一个Car类,拥有2个属性:轮子数 ...

随机推荐

  1. 【web开发学习笔记】ibatis学习总结

    ibatis学习总结 ibatis数据库配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCT ...

  2. group by是什么意思 mysql中

    mysql语法中group by是什么意思? 在百度中搜索半天,最后找到一篇解释比较好的(不是博文,是百度知道,很郁闷那么多网友怎么就没人解释的清楚),链接如下: http://zhidao.baid ...

  3. How to manage and balance “Huge Data Load” for Big Kafka Clusters---reference

    1. Add Partition Tool Partitions act as unit of parallelism. Messages of a single topic are distribu ...

  4. marquee 标签的使用详情

    <marquee>标签,它是成对出现的标签,首标签<marquee>和尾标签</marquee>之间的内容就是滚动内容.<marquee>标签的属性主要 ...

  5. 使用泛型定义一个可重用的Dao

    dao用来和数据库进行交互,一个项目中,可能有用户表,产品表等等,不可能为每一个表都建立一个dao,使用泛型可以实现通吃. UserDao.java public class UserDao < ...

  6. Java基础知识强化之IO流笔记29:BufferedOutputStream / BufferedInputStream(字节缓冲流)之BufferedInputStream读取数据

    1. BufferedInputStream读取数据 BufferedInputStream构造方法,如下: 构造方法摘要 BufferedInputStream(InputStream in)    ...

  7. 卸载AMH 5.0面板的具体办法

    安装AMH 5.0面板只有YES.NO和EXIT,和AMH 4.X的安装.卸载.退出有点不同,那么如何卸载AMH 5.0面板呢? 1.root登录ssh 2.输入如下命令: killall php-f ...

  8. 简洁JS 日历控件 支持日期和月份选择

    原文出处 以下这个JS日历控件是我的闲暇之余自己编写的,所有的代码全部在IE7/IE8/Firefox下面测试通过, 而且可以解决被iframe层遮盖的问题.现在只提供两种风格(简洁版和古典版)和两种 ...

  9. JDK和JVM

    JDK: JDK包含的基本组件包括: javac – 编译器,将源程序转成字节码 jar – 打包工具,将相关的类文件打包成一个文件 javadoc – 文档生成器,从源码注释中提取文档 jdb – ...

  10. ZOJ 1004 Anagrams by Stack(DFS+数据结构)

    Anagrams by Stack 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4 题目大意:输入两个字符串序列,判 ...