- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SetWindowPosについて)
SetWindowPosについて
このQ&Aのポイント
- 背面フォーム内の処理をタイマ割込みやループなどで処理しつつ、前面でフォームを表示する場合、SetWindowPosのAPIを使用します。しかし、モーダルフォームを前面表示したときと同じように、背面での処理が走らないことがあります。
- 背面フォーム内の処理を実行しつつ、前面でフォームを表示する場合、SetWindowPosのAPIを使います。しかし、背面での処理が正しく走らず、解決方法がわかりません。
- 背面フォーム内の処理を実行しながら、前面でフォームを表示する場合、SetWindowPosのAPIを使用します。しかし、背面での処理が正常に実行されません。解決策を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
状況を推測すると、 2つのフォームがあり、背面フォームから前面フォームをモードレスで表示し、 背面フォームで時間のかかる処理を実行すると、前面フォームが反応しない、 ということでしょうか。 VB6なら時間のかかる処理にDoEventsを散りばめるといった解決案になると思います。
お礼
kmb01さん、ご回答ありがとうございます。原因が分かったのですが、補足でご説明したいと思います。恐れ入りますが、補足をご覧頂いてもう一度ご助言いただけますと幸いです。
補足
ビット出力と前面フォームの関係です。 sub main() frmA.Show 'frmAフォームを表示 Do 'ビット出力処理 DoEvents Loop end sub '----------------------------------------- sub cmdB_Click() 'frmAのcmdBコマンドボタンでfrmCを表示 Response = "" 'frmCでのイベントによる変数 frmC.Show 'frmCフォームを表示 Do Response = "" 'frmCから値を得るまでループ Doevents Loop if Response <> "" then '戻り値別の処理 end if end sub '----------------------------------------- 上記は要点だけなので、分かり易く単純化してあります。 問題点は、frmCのイベントにて値が格納される "Response"を確実に得るまでの間ループすることです。 当初SetWindowPosと思われたのですが、もっと単純な部分でのつまずきでした。上記のビット出力処理というのは、どういう状況でも常に実行されなくてはならない箇所(背面処理)で、フォームから発生させるイベントはDB更新やファイル作成など、データ処理をユーザの任意で行うもの(前面処理)で、"Response"を得ないとfrmCを閉じて他の処理へは進めないようにしたいが、背面処理は行いたいというイメージです。