我需要应用程序的主要形式来执行ClientToParent()
并且不成功,因为我在一个DLL中并且Application变量是nil。我感谢任何人的帮助。
答案 0 :(得分:6)
跨模块边界的表单引用无法执行任何操作。主机应用程序,即使假设它是一个Delphi应用程序,也有一个不同的VCL实例。因此,您无法在DLL中使用应用程序中的TForm
实例。如果您使用包,则可以这样做。
您可以枚举顶级窗口并找到流程中的窗口。这可能有效,但很麻烦。
更好的方法是公开允许主机提供此类服务的功能。当主机加载你的DLL时,它将提供一个提供必要服务的接口。它可以根据需要转换坐标,也许可以提供其他服务。
我要查询的一件事是你打算打电话给ClientToParent
。这表明您在不同模块中的控件之间存在客户/父关系。只有在使用包时才可行。我确实想知道您是否完全了解与模块之间的VCL使用相关的限制。