我试图用语言切换到我的一个程序中。
用户选择语言并在运行时将应用程序翻译。我有点在一个小型测试项目中工作。但只有在自动创建表单时,我才不想这样做。
表单的创建方式如下:
SideNote:我的大多数表单都是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;
此Datamodule包含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名称),但此时此变量为nil。 Prolly因为它还没有完成创建表单而且没有填写表单var。
我得到这一切的唯一方法是使用
Application.CreateForm(TParametersForm, ParametersForm);
但我想在阅读之后避免这种情况,并且你应该只在你的主体上使用它。它也不能很好地处理传递参数。
你们中的任何人都有任何提示或提示/帮助让我访问表格2中表格1的标题吗?
我可能忘记了你们需要的大量信息。告诉我,加入吧。
答案 0 :(得分:0)
在“MDI应用程序”模板(file-> new-other-> ...>)中,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;