2014-02-07 41 views
0

我试图将语言切换到我的一个程序中。访问另一个表单上的值

如果用户选择一种语言,并且在运行时应用程序被翻译。我有点在一个小型测试项目中工作。但只有当窗体是自动创建的,我不想要。

形式获得创建的方法如下:

旁注:我大部分的形式是fsMDIChild形式。

ParametersForm := TParametersForm.Create(Self); //(consider this the mainform for now) 

在ParametersForm我

procedure TParametersForm.FormCreate(Sender: TObject); 
begin 
ResourceStringsDM.ParametersF; //(consider this the second form) 
end; 

这个数据模块设有用于ParametersForm字幕。

procedure TResourceStringsDM.ParametersF; 
begin 
    with ParametersForm do 
    begin 
    bsSkinLabel1.Caption := 'Execute Nieuwefacturen'; 
    bsSkinLabel2.Caption := 'Execute Viewfacturen'; 
    end; 
end; 

我已经加入ResourceStringsDM到实现使用ParametersForm和ParametersForm到接口ResourceStringsDM的使用。

这一切都给我一个访问冲突的原因,在它设置标题使用ParametersForm(我想要翻译的形式的var名称)的过程中,但在那个时候,这个var是零。 Prolly导致它尚未完成创建表单并未填入表单var。

我得到这个所有的工作的唯一途径是通过使用

Application.CreateForm(TParametersForm, ParametersForm); 

但我想读它之后,以避免这一点,你应该只在您的MainForm中使用。它也不能很好地处理传递参数。

你们中的任何一个人有没有任何提示或提示/帮助让我访问Form 2中的表单1的标题?

我大概忘了你们需要的大量信息。只要告诉我,并将其添加进去。

+0

为什么不能做正确,用实际'resourcestring'常数和内置的[语言支持](http://docwiki.embarcadero.com/RADStudio/XE5/en/Translation_Manager_in_the_IDE),而不是试图自己重新发明轮子?(仅供参考:SO是专业人士的网站;“prolly”不是英语中的实际词汇,也不是“你”,你在这里没有发短信给你的朋友,请用真实的话语。) –

+0

哇先生脾气暴躁.....修正了你的娱乐语言。但你给的答案不是我所问的。 –

+0

我没有给你答案 - 我发表了一个评论,提出一个常识性的问题,以确保你知道已经有能力做到这一点,而没有你添加的所有kludgy东西来尝试做它自己。就“暴躁”而言,这是专业人士的专业网站,期望您在此使用实际词汇是完全合理的。如果用真实的语言写一个明确的问题对你来说是不值得的,为什么值得我们的努力来帮助你用我们的时间来解决你的问题? –

回答

0

在“MDI应用程序”模板(文件 - >新 - 其他 - > ...>)中,既不会自动创建MDI子项,也不会在子窗体的单元中包含全局形式参考。有一个原因,一个子窗体的多个实例应该能够同时运行。例如,当你有两个同一子项的实例时,哪一个会将窗体引用保留?

总之,当然可以不使用这个设计,但是如果你不使用你在问题中提到的构造,你有责任为实例分配实例,所以要么做推荐):

procedure TParametersForm.FormCreate(Sender: TObject); 
begin 
ParametersForm := Self; 
ResourceStringsDM.ParametersF; //(consider this the second form) 
end; 


或更好,实例传递给函数的数据模块,以便它可以在它的工作:

procedure TResourceStringsDM.ParametersF(ParametersForm: TParametersForm); 
begin 
    with ParametersForm do 
    begin 
    bsSkinLabel1.Caption := 'Execute Nieuwefacturen'; 
    ... 

procedure TParametersForm.FormCreate(Sender: TObject); 
begin 
ResourceStringsDM.ParametersF(Self); //(consider this the second form) 
end; 
+0

感谢您的回复Sertac Akyuz!这周末我有一段时间的时候我会试试这个 –