使用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。
答案 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);
会导致访问冲突。对此的唯一合理解释是:
Application
是nil
或Application.MainForm
是nil
。前者似乎不太可能,因为您必须在FMX.Forms
单元初始化之前(或在其最终确定之后)运行代码。因此,可能的解释是您在创建主窗体之前运行代码,或者您在没有主窗体的程序中运行代码。
当您遇到访问冲突错误时,您可以自己调试它们以便了解。您需要做的是在导致异常的行上设置断点。触发时,检查该行代码使用的变量。通常您会发现其中一个变量是nil
。
答案 1 :(得分:2)
Application
是FMX.Forms
中定义的全局变量。因此,只要您在使用声明中添加FMX.Forms
,就可以使用Application
。