.net - 有没有办法创建 .net 用户控件以便在 delphi 表单上使用它们?

标签 .net delphi

.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/

相关文章:

c# - 如何读取ANSI编码非英文字母的文本文件?

c# - 如何在 C# 中添加对程序集的引用?

postgresql - 获取 Postgresql SELECT 查询中所有已用表的列表

.net - 在 Visual Studio 设计器中公开枚举(标志)集合

.net - 我可以使用 Objective-C 中的 mono 库(在 iPhone 上)吗?

c# - CFB 模式下使用 Crypto++ 和 .NET 的 TripleDES

适用于 64 位计算机的 Delphi 编译器

android - 将数据从数据库发送到 Android 的最佳方式

delphi - 如何检查句柄是否应该关闭?

delphi - 列表框过滤