Delphi:如果应用程序为nil,则如何获取Application.MainForm(在dll中)

时间:2015-02-09 23:18:43

标签: windows delphi delphi-xe2

我需要应用程序的主要形式来执行ClientToParent()并且不成功,因为我在一个DLL中并且Application变量是nil。我感谢任何人的帮助。

1 个答案:

答案 0 :(得分:6)

跨模块边界的表单引用无法执行任何操作。主机应用程序,即使假设它是一个Delphi应用程序,也有一个不同的VCL实例。因此,您无法在DLL中使用应用程序中的TForm实例。如果您使用包,则可以这样做。

您可以枚举顶级窗口并找到流程中的窗口。这可能有效,但很麻烦。

更好的方法是公开允许主机提供此类服务的功能。当主机加载你的DLL时,它将提供一个提供必要服务的接口。它可以根据需要转换坐标,也许可以提供其他服务。

我要查询的一件事是你打算打电话给ClientToParent。这表明您在不同模块中的控件之间存在客户/父关系。只有在使用包时才可行。我确实想知道您是否完全了解与模块之间的VCL使用相关的限制。

相关问题