#354 フォームにイメージマップの機能を付ける方法 フォーム、VBA

1つの画像がメニューのようになっていて、クリックする位置によってリンク先が変わるというホームページページを見たことがあると思います。それが「イメージマップ」という機能です。ここではAccessフォームでその機能を実現する方法を紹介します。
  1. まず、適当なソフトを使ってメニュー用のイメージを作成します。

  2. それをフォームにイメージコントロールを使って配置します。
    フォームのデザインビュー
    ※ここではマウスの座標値を確認するためのテキストボックスも参考用に配置しています。

  3. 続いて、次のようなコードをフォームのモジュールに記述します。ここでは、「イメージ0」が上記のイメージコントロールの名前を表わしています。

    Option Compare Database
    Option Explicit

    Private lngCurrentX As Long
    Private lngCurrentY As Long

    Private Sub イメージ0_Click()

      If lngCurrentX <= 1800 Then
        '左方の領域がクリックされたとき
        If lngCurrentY <= 1500 Then
          '上方の領域がクリックされたとき
          MsgBox "処理1が選択されました"
        Else
          '下方の領域がクリックされたとき
          MsgBox "処理2が選択されました"
        End If
      Else
        '右方の領域がクリックされたとき
        If lngCurrentY <= 1500 Then
          '上方の領域がクリックされたとき
          MsgBox "処理3が選択されました"
        Else
          '下方の領域がクリックされたとき
          MsgBox "処理4が選択されました"
        End If
      End If

    End Sub

    Private Sub イメージ0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

      'マウスの位置をPublic変数に保存
      lngCurrentX = X
      lngCurrentY = Y

      '参考用にマウスの座標値を表示
      Me!txt_X座標 = lngCurrentX
      Me!txt_Y座標 = lngCurrentY

    End Sub
    ここでのポイントは、イメージコントロールの「MouseMove/マウスボタン移動時」イベントです。このイベントプロシージャでは、そのコントロール上でマウスのカーソルが移動したとき、その座標値を取得することができます。そのタイミングでマウスの位置をPublic変数、lngCurrentXとlngCurrentYに保存しておきます。
    そして、実際にマウスがクリックされたとき、すなわち「Click/クリック時」イベントプロシージャによってその座標値によって次に表示するフォームあるいは実行する処理を切り分けます。
    なお、実際のClickイベントプロシージャでは、処理を切り分けるための座標範囲を指定しなければなりませんが、それを知るためにも、上記で参考用に配置した2つのテキストボックスを役立てることができます。

実行例:
マウスを移動 クリックしたところ

マウスを移動 クリックしたところ
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved