Forms 从一个窗体在另一个窗体上存取值

Forms 从一个窗体在另一个窗体上存取值,forms,delphi,translation,delphi-2010,caption,Forms,Delphi,Translation,Delphi 2010,Caption,我试图在我的一个程序中嵌入一个语言开关 用户选择语言并在运行时翻译应用程序。我在一个小的测试项目中得到了这个结果。但是只有当表单自动创建时,我才不想要 创建表单的方式如下所示: 旁注:我的大多数表单都是fsMDIChild表单 ParametersForm := TParametersForm.Create(Self); //(consider this the mainform for now) 关于参数,我有 procedure TParametersForm.FormCreate(Se

我试图在我的一个程序中嵌入一个语言开关

用户选择语言并在运行时翻译应用程序。我在一个小的测试项目中得到了这个结果。但是只有当表单自动创建时,我才不想要

创建表单的方式如下所示:

旁注:我的大多数表单都是fsMDIChild表单

ParametersForm := TParametersForm.Create(Self);  //(consider this the mainform for now)
关于参数,我有

procedure TParametersForm.FormCreate(Sender: TObject);
begin
 ResourceStringsDM.ParametersF; //(consider this the second form)
end;
此数据模块包含参数表单的标题

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为nil。主要原因是尚未完成表单的创建,并且尚未填写表单变量

我让这一切正常工作的唯一方法就是使用

 Application.CreateForm(TParametersForm, ParametersForm); 
但是我想在读过它之后避免这种情况,并且您应该只在主窗体上使用它。而且它不能很好地处理传递参数

你们这些优秀的人中有谁有什么提示或提示/帮助让我从表格2中获得表格1的标题吗

我可能忘了你们需要的很多信息。告诉我,我会将其添加到“MDI应用程序”模板中。

(文件->新建其他->…>),既不会自动创建MDI子窗体,也不会自动创建子窗体的单元包含全局窗体引用。这是有原因的,子窗体的多个实例应该可以同时运行。例如,当您有同一子窗体的两个实例时,窗体引用将保留哪一个

无论如何,当然可以不使用此设计,但是如果您不使用问题中提到的构造,则您自己负责将实例分配给引用。因此,要么这样做(我不推荐):


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

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


为什么不正确地使用实际的
resourcestring
常量和内置的,而不是尝试自己重新发明轮子呢?(仅供参考:专业人士的网站也是如此;“prolly”在英语中不是一个实际的单词,“u”也不是。你不是在给你的朋友发短信。请使用真实的单词。)哇,脾气暴躁的先生……修正了你的娱乐语言。但是你给出的答案不是我问的。我没有给你答案-我贴了一条评论,问了一个常识性的问题,以确保你意识到已经有能力做到这一点,而不需要你添加所有的繁琐的东西来尝试自己去做。就贝而言ng“脾气暴躁”,这是一个面向专业人士的专业网站,期望你在这里使用实际词汇是完全合理的。如果你不值得费心用真实的词汇写一个清晰的问题,为什么值得我们用我们的时间为你解决问题提供帮助?@Bram这不仅仅是为了我们的娱乐。如果不查一下,我不知道“prolly”是什么意思。因此,它减少了人们花时间回答你的机会。你的工作是在发帖时重新阅读你的问题,并确保你尽可能容易回答。谢谢你的回复Sertac Akyuz!这个周末有时间我会尝试一下
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;