※ 本トピックは、掲示板 MS-Access 庵 (現在は閉鎖中) に 2008 年 1 月に投稿した「Windows XP 風コマンドボタン」を、一部加筆して再録したものです。

概要

Demo

Access のコマンドボタンは、機能的には必要十分ではありますが、デザイン的にはちょっと難があります。

画像とキャプションを同時に表示することができませんし、ロールオーバー(マウスホバー)時の効果もサポートしていません。また自前でロールオーバー効果を実装しようと思っても、そもそもマウスが上を離れたときの onmouseout 的イベントが存在しません。

イメージコントロールとラベルを組み合わせれば、それらしいボタンを作れるでしょうが、これにクリック時の効果やロールオーバー効果も実装しようと思うと、かなり面倒です。正直 途中でくじけて、「リボンだのタブフォームだの誰も欲しがっていないモノを作っている暇があったら、 なぜこんな基本的な機能を実装しない?>Access チーム!」と逆ギレる自信があります (不思議に逆ギレというより正当な抗議に思えるのはわたしだけ?)。

というわけで、今回は逆ギレ予防として、クールなコマンドボタンを簡単に作れる XP_STYLE コマンドボタン クラスをご紹介します。

詳細

XP_STYLE コマンドボタンは、イタリアの著名な Access 開発者 @Alex 氏のサイトで配布されています。

CommandButton XP_STYLE - MS ACCESS Code Sample

ActiveX コントロールではないため、何かをインストールする必要はありません。クラスモジュールなので、モジュールさえインポートすれば、他には何も要りません。

コマンドボタンに見える部分は、実際にはイメージコントロールです。しかし、キャプションを動的に変更することもできますし、ロールオーバー効果もサポートしています (ボタンの上から離れたというイベントも取得できます)。また、冒頭のデモ画像でも分かるように、画像とキャプションの配置も自在に指定することができます。画像は一種類しか必要ありません。後の効果 (背景色の透過、使用不能イメージ、非ホバー時のモノクロイメージ、ホバー時の強調イメージ、クリック時のマウスダウン イメージ) はすべてクラスが動的に生成して面倒を見てくれます。

XP_STYLE コマンドボタンの現行バージョンのバージョンアップ作業には、縁あって YU-TANG も参加しました。コードを OOP スタイルに改善し、前バージョンよりさらに利用が容易になっています。

上記サイトからはデモ MDB をダウンロードできますが、イタリア語環境で作成されたため、日本語環境では MDB を開いてもエラーで動作しません。また文字列関連の処理が日本語のような DBCS に非対応だったため、作成者の @Alex 氏の許可を得て、デモを日本語環境用に変換し、ついでに Unicode にも対応させてあります (冒頭の画像のボタン標題には、あえて SJIS では表示できない「森外」を指定しています)。

実際に試してみたい方は、下記から日本語版のデモをダウンロードしてください。

ダウンロード

サンプルのダウンロードは下記からどうぞ。

Access 2000 形式 MDB ファイルを ZIP 圧縮しています。Windows XP 以降の OS 上であれば、特に外部ソフトを使わず解凍できます。

Windows XP 未満の OS で解凍用のソフトが無い場合は、Vector 等のソフトウェアライブラリから入手する必要があります。

使い方

1. モジュールのインポート

組み込み対象の MDB に、サンプルから以下のモジュールをインポートしてください。

クラスモジュールは必ずデモ版から開発用 DB にインポートしてください。クラスモジュール clsItems には拡張属性が設定されているため、VBE 上でコードをコピーして新規モジュールに貼り付けても動きません。ご注意ください。

2. 参照設定の確認

不要です。標準の VBA ライブラリといくつかの OS 付属 DLL 以外は、使用しません。

3. イメージ コントロールの挿入

フォームに、XP_STYLE コマンドボタンとして使用するためのイメージ コントロールを任意個数挿入します。

後はサンプルフォームの記述を参考に、コーディングしてください。

なお clsItem オブジェクトのプロパティを更新した場合は、必ず clsItem.Repaint() メソッドを呼び出して再描画するようにしてください。でないと、新しい設定が反映されません。

使用上の注意

デモ版では実行時に、使用画像が MDB と同じディレクトリに出力されます。これは clsItem.BuildButton メソッドの中に「Call SaveToFile(m_ImgBtn)」という一文があるためですので、開発/デバッグが終わった段階でコメントアウトするのがよいでしょう。

またマウスホバー判定は、フォームのタイマ時イベントで行っています。そのため、タイマを他の用途でも使用する際は、互いに干渉しないようご注意ください。

本クラスの使用または不使用に伴って発生するいかなる損害も担保しません。改変・使用・再頒布は自由ですが、ソースコード内のコメントは削除しないでください (オリジナルのライセンスを確認したい方は、CommandButton XP_STYLE - MS ACCESS Code Sample のフッターに記載されていますので、ご参照ください。上記日本語文とだいたい同じです)。

謝辞

日本語化とその配布を快諾してくださった作者の @Alex 氏にお礼申し上げます。

Grazie, @Alex!

関連情報

姉妹サンプルとして XP_STYLE プログレスバー ProgressBar XP_STYLE も公開されていますので、興味のある方はそちらもぜひお試しを。