2013-06-24 41 views
2

.net用户控件可以用作delphi VCL Forms项目中的控件吗?至少在设计时调整它们的大小并通过强类型或至少调用类似Invoke方法来调用它的方法。有没有什么方法可以创建.net用户控件,以便在delphi窗体上使用它们?

我挖掘了COM技术,但对我来说很难。我希望有一个更方便的.net到delphi interop。

谢谢。

+1

这无疑是可能的。显而易见的路线是将控件作为ActiveX控件公开。我希望有一个更简单的解决方案来解决你的实际问题,不管它发生了什么。 –

+0

Nex适用于JCL Classes,您可能还需要查看RemObjects的商业Hydra产品,因为它已经被创建用于支持混合模式应用程序的开发:http://www.remobjects.com/hydra/ mixedmode.aspx –

回答

2

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

你可以看看JCL classes有代码做这个托管。

一旦你做到了这一点,你可以确保你的控制类ComVisible用属性标记它们:

[ComVisible] 
public class SomeControl : UserControl 

那么你就必须构建从德尔福的控制,如何做到这一点通过JCL系统我不知道,因为我们已经创建了自己的包装。您应该在这里查看JCL类以获取更多详细信息。

有一些问题,但是:

  • 调整大小并不总是工作,有时你必须处理在Delphi的大小事件,然后手动问.NET控件相应地调整自身
  • 文本框之间的选项卡并不总是有效,特别是Delphi代码似乎将整个.NET控件视为一个黑盒子,并将其从中删除,永远不会进入,并且不在其中,除非在某些情况下。
  • Keyboart快捷方式(例如打开Alt + O)不起作用,因为Delphi正在挑选这些并且不理解.NET控件具有这样的东西
  • .NET代码的例外将从中冒泡。 NET代码转换为Delphi代码作为外部异常,并且所有异常细节都已丢失。这是Delphi编译器注入的COM OleVariant包装器生成的代码,不能正确处理此问题。

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

+0

是的,在.net程序集中保留.net控件看起来要容易得多。 – electron

相关问题