- - PR -
VB6初心者です。モーダルフォームを表示したいのですが。。
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-07-13 15:06
お世話になります。VB6で
Form1から、Form2をLoadして Form2.show vbModal, Me とすると、VBPの中で作成したフォームの中でのモーダルフォームが表示できます。そして親であるForm1を落とすとForm2も消えてくれます。 そこで、今回全く別のexeが表示したウィンドウ(以後「wnd3」と呼ぶ)の親をForm1にしたいのです。 期待する動きとしては、Form2は、Form1、Form2、wnd3の中でモーダルとして表示され、Form1を終了すると3つのウィンドウが終了するという具合です。 wnd3のウィンドウハンドルは取れるのですが、その後何を使ってどうすればよいかの検討がつきません。SetParent()やSetWindowLong()を使うのでしょうか。。何卒ご教授よろしくお願いします。 | ||||||||
|
投稿日時: 2005-07-13 15:34
モーダルフォームを開いた状態なのに、Form1を終了したりできるんですか? | ||||||||
|
投稿日時: 2005-07-13 16:35
説明が足りませんでした。。
Form2が表示されているうちは当然落とせません。 wnd3が表示されているときにForm1を落とせば・・・いや、やはり話がややこしいので 「期待する動きとしては、Form2は、Form1、Form2、wnd3の中でモーダルとして表示される」 に変更いたします。こちらがメインですので。。すみませんでした。 | ||||||||
|
投稿日時: 2005-07-14 05:39
自分自身の子?Form2を表示するForm2はどこから表示され、その違いはどうやって見分けるのでしょう? _________________ | ||||||||
|
投稿日時: 2005-07-14 07:33
これはほぼ不可能に近いです。仮にAPIで親ウィンドウのハンドルを無理やり書き換えたとして、正常に動作するか否か怪しいものです。
1.画面上の内容をキャプチャー 2.フルスクリーンの常に再前面に表示なウィンドウ(FormX)を表示 3.ウィンドウにはキャプチャーした画面の内容を描画 4.FormXを親とするFormYをモーダル表示 ・・・とかじゃ駄目? _________________ 甕星 <mikahosi@abox9.so-net.ne.jp> http://blogs.msmvp.jp/mikahosi/ | ||||||||
|
投稿日時: 2005-07-14 08:40
お世話になります。
引用: -------------------------------------------------------------------------------- 「期待する動きとしては、Form2は、Form1、Form2、wnd3の中でモーダルとして表示される」 -------------------------------------------------------------------------------- Jitta様、甕星様、言葉足らずでした。。構成を整理させていただきます。 VB6で作ったexeが二つあります。 1.vbp1.exe +Form1(Form2を開くためのボタンが一つと、Form_Load時にvbp2.exeを実行) +Form2(Form1からのみ開かれる。閉じるボタンのみ。 これが開いている間はForm1もForm3も触れない。) 2.vbp2.exe +Form3(ウィンドウキャプションはwnd3) ※vbp2.exeは誰が作ったかわからない、ソースなしのexeのみです。 私の説明能力不足で混乱させてしまいました。。こちらで伝わりますでしょうか。。 | ||||||||
|
投稿日時: 2005-07-14 09:01
ん〜、つまりはForm2をVbModalではなくSystemModalとしたいという訳ですね?
確か、VB6じゃVBのshowのオプションではSystemModalは指定できなくなった と思います。もし、やるならAPIを使うしか無いでしょうね。(最近のOS上 で試したことが無いので不確かですが) ただし、「親を閉じたら、子も閉じる」というのは全く別ですよ。 通常はモーダル画面を表示させるということは、他の画面や処理を一時停止 させる(操作させない)ということです。 それが、「モーダル画面を表示中に他の画面やexeを停止(処理)させる」という ような割り込み等が発生する要件であれば、モーダル画面を使っちゃダメです。 モーダル画面では無く、「表示している間他の画面のGUI上の操作をできなくする」 という制御をしましょう。(タイマーイベントや割り込み系のイベントは受け付け るように) | ||||||||
|
投稿日時: 2005-07-14 09:18
> ただし、「親を閉じたら、子も閉じる」というのは全く別ですよ。
はい。反省しております。こちらはなかったことにしてください。。 > ん〜、つまりはForm2をVbModalではなくSystemModalとしたいという訳ですね? はい、そのとおりです!しかしSetSysModalWindow()というAPI関数がWIN32ではマルチタスクの何とかに矛盾するとかなんとかで削除されていているようでしたので、それならvbp1.exeとvbp2.exeの中でのモーダル表示はできないか。。という発想で投稿させていただきました。 なんとか良い方法はないでしょうか。。 |