簡體   English   中英

C ++ Builder 2009 reinit.pas進行本地化

[英]localization with c++ builder 2009 reinit.pas

我很討厭RAD Studio 2009 C ++ Builder項目。 在IDE中,我可以在程序啟動之前使用Project / Language / Acivate選擇一種語言。 很好 現在,我想在運行時更改語言。 為了做到這一點,我需要一個Delphi單元reinit.pas,它足夠好奇,沒有包含在我的安裝中。 我在網上某處發現了兩個版本。 一個日期為2002年8月9日。 另一個日期為2013年3月9日。表格上有兩個按鈕,它們分別調用下面的方法以切換到適當的語言。

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異常,並帶有注釋“找不到祖先”。

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

還是EReadError異常是由某些問題引起的?

我已經努力完成了數小時的網上研究,但還沒有提出解決方案。

謝謝您的幫助,德爾

因為存在一個或多個Name屬性為空(“”)的組件,所以引發此錯誤。 要解決此問題,應找到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";
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM