2

.net 用户控件可以用作 delphi VCL Forms 项目中的控件吗?在设计时调整它们的大小并通过强类型或至少调用类似方法的方法调用其方法。

我深入研究了 COM 技术,但这对我来说很难。我希望.net 有一种更方便的方式来进行 delphi 互操作。

谢谢。

4

1 回答 1

2

至少有一种方法,那就是将 .NET 运行时托管到 Delphi 应用程序中。

您可以查看具有执行此托管的代码的JCL 类。

完成此操作后,您可以通过使用属性标记控件类来确保它们是ComVisible

[ComVisible]
public class SomeControl : UserControl

然后你必须从 Delphi 构建控件,我不知道如何通过 JCL 系统来做到这一点,因为我们已经创建了自己的包装器。您真的应该在此处查看 JCL 类以获取更多详细信息。

不过也有一些问题:

  • 调整大小并不总是有效,有时您必须在 Delphi 中处理调整大小的事件,然后手动要求 .NET 控件相应地调整自身大小
  • 文本框之间的选项卡并不总是有效,特别是 Delphi 代码似乎将整个 .NET 控件视为一个黑盒子,并且将选项卡从它中取出,从不进入它,而不是在它内部,除非在某些情况下它会这样做。
  • 键盘快捷键(例如,Alt+O 用于打开)不起作用,因为 Delphi 正在选择这些快捷键并且不了解 .NET 控件有这样的东西
  • .NET 代码中的异常将作为外部异常从 .NET 代码冒泡到 Delphi 代码中,并且所有异常细节都已丢失。这是 Delphi 编译器注入的 COM OleVariant 包装器生成的代码,无法正确处理。

我会认真考虑你是否真的想要这个。从 Delphi 代码打开一个 .NET 窗口要容易得多,而且这将表现得更加可预测。

于 2013-06-24T10:17:59.410 回答