- PR -

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

投稿者投稿内容
Beatle
ぬし
会議室デビュー日: 2003/06/09
投稿数: 394
投稿日時: 2005-07-14 10:34
引用:

McLarenさんの書き込み (2005-07-14 09:18) より:

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

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




ああ、やっぱり...

で、ほんとにシステムモーダルな画面で良いのでしょうか?
vbp2.exeも中断されますが...

もしそうなら、VC++か何かでモーダルダイアログを出すものを作って
呼び出すとか、ActiveXを使うとかぐらいしか思いつかないですね。

ただ、vbp2の処理を中断するのでは無く、GUI操作のみだったら、
メッセージフック等をすれば実現できるかと。

この2つの関係のみなら、単純にVBP2.exeのウィンドウハンドルを取得して、
SendMessage等で非表示またはDisableに変えるという事でも実現できるかも。
(自分のexeの方は開いているフォームをdisableにするだけです。)
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2005-07-14 10:41
> ただ、vbp2の処理を中断するのでは無く、GUI操作のみだったら、
> メッセージフック等をすれば実現できるかと。

は!まさにそのイメージです!GUI操作だけで十分です。
「メッセージフック」なども検索の途中に出てきたのですが、何のことかわかりませんでした。。

 大変お手数ですが、私にでもわかるようなコーディング例を載せていただけませんでしょうか。。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-07-14 11:28
引用:

McLarenさんの書き込み (2005-07-14 10:41) より:
は!まさにそのイメージです!GUI操作だけで十分です。
「メッセージフック」なども検索の途中に出てきたのですが、何のことかわかりませんでした。。

 大変お手数ですが、私にでもわかるようなコーディング例を載せていただけませんでしょうか。。


でも別プロセスのメッセージをフックするのは、VB6.0では無理と言うか、無茶と言うか、無謀と言うか・・・。インプロセスCOM(ActiveX DLL)にすれば出来ますけど、IDE上ではまともにデバッグできませんよ。

Windowsからシステムモーダルなウィンドウと言う概念が無くなって久しいです。GUI操作を禁止したいのだろうと思ったから「画面をキャプチャーして、全画面表示したウィンドウに描画してあげれば?」と提案したわけなんですが。だめですか?OSのスタートメニューの電源を切るでも、似たようなことやってるし良いんじゃないかなぁと。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2005-07-14 12:52
McLarenさん、こんにちは。

システムモーダルに見せたいのなら、甕星さんの提案する方法に一票。

そうではなくて、あくまでもForm1、Form2、wnd3の中だけで一つだけ有効にしたいフォームがあるんなら、単に他のフォームを無効にして、前面に出ないようにすれば良いんじゃないかと思います。

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