Delphi相当于VB的“DirectCast”?

时间:2012-09-19 20:46:53

标签: vb.net delphi

在VB.Net中,您可以使用“DirectCast”将mousesclicks或其他事件发送到其他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)

2 个答案:

答案 0 :(得分:3)

您不需要演员来调用SendMessage:

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

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

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

X := SomeType(Y);

将Y转换为SomeType类型而不进行运行时检查。或者是经过检验的演员,

X := Y as SomeClass;

会引发异常,Y不是SomeClass。

答案 1 :(得分:2)

相当于DirectCast的Delphi将是一个类型转换。

例如,向类Form投射引用的参考:

VB:      DirectCast(myRef, Form)

Deplhi:  Form(myRef)