2013-07-08 2 views
0

RAD Studio 2009 C++ Builder 프로젝트를 loacalizing하고 있습니다. IDE에서는 프로그램 시작 전에 언어를 선택하기 위해 Project/Language/Acivate를 사용할 수 있습니다. 그건 잘 작동합니다. 이제 런타임에 언어를 변경하고 싶습니다. 델파이 유닛 reinit.pas를 필요로하기 때문에, 설치에 포함되지 않습니다. 나는 어딘가에 그물에 두 개의 버전을 발견했다. 하나는 2002 년 8 월 9 일입니다. 다른 언어는 2013 년 3 월 9 일입니다. 양식에 두 개의 버튼이 있으며, 해당 언어로 전환하려면 아래의 각 메소드를 호출하십시오.C++ 빌더 2009로 지역화하기 reinit.pas

void __fastcall TFormMonitor::ButtonEnglishClick(TObject *Sender) 
{ 
const cEnglish = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US); 
if(LoadNewResourceModule(cEnglish)) 
{ 
ReinitializeForms(); 
} 
} 

//--------------------------------------------------------------------------- 
void __fastcall TFormMonitor::ButtonDeutschClick(TObject *Sender) 
{ 
const cGerman = (SUBLANG_GERMAN | LANG_GERMAN); 
if(LoadNewResourceModule(cGerman)) 
{ 
ReinitializeForms(); 
} 
} 

reinit.pas의 두 버전 모두 동일한 동작을합니다. ReinitialzeForms()는 "Ancestor not found"주석이있는 클래스 EReadError 예외를 발생시킵니다.

C++ 빌더 2009와 일치하는 reinit.pas 버전은 어디에서 얻을 수 있습니까?

또는 일부 문제로 인해 EReadError 예외가 발생 했습니까?

나는 그물에 대한 연구를 몇 시간이나 해봤으며 해결책을 제시하지 못했습니다. 당신의 도움에 대한

감사합니다, 누구의 이름 속성 ("") 비어있는 하나 개 이상의 구성 요소가 있기 때문에 Derl

답변

1

이 오류가 발생합니다. 이 문제를 해결하려면 empty-Name 구성 요소를 찾아 이름을 설정해야합니다. 응용 프로그램에서 빈 이름 구성 요소를 찾으려면 다음과 같이하십시오.

TComponent *pform, *pcomponent; 
AnsiString NoNameComponent; 

for(int ff=0; ff< Application->ComponentCount; ff++) { 
    pform = Application->Components[ff]; // get a form 
    for(int i=0; i< pform->ComponentCount; i++) {   
     pcomponent = pform->Components[i]; // get a component 
     if(pcomponent->Name == "") { 
      NoNameComponent = pcomponent->ClassName() 
        +" at "+pform->Name + "has no name"; 
     } 
    } 
} 
+0

링크를 누르면 (일부 지점에서 종료 될 수 있음) 설명하는 데 도움이되는 코드를 게시해야합니다. –