|
■No62890 (shu さん) に返信
>>ところで5x5((-2,-2)-(+2,+2))とは何のことでしょうか?
> マウスポジションを中心とした上下左右2の範囲で幅と高さが5になるのでこう書きました。
>
>
> □□□□□
> □□□□□
> □□■□□ ■がマウスポジション
> □□□□□
> □□□□□
>
>
> これがすべて含まれていれば大丈夫ではないかと。
解説有難う御座いました。
これをヒントに、このコントロールのMouseHover・MouseLeaveに加え、MouseMoveイベントについて
以下の処理を呼び出すことでうまくいきました。
(MouseHoverイベント時、条件により、マウスポインタの位置が立体表示の位置でない場合があるので、
MouseMoveイベントにて再判断をしています。)
Private Sub SetBorder()
Dim rec As Rectangle
Dim p As Point
rec = Me.Bounds
p = Me.Parent.PointToClient(System.Windows.Forms.Cursor.Position)
If rec.Contains(New Rectangle(p.X - 2, p.Y - 2, 5, 5)) Then
Me.BorderStyle = Windows.Forms.BorderStyle.Fixed3D
Else
Me.BorderStyle = Windows.Forms.BorderStyle.FixedSingle
End If
End Sub
ところで、マウスポインタの位置±2の領域で判断するのには何か理由があるのでしょうか?
確かに、試しにマウスポインタの位置±1の領域で判断した場合、ゆっくりとマウスを外すと、
元の枠線(フラット)には戻りませんでした。
|