| 日時: 2010/01/21 14:03名前: 花ちゃん
 
************************************************************************************ カテゴリー:[メッセージ][][]                                                    *
 * キーワード:システムモーダル,MsgBoxStyle.SystemModal,MsgBox,最前面,          *
 ***********************************************************************************
 タイトル : システムモーダルメッセージボックスのアイコンの変更方法
 記 事 No : 9792
 投 稿 日 : 2010/01/16(Sat) 12:44
 元質問者 : こたろう
 
 ----------------------------------------------------------------------------------
 投 稿 日 : 2010/01/19(Tue) 23:21
 回 答 者 : 魔界の仮面弁士
 
 > MsgBox("テスト", MsgBoxStyle.SystemModal)
 メッセージボックスのスタイルは OS によっても差異があるため、
 アイコン等の細かい制御が必要なのであれば、
 フォーム等で自作される事をお奨めします。
 
 
 > メッセージボックスの動作としては、システムモーダルがいいので、
 > “システムモーダル以外に”というのはなしでお願いします。
 その没案の「システム モーダル以外」を使うという話になってしまうのですが、
 『最前面表示させたアプリケーション モーダル』を使うのはどうでしょう?
 
 Const MB_TOPMOST As Integer = &H40000
 MsgBox("アプリケーション モーダル With TopMost", MB_TOPMOST Or vbApplicationModal)
 http://msdn.microsoft.com/ja-jp/library/cc410914.aspx
 
 (MB_TOPMOST を指定するなら、MessageBox API を使った方が良いかも)
 
 あるいは、MessageBox.Show で MessageBoxOptions.ServiceNotification とか。
 
 ----------------------------------------------------------------------------------
 投 稿 日 : 2010/01/21(Thu) 13:21
 回 答者 : 魔界の仮面弁士
 
 # 追記
 
 Option Strict On で実行していた場合、Integer のままだとエラーになりますので、
 > Const MB_TOPMOST As Integer = &H40000
 の部分は、
 Const MB_TOPMOST As MsgBoxStyle = CType(&H40000, MsgBoxStyle)
 の方が良いかもしれません。
 
 
 > MsgBox("アプリケーション モーダル With TopMost", MB_TOPMOST Or vbApplicationModal)
 追試してみたところ、Form 等から呼び出した場合と、コンソールアプリから呼び出した場合とでは、
 上記の結果が微妙に変わってくるようです。コンソールからだと、最前面にならない事があります。
 
 その場合には、MB_TOPMOST だけでなく、vbMsgBoxSetForeground (あるいは、
 MsgBoxStyle.MsgBoxSetForeground) も一緒に指定しておくと、求める結果に
 近くなるかと思います。
 
 
 Const MB_TOPMOST As MsgBoxStyle = CType(&H40000, MsgBoxStyle)
 MsgBox("Test1")
 MsgBox("Test2", vbMsgBoxSetForeground)
 MsgBox("Test3", MB_TOPMOST)
 MsgBox("Test4", MB_TOPMOST Or vbMsgBoxSetForeground)
 MsgBox("Test5", vbSystemModal)
 
 それぞれ微妙に結果が異なりますので、期待する動作に近いものを選んでみてください。
 その結果、どれも期待する結果にならないのであれば、同等の画面を自作された方が良いでしょう。
 
  |