tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルAxWindowsMediaPlayerでフォームを移動
記事No7938
投稿日: 2008/08/12(Tue) 13:04
投稿者ゆうき
ゆうきです。

タイトルバーの無いフォームを作っています。
そこで、フォームを移動したくなったので、

    Private FormMousePoint As Point

    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
        If (e.Button And MouseButtons.Left) = MouseButtons.Left Then
            FormMousePoint = New Point(e.X, e.Y)
        End If
    End Sub

    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
        If (e.Button And MouseButtons.Left) = MouseButtons.Left Then
            Me.Left += e.X - FormMousePoint.X
            Me.Top += e.Y - FormMousePoint.Y
        End If
    End Sub

としました。
しかし、場合によっては、AxWindowsMediaPlayerに全体を覆われるような状態にすることがあります。
そのときに、AxWindowsMediaPlayerをドラッグしてフォームを移動できるようにしたいと思い、

    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown, AxWindowsMediaPlayer.MouseDownEvent
    '略
    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove, AxWindowsMediaPlayer.MouseMoveEvent
    '略

としましたが、変数eがAxWMPLib._WMPOCXEvents_MouseDownEventだったので、
同じイベントにできませんでした。

なので、

    Private Sub AxWindowsMediaPlayer1_MouseDownEvent(ByVal sender As Object, ByVal e As AxWMPLib._WMPOCXEvents_MouseDownEvent) Handles AxWindowsMediaPlayer1.MouseDownEvent
        FormMousePoint = New Point(e.fX, e.fY)
    End Sub

    Private Sub AxWindowsMediaPlayer1_MouseMoveEvent(ByVal sender As Object, ByVal e As AxWMPLib._WMPOCXEvents_MouseMoveEvent) Handles AxWindowsMediaPlayer1.MouseMoveEvent
        Me.Left += e.fX - FormMousePoint.X
        Me.Top += e.fY - FormMousePoint.Y
    End Sub

としましたが、マウスを乗せるだけで移動してしまいます。
使用するイベントが間違っているのでしょうか。
それとも、処理がおかしいのでしょうか。

お願いします。

[ツリー表示へ]
タイトルRe: AxWindowsMediaPlayerでフォームを移動
記事No7944
投稿日: 2008/08/12(Tue) 15:44
投稿者花ちゃん
>     Private Sub AxWindowsMediaPlayer1_MouseMoveEvent(ByVal sender As Object, ByVal e As AxWMPLib._WMPOCXEvents_MouseMoveEvent) Handles AxWindowsMediaPlayer1.MouseMoveEvent
>         Me.Left += e.fX - FormMousePoint.X
>         Me.Top += e.fY - FormMousePoint.Y
>     End Sub

> としましたが、マウスを乗せるだけで移動してしまいます。

その時の Me.Left += e.fX - FormMousePoint.X 各値はどのようになっていますか?

仮に、FormMousePoint.X が 0 でも移動しますよね。
どこかで(MouseDown イベント)、移動開始のフラグでも設定して、そのフラグが
True の時だけ上記コードを有効にするとかしないと
フォームの場合のコードとよく見比べて見て下さい。

http://www.hanatyan.sakura.ne.jp/dotnet/mouse02.htm


又は、Win32 API 関数を使用するとか。
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/Movement/

[ツリー表示へ]
タイトルRe^2: AxWindowsMediaPlayerでフォームを移動
記事No7948
投稿日: 2008/08/13(Wed) 10:13
投稿者ゆうき
ゆうきです。

花ちゃんさん回答ありがとうございます。

APIにより解決しました。

[ツリー表示へ]