クリッカブルマップみたいなことをしたい

解決


初心者  2005-11-17 00:12:40  No: 92681

環境はVB6です。
クリッカブルマップのように画像にマウスが入ったら色を変えるマウスが出たら戻す
みたいなことをやりたいのですが、VB6のコントロールでそのような感じにできるものはありますか?

ご教授ください。


ひろ  2005-11-17 04:40:55  No: 92682

案1:MouseMoveイベントの使用できるコントロールを使う
案2:WebBrowserコントロールでクリッカブルマップを表示


初心者  2005-11-18 18:10:31  No: 92683

ありがとうございます。
案1ですがPictureコントロール又はImageコントロールを使ってますが、画像が丸い場合に丸い部分に入ったというイベントがとれません。(丸以外は透過させた画像)
こういう場合はどのように入った入らないをイベントをとるようにするのでしょうか?クリッカブルマップのような感じにしたいです。


通ってみた  2005-11-18 18:29:03  No: 92684

座標を調べる


我龍院忠太  2005-11-18 18:54:18  No: 92685

要するに、ピクチャーボックスに貼り付けられた、円の方程式を
導き出して、(x,y)座標で与えられた任意の点が円の内側にあるか
外側にあるか判断するという幾何学的な問題になりますね。
で、どこがわからないのでしょう。


魔界の仮面弁士  2005-11-18 19:28:40  No: 92686

マウスが重なったことは MouseMove イベントで取得できますが、
マウスが離れた事を検知するためのイベントはありません。

この場合は、SetCapture/ReleaseCapture APIを使う方法があります。
http://www.kit.co.jp/vbit/QAndA01.htm

# VB6の全盛期は、Microsoft の "Owner's Area" に、これらの API を
# 用いたコントロールのサンプルが掲載されていたのですけれど……。

> 画像が丸い場合に丸い部分に入ったというイベントがとれません。
とりあえず近いものとしては、UserControl があります。
背景を透明にした上で、MaskPicture/MaskColorを設定しておけば、
画像のある部分でしか MouseMove 等のイベントが起きないようになります。

Option Explicit
Public Event MouseMove(ByVal X As Single, ByVal Y As Single)
Private Sub UserControl_Initialize()
    AutoRedraw = True
    BackColor = vbWhite
    MaskColor = vbWhite
    BackStyle = 0   '透明
    ForeColor = vbRed
    FillColor = vbRed
    FillStyle = vbSolid
End Sub

Private Sub Draw()
    Dim H As Single, W As Single
    Dim P As Single
    H = ScaleHeight
    W = ScaleWidth

    Cls
    If H > W Then
        P = W / 2
    Else
        P = H / 2
    End If

    Circle (P, P), P, vbRed
    Set MaskPicture = Image
End Sub

Private Sub UserControl_MouseMove(Button%, Shift%, X!, Y!)
    RaiseEvent MouseMove(X, Y)
End Sub

Private Sub UserControl_Paint()
    Draw
End Sub

Private Sub UserControl_Resize()
    Draw
End Sub


初心者  2005-11-19 01:59:07  No: 92687

ありがとうございます。
UserControlを作ってやってみたいと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加