Delphi XE5 - 在其他单元中使用Application(TApplication)变量的可能性

时间:2014-02-20 10:29:00

标签: delphi firemonkey delphi-xe5

使用Delphi XE5我想在其他单元的类中使用 Application 变量(TApplication类型)。 如果我尝试使用 var out 参数传递它然后使用它 - 我会收到访问冲突错误。 有没有办法从共享.pas库中的Application中获取数据?

  for TempComponent in Application.MainForm do
      if (TempComponent is TTextControl) then
         ShowMessage('Text Assigned : ' + TempComponent.Name)
      else
         ShowMessage('No TTextControl Descendant : ' + TempComponent.Name);

我在每个单元都包含包含FMX.Forms 。上面的代码在主窗体类程序中工作,但是当我在其他单元中使用它时,我在运行应用程序时得到了AV。

2 个答案:

答案 0 :(得分:3)

您声明此代码:

for TempComponent in Application.MainForm do
  if (TempComponent is TTextControl) then
     ShowMessage('Text Assigned : ' + TempComponent.Name)
  else
     ShowMessage('No TTextControl Descendant : ' + TempComponent.Name);

会导致访问冲突。对此的唯一合理解释是:

  1. Applicationnil
  2. Application.MainFormnil
  3. 前者似乎不太可能,因为您必须在FMX.Forms单元初始化之前(或在其最终确定之后)运行代码。因此,可能的解释是您在创建主窗体之前运行代码,或者您在没有主窗体的程序中运行代码。

    当您遇到访问冲突错误时,您可以自己调试它们以便了解。您需要做的是在导致异常的行上设置断点。触发时,检查该行代码使用的变量。通常您会发现其中一个变量是nil

答案 1 :(得分:2)

ApplicationFMX.Forms中定义的全局变量。因此,只要您在使用声明中添加FMX.Forms,就可以使用Application