3

VB.Net では、マウスクリックやその他のイベントを他の DirectX アプリケーションに送信する「DirectCast」があります。

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) にマウス クリックを送信します。

4

2 に答える 2

3

SendMessageを呼び出すためにキャストは必要ありません。

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

価値があるのは、VB.netコードがSendMessageの2番目のパラメーターをIntPtrとして誤って宣言していることです。符号なし32ビット整数である必要があります。

Delphiでキャストを実装する必要がある場合は、あるタイプから別のタイプに2つの選択肢があります。未チェックのキャスト、

X := SomeType(Y);

これは、実行時チェックなしでYをSomeType型にキャストします。またはチェックキャスト、

X := Y as SomeClass;

YはSomeClassではないという例外が発生します。

于 2012-09-19T21:12:11.127 に答える
2

に相当する DelphiDirectCastは型キャストです。

たとえば、参照変数を class にキャストしますForm

VB:      DirectCast(myRef, Form)

Deplhi:  Form(myRef)
于 2012-09-19T21:01:39.157 に答える