• ベストアンサー

フォームをリサイズ後に動作を行う

フォームをリサイズした時に動作を行いたいのですが、 Form_Resizeだとリサイズ中ずっと効いてしまいます。 マウスを離した瞬間に初めて事が起こるようにするにはどうすればよいのでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

フックをしてあげましょ http://www.vbvbvb.com/jp/gtips/index0801.html 825番目です。

thrush76
質問者

お礼

ご回答あり待とうございます。 しかし、すみませんがそこのgSetWindowLongGwlWndProcWmExitSizeMove.lzhをダウンロードできなくて、仕組みがよくわかりません。 お教えいただけないでしょうか。

その他の回答 (8)

回答No.9

#6です。 右クリックで「対象をファイルに保存」をやると、DLできません。 ブラウザでJavaの制限をきつくしていると、DLできません。 それでも取得できないなら、ブラウザでソースの表示をしてシコシコ手直ししましょう。 1.「Option Explicit」から一番最後の「End Sub」までをテキストエディタなどで取得 2.「<br>」を改行に変換 3.「&amp;」を「&」に変換 4.その他コンパイルが通らない部分を、HPと見比べて手直し

thrush76
質問者

お礼

ありがとうございます。 仕組みはわかったのですが、適応していざ実行しようとしたら、 実行ボタンを押した途端にVBごと終了してしまいました。 どうしたのでしょう。

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.8

回答No.6で紹介されていたページには、すぐにコピーして使える形のソースコードがありましたよね? それを使えば実現できそうですね、という意味です。

thrush76
質問者

お礼

ありがとうございます。 必要なオブジェクトはコマンドボタン2つとラベルとリストボックスだけですか?

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.7

おー、回答No.6の方法いいですね。特殊なリサイズ(最大化/最小化/直接ウィンドウサイズ指定)以外は動作するみたい。

thrush76
質問者

補足

すみませんが、詳細をお教えいただけないでしょうか。

回答No.5

#4さんへ #3です。 うぉぉぉ~イベントが・・・イベントが発生しまくりです。 ほうほう!( ..)φメモメモ そうですか、そんな関係がありましたか。 と、いうことは、デスクトップのデザイン・効果の設定で 「ドラッグ中にウィンドウの内容を表示する」をオフにしたら、 質問者のthrush76さんが、個人的または眼の届く範囲で使う分にはそれで解決ですね。 フリーソフトなど不特定多数の人に配布するにはちょっと無理がありますが・・・

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.4

回答No.3の回答者の方へ: VB6の場合、同じプログラムでテストすると、デスクトップのデザイン・効果の設定で「ドラッグ中にウィンドウの内容を表示する」がオフの場合はリサイズを行ってマウスボタンを離した瞬間のみイベントが発生、効果設定がオンの場合はリサイズフレームが変化するたびにイベントが発生します。 VB4でも「ドラッグ中にウィンドウの内容を表示する」をオンにするとリサイズフレームが変化するたびにイベントが発生しませんか?

thrush76
質問者

補足

これは目から鱗です。ありがとうございます。 しかし、今回の場合は人に配布するのが目的なのです。 何か良い方法はありませんか。 因みに申し遅れましたがバージョンはVB6です。

回答No.3

> Form_Resizeだとリサイズ中ずっと効いてしまいます。 はて? Private Sub Form_Resize() Debug.Print Time End Sub これで、デバッグウィンドウで確認したのですが、 リサイズしてマウスを離した瞬間しかイベントが発生しません。 こちら、VB4です。(^_^;)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

resizeイベントの時には、フラグを設定するだけにして、 マウスアップイベントの時にフラグを見て resize処理を行いフラグをクリア というような感じでどうでしょう (実際に試していないので、うまくいくかどうかはわかりません)

thrush76
質問者

補足

すみません。 Resizeの時はMouseUpが効かないようです。

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

フォームがリサイズ中であるかどうかのイベントはない(というより、リサイズ中という状態自体がない)ので困ってしまいますね。 リサイズイベント発生に行う「動作」と同時にタイマーを起動し、最後の「動作」から一定時間を経過するまでは再度同じ「動作」を行わない、という形にしてはいかがでしょうか。 これですと、リサイズ中はタイマーによる一定間隔で「動作」が行われることになります。 また、リサイズイベント発生と同時にタイマーを起動し、最後のリサイズイベントから一定時間を経過するまでは「動作」を行わない、という形も考えられます。 これですと、素早いリサイズ動作の場合はリサイズ終了後一定時間が経過してから「動作」が行われることになります。タイマーによる間隔よりもゆっくりとリサイズした場合には、リサイズ中に何度か「動作」が行われます。 なお、いずれの方法でも、リサイズ終了時にはタイマーによる間隔よりも素早く反応することができません。「動作」の内容によってはリサイズ中の「動作」を最小限にし、リサイズ終了時に素早く「動作」を行うことも可能ですが、それが可能かどうかは「動作」の内容に依存するのでここでは省略します。

関連するQ&A