環境はVB6です。
クリッカブルマップのように画像にマウスが入ったら色を変えるマウスが出たら戻す
みたいなことをやりたいのですが、VB6のコントロールでそのような感じにできるものはありますか?
ご教授ください。
案1:MouseMoveイベントの使用できるコントロールを使う
案2:WebBrowserコントロールでクリッカブルマップを表示
ありがとうございます。
案1ですがPictureコントロール又はImageコントロールを使ってますが、画像が丸い場合に丸い部分に入ったというイベントがとれません。(丸以外は透過させた画像)
こういう場合はどのように入った入らないをイベントをとるようにするのでしょうか?クリッカブルマップのような感じにしたいです。
座標を調べる
要するに、ピクチャーボックスに貼り付けられた、円の方程式を
導き出して、(x,y)座標で与えられた任意の点が円の内側にあるか
外側にあるか判断するという幾何学的な問題になりますね。
で、どこがわからないのでしょう。
マウスが重なったことは 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
ありがとうございます。
UserControlを作ってやってみたいと思います。
ツイート | ![]() |