.net 用户控件可以用作 delphi VCL Forms 项目中的控件吗?在设计时调整它们的大小,并通过强类型或至少调用类似 Invoke 的方法来调用其方法。
我深入研究了 COM 技术,但这对我来说很难。希望.net有更方便的方式与delphi互操作。
谢谢。
最佳答案
至少有一种方法,那就是将 .NET 运行时托管到 Delphi 应用程序中。
您可以查看JCL classes其中包含执行此托管的代码。
完成此操作后,您可以确保您的控件类为 ComVisible通过使用属性标记它们:
[ComVisible]
public class SomeControl : UserControl
然后你必须从 Delphi 构建控件,如何通过 JCL 系统来做到这一点我不知道,因为我们已经创建了自己的包装器。您确实应该在此处查看 JCL 类以获取更多详细信息。
但是存在一些问题:
- 调整大小并不总是有效,有时您必须在 Delphi 中处理调整大小事件,然后手动要求 .NET 控件相应地调整自身大小
- 文本框之间的 Tab 键并不总是有效,特别是 Delphi 代码似乎将整个 .NET 控件视为一个黑盒子,并且会从其中跳出,从不进入其中,也不在其中,除非在某些情况下会的。
- 键盘快捷键(例如 Alt+O 用于打开)不起作用,因为 Delphi 正在选择这些快捷键,并且不知道 .NET 控件具有此类功能
- .NET 代码中的异常将从 .NET 代码冒泡到 Delphi 代码中作为外部异常,并且所有异常详细信息都会在此过程中丢失。这是 Delphi 编译器注入(inject)的 COM OleVariant 包装器生成的代码,无法正确处理此问题。
我会认真考虑你是否真的想要这个。从 Delphi 代码打开 .NET 窗口要容易得多,而且其行为也更加可预测。
关于.net - 有没有办法创建 .net 用户控件以便在 delphi 表单上使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17270049/