- 日時: 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)
それぞれ微妙に結果が異なりますので、期待する動作に近いものを選んでみてください。 その結果、どれも期待する結果にならないのであれば、同等の画面を自作された方が良いでしょう。
|