tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルListView_ClickでMsgBox表示
記事No14200
投稿日: 2009/10/29(Thu) 18:10
投稿者ぷー
DLL内のフォームのListViewのClickイベントで
MsgBoxを出すとフォームが背面へ移動してしまいます。
(DLLを生成している親にあたる画面が最前面となります。)

MsgBoxを閉じると、裏に行ってしまった画面が最前面に
戻ってきます。

CommandButtonのClickイベントだと大丈夫なのですが・・・

OS:Windows NT 4.0 SP6a
VB:6.0 SP4

[ツリー表示へ]
タイトルRe: ListView_ClickでMsgBox表示
記事No14201
投稿日: 2009/10/29(Thu) 19:18
投稿者ぷー
> CommandButtonのClickイベントだと大丈夫なのですが・・・

Timerを使ったりいろいろ試行錯誤をしております。
今確認したらCommandButtonもダメでした・・・

DLL内の関数(MsgBox以外の処理もいろいろやってる)経由で
MsgBoxを出していた時はListViewはNG、CommandButtonはOKという
状態だったのですが・・・

その関数内で画面アクセスの有無とかによって変わってくるんですかねぇ。。。
普通にありそうな処理だと思うんですけどね・・・

補足
 問題のDLLはVBで作ったActiveXDLLです。
 親の画面はActiveXEXEです。
 

[ツリー表示へ]
タイトルRe: ListView_ClickでMsgBox表示
記事No14204
投稿日: 2009/10/30(Fri) 07:26
投稿者花ちゃん
> DLL内のフォームのListViewのClickイベントで
> MsgBoxを出すとフォームが背面へ移動してしまいます。

MsgBox が最前面に表示される?

> (DLLを生成している親にあたる画面が最前面となります。)

親にあたる画面が最前面に表示される?

> MsgBoxを閉じると、裏に行ってしまった画面が最前面に
> 戻ってきます。
この時は、どの画面が最前面?


画面の表示がどのように順に表示され、どのように表示したいのかが、今一説明では
理解できませんが?

下記等で表示したい位置に配置してみては。
http://hanatyan.sakura.ne.jp/vbhlp/pri_form.htm

MsgBox が最前面に表示されないなら、VbMsgBoxSetForeground を付加するとか。

下記を使用するとか。
http://hanatyan.sakura.ne.jp/patio/read.cgi?no=101

[ツリー表示へ]
タイトルRe^2: ListView_ClickでMsgBox表示
記事No14205
投稿日: 2009/10/30(Fri) 15:12
投稿者ぷー
説明不足で申し訳ありません。

プロジェクトA:ActiveX Exe(親画面)
プロジェクトB:ActiveX Dll(子画面)
プロジェクトC:ActiveX Dll(メッセージ画面)

プロジェクトAのMDIフォームのツールバーのアイコンクリック

プロジェクトAのクラスからプロジェクトBの起動用クラスのメソッド呼び出し

プロジェクトBの子画面起動

プロジェクトBのListViewクリック

クリックイベントから呼ばれた関数でプロジェクトCのメッセージ表示メソッド呼び出し


この流れでプロジェクトCのメッセージ画面が最前面になりますが、
その際に、プロジェクトBの画面がプロジェクトAの後ろに行ってしまいます。
(上からC、A、Bの順)
プロジェクトCのメッセージ画面を閉じると、
プロジェクトBが前面に戻ってきます。
(上からB、Aの順)

調査の為、最小限の構成でサンプルを作ってみたのですが、
再現はしませんでした。

SetWindowPosでプロジェクトBの画面を最前面に表示させてから、
プロジェクトCのメッセージ画面を最前面に表示させる・・・
という方法だと一見良さそうなのですが、
メッセージ画面のActiveControlがNothingなので、
メッセージ表示後、EnterキーでOK扱い・・・という操作ができません。

根本原因がわかればベストですが、何か良い方法がないでしょうか・・・

[ツリー表示へ]
タイトルRe^3: ListView_ClickでMsgBox表示
記事No14206
投稿日: 2009/10/30(Fri) 15:52
投稿者花ちゃん
> 調査の為、最小限の構成でサンプルを作ってみたのですが、
> 再現はしませんでした。

作成した貴方が、再現できるコードが作成できないものを他の人はどのようにして
確認すればいいのでしょうか?

>根本原因がわかればベストですが、何か良い方法がないでしょうか・

最小限の構成から少しづつコードを追加しながら確認すれば、どこのコードで
そのようになるか解るかと思うのですが、試していないのですか?

[ツリー表示へ]