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

タイトルバー以外をドラッグしてフォームを移動させる

フォームを移動させる場合、タイトルバーをドラックして移動させます。
しかし、タイトルバー以外の、詳細セクションやフォーム上ラベルなどをドラッグしてフォームを移動させたい場合もあるでしょう。
フォームの「境界線スタイル」プロパティを「なし」にしてタイトルバーを非表示にしている場合もあるでしょう。

ドラッグできるフォーム

難易度:

詳細セクションでドラッグ

掲示板の質問にあったので調べてみたのですが、意外と簡単に実現できました。

下記で Visual Basic 6.0 での方法が紹介されていますが、この方法がそのままAccessのフォームにも適用出来ました。

タイトルバー以外をドラッグしてアプリを移動させる方法について

APIの宣言と、フォームの詳細セクションの「マウスボタン移動時」にコードを記述するだけです。

フォームモジュール

これで、詳細セクションをクリックしてドラッグするとマウスカーソルに合わせて移動します。

やっていることは、マウスキャプチャを解放して、タイトルバー上でマウスボタンを押してますよ、と偽のメッセージをOSに送るということのようです。

ラベルなどのコントロールでドラッグ

フォーム上にラベルでテキストを表示したり、イメージコントロールで画像を表示させている場合、これらのコントロールでもドラッグできるようにしたいですよね。コントロールのマウスボタン移動時に同じコードを記述するだけです。

無駄なイベント発生を抑制

上記のコードだと、フォーム上をマウスカーソルが通過しただけで「マウスボタン移動」イベントが発生します。
フォーム上でボタンを押さずに素早くマウスを移動させるとCPU使用率が上がります。
そこでボタンを押している時だけ、「マウスボタン移動」イベントを有効となるようにするといいでしょう。

試してみると、フォーム上でマウスを移動させてもCPU使用率にほとんど変化はありません。
また、ボタンを押しているかどうかのIf文も不要になります。

2014/07/08 追記: マウスボタン移動時ではなくマウスボタンクリック時に設定してもOKのようです。こちらの方がイベント発生が少ないのでいいように思います。

想定できる用途

フォーム上のコントロール(ラベルやイメージコントロール)をドラッグする方法は、以前紹介しました。

マウスドラッグで移動できるコントロール - hatena chips   

これは、フォーム上のコントロールですので、移動できる範囲はフォーム内です。フォームの外へ移動させることは当然できません。
フォームならAccessウィンドウ内なら移動できます。ポップアップを「はい」にしておけば、デスクトップ上はどこでも移動できます。

また、タイトルバーを非表示にしたフォームを移動させたい場合にも有効ですね。
フォームの「境界線スタイル」を「なし」に設定するとタイトルバーは表示にできます。

これを利用して、フォームからフォームへのドラッグ&ドロップもどきも実現できるかもしれませんね。

サンプルファイルが下記からダウンロードできます。
FrmDrag_07.zip (Access 2007-2010 形式 - 23kb)
FrmDrag.zip (Access 2002-2003 形式 - 20kb)
FrmDrag_2k.zip (Access 2000 形式 - 20kb)


拍手する

Leave a reply






Trackbacks

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