2013-07-08 35 views
0

我loacalizing RAD Studio 2009 C + + Builder項目。在IDE中,我可以使用Project/Language/Acivate在程序啓動之前選擇一種語言。這工作正常。 現在我想在運行時改變語言。爲了做到這一點,我需要德爾福單位reinit.pas足夠好奇,不包括在我的安裝。我在網上發現了兩個版本。那個日期是2002年8月9日。另一個日期是2013年3月9日。表格上有兩個按鈕,它們調用下面的相應方法以切換到適當的語言。本地化與C + + builder 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()拋出一個類EReadError的excecption與評論「未找到祖先」。

從哪裏可以獲得與C++ Builder 2009相匹配的reinit.pas版本?

或者是由於某些問題導致的EReadError異常?

我已經在網上做了幾個小時的研究,還沒有拿出一個解決方案。

感謝您的幫助,提高 Derl

回答

1

此錯誤的原因有一個或多個組件,其名稱屬性爲空(「」)。爲了解決這個問題,應該找到空名稱組件並設置一個名稱。找到應用程序的空-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

不是讓鏈接(這可能是死在某個時候),你應該發佈一些代碼,以幫助解釋。 –