从一种形式访问另一种形式的价值观

时间:2014-02-07 10:50:54

标签: forms delphi translation delphi-2010 caption

我试图用语言切换到我的一个程序中。

用户选择语言并在运行时将应用程序翻译。我有点在一个小型测试项目中工作。但只有在自动创建表单时,我才不想这样做。

表单的创建方式如下:

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的标题吗?

我可能忘记了你们需要的大量信息。告诉我,加入吧。

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;