- PR -

VB6初心者です。モーダルフォームを表示したいのですが。。

投稿者投稿内容
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 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()を使うのでしょうか。。何卒ご教授よろしくお願いします。

一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-07-13 15:34
引用:

McLarenさんの書き込み (2005-07-13 15:06) より:
モーダルフォームが表示できます。そして親であるForm1を落とすと


モーダルフォームを開いた状態なのに、Form1を終了したりできるんですか?
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2005-07-13 16:35
説明が足りませんでした。。
Form2が表示されているうちは当然落とせません。

wnd3が表示されているときにForm1を落とせば・・・いや、やはり話がややこしいので

「期待する動きとしては、Form2は、Form1、Form2、wnd3の中でモーダルとして表示される」

に変更いたします。こちらがメインですので。。すみませんでした。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-07-14 05:39
引用:

McLarenさんの書き込み (2005-07-13 16:35) より:

「期待する動きとしては、Form2は、Form1、Form2、wnd3の中でモーダルとして表示される」


自分自身の子?Form2を表示するForm2はどこから表示され、その違いはどうやって見分けるのでしょう?
_________________
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-07-14 07:33
引用:

McLarenさんの書き込み (2005-07-13 15:06) より:
 そこで、今回全く別のexeが表示したウィンドウ(以後「wnd3」と呼ぶ)の親をForm1にしたいのです。


これはほぼ不可能に近いです。仮にAPIで親ウィンドウのハンドルを無理やり書き換えたとして、正常に動作するか否か怪しいものです。

引用:

「期待する動きとしては、Form2は、Form1、Form2、wnd3の中でモーダルとして表示される」


1.画面上の内容をキャプチャー
2.フルスクリーンの常に再前面に表示なウィンドウ(FormX)を表示
3.ウィンドウにはキャプチャーした画面の内容を描画
4.FormXを親とするFormYをモーダル表示
・・・とかじゃ駄目?
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 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のみです。


私の説明能力不足で混乱させてしまいました。。こちらで伝わりますでしょうか。。
Beatle
ぬし
会議室デビュー日: 2003/06/09
投稿数: 394
投稿日時: 2005-07-14 09:01
ん〜、つまりはForm2をVbModalではなくSystemModalとしたいという訳ですね?

確か、VB6じゃVBのshowのオプションではSystemModalは指定できなくなった
と思います。もし、やるならAPIを使うしか無いでしょうね。(最近のOS上
で試したことが無いので不確かですが)

ただし、「親を閉じたら、子も閉じる」というのは全く別ですよ。
通常はモーダル画面を表示させるということは、他の画面や処理を一時停止
させる(操作させない)ということです。
それが、「モーダル画面を表示中に他の画面やexeを停止(処理)させる」という
ような割り込み等が発生する要件であれば、モーダル画面を使っちゃダメです。
モーダル画面では無く、「表示している間他の画面のGUI上の操作をできなくする」
という制御をしましょう。(タイマーイベントや割り込み系のイベントは受け付け
るように)
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2005-07-14 09:18
> ただし、「親を閉じたら、子も閉じる」というのは全く別ですよ。

はい。反省しております。こちらはなかったことにしてください。。

> ん〜、つまりはForm2をVbModalではなくSystemModalとしたいという訳ですね?

はい、そのとおりです!しかしSetSysModalWindow()というAPI関数がWIN32ではマルチタスクの何とかに矛盾するとかなんとかで削除されていているようでしたので、それならvbp1.exeとvbp2.exeの中でのモーダル表示はできないか。。という発想で投稿させていただきました。

なんとか良い方法はないでしょうか。。

スキルアップ/キャリアアップ(JOB@IT)