MS Access Tips/Sample and VBA and Blog customize etc...

拡張ズームボックス関数

Shift+F2 または DoCmd.RunCommand acCmdZoomBox で表示されるズームボックスという機能がありますが、開くときにフォントサイズを指定したい、また、ウィンドウのサイズを変更したい。

標準のズームボックスでは既定値のフォントサイズが小さくて見にくい、あるいは、テキスト量が多いとき見にくい、ということで、このような要望がでることがあると思います。

探してみると T'sWareさんの 汎用ZoomBoxクラス というものが見つかります。

これは、よくできているのですが、DoEvents をループで回して待機しているので、CPUを占有してしまうのがちょっと気になります。

そこで、hatena流に 拡張ズームボックス関数 を作ってみました。

VbaZoomBox.png

難易度:

特徴

標準のズームボックスに比べて下記の点を拡張してます。

  • ウィンドウのサイズ変更ができる。(変更不可の設定も有り)
  • フォントをあらかじめ設定できる。
  • カーソル位置をあらかじめ設定できる。
  • ウィンドウの標題を設定できる。
  • ウィンドウのサイズをあらかじめ設定できる。
  • [OK]を押して閉じたのか、それ以外で閉じたのか返値で取得できる。

概要

ズームボックスはダイアログボックスのバリエーションですので、入力ダイアログフォームの設計 で紹介した関数化の手法が使えます。フォームをダイアログモードで開いて待機させますので、CPUを占有することはありません。また、関数にすることで、クラスよりは扱いやすいと思います。

ただ、Accessのフォームはダイアログモードで開くとプロパティの設定を無視してフォームのサイズ変更ができなくなります。これはAPIのGetWindowLong, SetWindowLong を使って無理矢理サイズ変更できるようにしました。

フォームのサイズ変更に合わせて、テキストボックスのサイズやボタンの位置を追随させるのは、フォームのサイズの変更に追随するコントロール の方法を利用します。

モジュール

フォーム「ZoomBox」上にテキストボックス「txtInput」コマンドボタン「cmdOK」「cmdCancel」を配置します。

標準モジュール 「mdlZoomBox」

ZoomBoxフォームモジュール

2010/02/10 追記: AC2003以前ではサイズ変更ができないようです。現在、対策ができないか検討中です。対策しました。AC2003以前では、上記のZoomBoxフォームモジュールの「AC2003以前用」のコメント行をコメントアウトして利用ください。AC2003とAC2000用サンプルMDBも対策済みのものに差し替えましたので既にダウンロードした方は再ダウンロードしてください。

使い方

この記事の最後のサンプルMDBをダウンロードします。拡張ズームボックス関数を利用したいMDBで、サンプルMDBから、フォーム ZoomBox、標準モジュール mdlZoomBox をインポートします。あるいは、VBA画面の[ツール]-[参照設定]でサンプルMDBを参照します。

テキストボックス txt1 のダブルクリック時で表示させる場合
(サイズ変更可、カーソル位置 文末、フォント MS ゴシック、フォントサイズ 10, 幅10cm高さ5cm)

テキストボックス txt1 の横のコマンドボタンのクリック時で表示させる場合
(サイズ変更不可、カーソル位置 全選択、フォント MS 明朝、フォントサイズ 12)

イベントプロシージャを使わずにプロパティ欄に直接関数を記述することも可能です。

テキストボックスのダブルクリック時で表示させる場合

プロパティ 設定値
ダブルクリック =CallZoomBox()

複数のテキストボックスに設定したい場合は、複数選択しておいて上記の設定をすれば一度に設定できます。

コマンドボタンのクリック時で表示させる場合は、引数に対象コントロールを指定してください。

プロパティ 設定値
ダブルクリック =CallZoomBox([txt1])

他の引数も設定できます。ただし、カーソル位置の定数はプロパティ欄では使えませんので数値(全選択:0, 先頭:1, 文末:2)で設定します。

プロパティ 設定値
ダブルクリック =CallZoomBox([txt1], True, 2, "txt1入力", "MS 明朝", 12)

2010/02/13 追記: YU-TANG's MS-Access Discovery の YU-TANGさんが別の方法を公開されました。組み込みのズームボックス自体を拡張してしまうという超絶技のものです。ぜひそちらもご参照ください。
ZoomBoxEx 関数 - ズームボックスを拡張するもう一つの方法

サンプルMDB が下記からダウンロードできます。
VbaZoomBox_07.zip (Access 2007 形式 - 34kb)
VbaZoomBox.zip (Access 2002-2003 形式 - 32kb)
VbaZoomBox_2k.zip (Access 2000 形式 - 32kb)

拍手する

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/231-e78c0299
該当の記事は見つかりませんでした。