可以将 WinForms 嵌入到 VCL Delphi 应用程序中吗?

Posted

技术标签:

【中文标题】可以将 WinForms 嵌入到 VCL Delphi 应用程序中吗?【英文标题】:Possible to embed WinForms into a VCL Delphi application? 【发布时间】:2011-03-20 22:05:30 【问题描述】:

我们有一个 VCL Delphi 2005 应用程序,并希望使用 DevExpress 的 XtraReports 组件,该组件适用于 .NET。不转换VCL Delphi 应用程序是否可以使用?

也许通过将组件转换为 COM 对象,或者创建一个 WinForms 应用程序,并以某种方式将表单嵌入到 VCL 表单中?

听起来不太容易,但只是想知道有哪些可能的解决方案。

【问题讨论】:

你不应该;报告引擎受益于紧密集成到您的 Delphi 环境中。 Delphi 有多个非常有能力的本机报告生成器,包括 Fast Report。如果您绝对需要使用 XtraReports,不妨将您的应用程序转换为完整的 .NET 代码:无论如何,您都会为 The Framework 付出代价,您不妨使用它。 Dev.Express 有一个非常好的报表引擎,用 Delphi 原生编写,你为什么不用这个? @Edelcom,您能否提供一个指向 Delphi 报告引擎的链接?我看到他们有一个打印组件,但没有看到一个报告组件。 对不起,我的意思是打印组件,它非常复杂 - 你可以在 Dev.Express(和 Delphi)组件中显示的任何内容,获取打印,你可以设置所有页面元素、页眉、页脚,页面布局等等...我自己使用组件和代码,我使用 html 作为报告语言和 HtmlViewer 开发自己的组件,我是否在多年前停止使用所有不同的报告组件。使用 html 可以做的事情令人惊叹。 【参考方案1】:

Robo,您可以使用RemObjects Hydra 3.0 组件,通过插件集成Delphi 和.Net 技术。

【讨论】:

【参考方案2】:

是的,有可能。您需要从您的 Delphi 应用程序托管 CLR 才能执行此操作。

有一些examples on MSDN 说明如何执行此操作(但示例使用的是 C++,因此您需要翻译)

或者您可以使用 JEDI 网站上的 Jedi jclClrHost 单元。 (有关详细信息,请参阅this question)

【讨论】:

我不知道 jclClrHost。好的。谢谢。我仍然认为这样做几乎总是一个坏主意,特别是如果只是使用标准的 .net 框架类或使用具有本机等价物的 .net 组件或工具包,而不是因为您必须与大型专有软件进行互操作.net 中的框架。【参考方案3】:

这是个坏主意。是的,你可以这样做。不,你不应该。

首先看看Developer Express“快速打印系统”和快速报告。第一个是文档/组件打印解决方案,是目前最好的解决方案,后者是目前最好的数据库报告组件,它还以极大的灵活性和风格处理非数据库(基于代码)的报告/打印。

我有使用Express Printing System打印基于Developer Express Spreadsheet组件的电子表格文档的第一手经验,该组合非常强大,易于使用。 Developer Express 和 Fast Reports 都有非常活跃的开发和良好的技术支持。

【讨论】:

以上是关于可以将 WinForms 嵌入到 VCL Delphi 应用程序中吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 THeaderSection 中嵌入 VCL TEdit 控件?

在 Winforms-Application 中嵌入的 Unity-Application 上调用函数 [重复]

在 WinForms 应用程序中嵌入 IronPython 并中断执行

在 WinForms 中嵌入 XNA

如何将 winform 子表单动态嵌入到主 winform 的选项卡控件中?

在 C# Winforms 应用程序中嵌入 CMD 终端