tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルシステムモーダルメッセージボックスのアイコンの変更方法
記事No9792
投稿日: 2010/01/16(Sat) 12:44
投稿者こたろう
MsgBox("テスト", MsgBoxStyle.SystemModal)

↑のコードを実行すると、
システムモーダルでメッセージボックスが表示されます。

この場合、タイトルバーの左側にデフォルトのアイコンが表示されてしまいます。
(システムモーダル以外のメッセージボックスではアイコン自体表示されません。)

このデフォルトのアイコンを指定のアイコンに変更する方法、
もしくは、アイコン自体を消す方法をお教えくださいませんでしようか?

メッセージボックスの動作としては、システムモーダルがいいので、
“システムモーダル以外に”というのはなしでお願いします。

XP+VB2005

[ツリー表示へ]
タイトルRe: システムモーダルメッセージボックスのアイコンの変更方法
記事No9793
投稿日: 2010/01/16(Sat) 16:52
投稿者花ちゃん
> メッセージボックスの動作としては、システムモーダルがいいので、

その理由も書き添えるようにして下さい。
(このように書くと上の人のような返事が返ってくるかも知れませんが)
そうすれば、下記のように違った解決方法もあるかと。

> “システムモーダル以外に”というのはなしでお願いします。

システムモーダル でなくても最前面に表示されればいいのではないですか?

   Me.TopMost = True
   MessageBox.Show(Me, "テスト")
   Me.TopMost = False

[ツリー表示へ]
タイトル質問したなら、必ず返事を。
記事No9797
投稿日: 2010/01/19(Tue) 21:37
投稿者花ちゃん
質問したなら、たとえ、気に入らないレスであっても返事をするようにして下さい。

返事がなければ、解決されたものとしてこれ以上のレスもつきませんよ。

[ツリー表示へ]
タイトルRe: システムモーダルメッセージボックスのアイコンの変更方法
記事No9798
投稿日: 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 とか。

[ツリー表示へ]
タイトルRe^2: システムモーダルメッセージボックスのアイコンの変更方法
記事No9811
投稿日: 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)

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

[ツリー表示へ]