vb.net - Delphi相当于VB的 "DirectCast"?

标签 vb.net delphi

在 VB.Net 中,您可以使用“DirectCast”将鼠标单击或其他事件发送到其他 DirectX 应用程序。

Delphi 中有类似的东西吗?或者有其他有用的方法吗?

        Public Sub ClickToL(ByVal WindowHandle As IntPtr, ByVal X As Integer, ByVal Y As Integer)
        Dim num As Integer = Me.MakeLong(X, Y)
        Form1.SendMessage(WindowHandle, DirectCast(&H201, IntPtr), IntPtr.Zero, DirectCast(num, IntPtr))
        Form1.SendMessage(WindowHandle, DirectCast(&H202, IntPtr), IntPtr.Zero, DirectCast(num, IntPtr))
    End Sub

此示例将鼠标单击发送到最小化的应用程序 (DirectX)

最佳答案

您不需要强制转换来调用 SendMessage:

SendMessage(WindowHandle, WM_LBUTTONDOWN, 0, MakeLong(X, Y));
SendMessage(WindowHandle, WM_LBUTTONUP, 0, MakeLong(X, Y));

无论如何,您的 VB.net 代码错误地将 SendMessage 的第二个参数声明为 IntPtr。它应该是一个无符号的 32 位整数。

如果您确实需要在 Delphi 中实现强制转换,从一种类型到另一种类型您有两种选择。未经检查的 Actor 阵容,

X := SomeType(Y);

将 Y 转换为 SomeType 类型,无需运行时检查。或者检查类型转换,

X := Y as SomeClass;

如果 Y 不是 SomeClass,则会引发异常。

关于vb.net - Delphi相当于VB的 "DirectCast"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12502654/

相关文章:

vb.net - 怎么说 GeckoFX 使用旧的缓存文件而不是重新加载它们?

sql - 更改日期时间值的格式

.net - 如何在多项目、单一解决方案环境(VS2012)中调用Forms?

delphi - 如何使组件编辑器在双击时执行原始处理程序?

delphi - Delphi 的探查器和内存分析工具

c# - 命名空间的访问修饰符

vb.net - 将表示 24H 时间的字符串转换为 12H 时间 VB.NET

delphi - 覆盖构造错误

delphi - 如何使用 RTTI 分配 OleVariant?//将 OleVariant 或 Variant 转换为具有特定 TTypeKind 或 TRTTIType 的 TValue?

delphi MS Office Outlook 错误