|
저도 대충 비슷한 방식으로 콤포넌트를 만들어 쓰고 있는데..
특정 콤포넌트에서 Caption이나 Text 읽어서 저장하고 있다가
실시간으로 콤포넌트에 설정 하는 방법입니다.
일단 TForm에서 Components[...] 를 이용해 콤포넌트 리스트를 스캔하면서
해당 이름의 콤포넌트에 셋팅해 주는 방식입니다.
이렇게 하면 언어별로 텍스트파일 만들어두고 로딩해주면 실시간 변경 가능합니다.
아래에 일부 제가 만들었던 콤포넌트에 IniFile에서 로딩하는 일부 소스 발췌 했으니 참고하세요.
오래전에 만든거라 허접합니다.
개선할 점이 많은데 귀찮아서 그냥 쓰고 있는중이거든요
pForm = static_cast<XLangSub*>(List->Items[i])->ControlForm;
if( pForm == NULL)
continue;
comCount = pForm->ComponentCount;
for( int j=0; j<comCount; j++)
{
pCompo = pForm->Components[j];
ClassName = pCompo->ClassName();
// 속도를 높이기 위해 일단 클래스 이름부터 확인한다.
if( ClassName == "TPanel")
{
Data = pIni->ReadString("XLang Caption List", pForm->Name + "->" + pCompo->Name, "");
if( Data == "")
continue;
static_cast<TPanel*>(pCompo)->Caption = Data;
}
else if( ClassName == "TLabel")
{
Data = pIni->ReadString("XLang Caption List", pForm->Name + "->" + pCompo->Name, "");
if( Data == "")
continue;
static_cast<TLabel*>(pCompo)->Caption = Data;
}
else if( ClassName == "TButton")
{
Data = pIni->ReadString("XLang Caption List", pForm->Name + "->" + pCompo->Name, "");
if( Data == "")
continue;
static_cast<TButton*>(pCompo)->Caption = Data;
}
else if( ClassName == "TTabSheet")
{
Data = pIni->ReadString("XLang Caption List", pForm->Name + "->" + pCompo->Name, "");
if( Data == "")
continue;
static_cast<TTabSheet*>(pCompo)->Caption = Data;
}
ASURADA 님이 쓰신 글 :
: WinOrganizer 란 프로그램을 써보았는데...
:
: 이 프로그램의 언어 설정 부분을 보면 외부 텍스트 파일을 읽어들여 바로바로 UI 의 언어들을 바꾸어 버리더군요...
:
: 그래서 언어설정 파일을 보았더니 다음과 같더군요... 내용이 길어 일부만 발췌 하였습니다.
:
: [dmContacts]
: Contacts.Caption=주소록
: Contacts.Layouts.[0].Caption=메인
: mnMainCharPanel.Caption=메인판넬
: MsgAllFields.Text=모든 필드
:
: [dmPrintExport]
: dlgCreateFile.Text=지정된 이름으로 파일을 만들수 없습니다.#13#10다른 파일이름을 입력하여 주십시요.
: dlgCreateFolder.Text= "%s" 폴더를 만드시겠습니까 ?
: dlgErrorCreateDir.Text= "%s" 디렉토리를 만들 수 없습니다.
:
: [frmBeforeExport]
: btnCancel.Caption=취소
: btnExport.Caption=다른 형식 내보내기
: Caption=문서를 다른 형식으로 내보내기
:
: [frmChPicFormat]
: btnCancel.Caption=취소
: btnCustomize.Caption=사용자 설정
:
: [frmInspCustomize]
: btnApply.Caption=적용
: btnCancel.Caption=취소
: btnMoveDown.Caption=아래로 이동
:
: 네이밍을 보아하니 델파이로 작성된 프로그램 같은데....
: 델파이나 빌더에도 텍스트를 명령어로 수행할 수 있는 방법이 있나요?
: 문자열에 따옴표가 없는걸로 봐서는 파싱하는 루틴을 작성한듯 한데......
:
: 뭐 다른 방법이 있을까요?
|