こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2005-07-08 15:20:41

QNo.1499948

困ってます

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

フックをしてあげましょ

http://www.vbvbvb.com/jp/gtips/index0801.html
825番目です。

投稿日時 - 2005-07-11 11:43:21

お礼

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

投稿日時 - 2005-07-14 20:10:55

ANo.6

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(9)

ANo.9

#6です。

右クリックで「対象をファイルに保存」をやると、DLできません。
ブラウザでJavaの制限をきつくしていると、DLできません。



それでも取得できないなら、ブラウザでソースの表示をしてシコシコ手直ししましょう。

1.「Option Explicit」から一番最後の「End Sub」までをテキストエディタなどで取得
2.「<br>」を改行に変換
3.「&amp;」を「&」に変換
4.その他コンパイルが通らない部分を、HPと見比べて手直し

投稿日時 - 2005-07-14 21:20:41

お礼

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

投稿日時 - 2005-07-14 21:59:47

ANo.8

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

投稿日時 - 2005-07-14 21:00:21

お礼

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

投稿日時 - 2005-07-14 21:14:44

ANo.7

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

投稿日時 - 2005-07-11 21:57:23

補足

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

投稿日時 - 2005-07-14 20:14:08

ANo.5

#4さんへ
#3です。
うぉぉぉ~イベントが・・・イベントが発生しまくりです。
ほうほう!( ..)φメモメモ
そうですか、そんな関係がありましたか。

と、いうことは、デスクトップのデザイン・効果の設定で
「ドラッグ中にウィンドウの内容を表示する」をオフにしたら、
質問者のthrush76さんが、個人的または眼の届く範囲で使う分にはそれで解決ですね。

フリーソフトなど不特定多数の人に配布するにはちょっと無理がありますが・・・

投稿日時 - 2005-07-08 23:38:36

ANo.4

回答No.3の回答者の方へ:

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

VB4でも「ドラッグ中にウィンドウの内容を表示する」をオンにするとリサイズフレームが変化するたびにイベントが発生しませんか?

投稿日時 - 2005-07-08 22:45:53

補足

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

投稿日時 - 2005-07-09 15:45:52

ANo.3

> Form_Resizeだとリサイズ中ずっと効いてしまいます。
はて?

Private Sub Form_Resize()
Debug.Print Time
End Sub

これで、デバッグウィンドウで確認したのですが、
リサイズしてマウスを離した瞬間しかイベントが発生しません。

こちら、VB4です。(^_^;)

投稿日時 - 2005-07-08 22:11:01

ANo.2

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

投稿日時 - 2005-07-08 16:35:18

補足

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

投稿日時 - 2005-07-08 19:12:23

ANo.1

フォームがリサイズ中であるかどうかのイベントはない(というより、リサイズ中という状態自体がない)ので困ってしまいますね。

リサイズイベント発生に行う「動作」と同時にタイマーを起動し、最後の「動作」から一定時間を経過するまでは再度同じ「動作」を行わない、という形にしてはいかがでしょうか。

これですと、リサイズ中はタイマーによる一定間隔で「動作」が行われることになります。

また、リサイズイベント発生と同時にタイマーを起動し、最後のリサイズイベントから一定時間を経過するまでは「動作」を行わない、という形も考えられます。

これですと、素早いリサイズ動作の場合はリサイズ終了後一定時間が経過してから「動作」が行われることになります。タイマーによる間隔よりもゆっくりとリサイズした場合には、リサイズ中に何度か「動作」が行われます。

なお、いずれの方法でも、リサイズ終了時にはタイマーによる間隔よりも素早く反応することができません。「動作」の内容によってはリサイズ中の「動作」を最小限にし、リサイズ終了時に素早く「動作」を行うことも可能ですが、それが可能かどうかは「動作」の内容に依存するのでここでは省略します。

投稿日時 - 2005-07-08 15:57:28

あなたにオススメの質問