[英]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.