tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルmsgboxの閉じるボタンを非表示にしたい
記事No10409
投稿日: 2011/01/15(Sat) 11:25
投稿者ユウハク
msgboxの閉じるボタンを非表示にしたいです。

調べた限りでは、winapiをhookするところまでは認識しております。
vb 6.0ではサンプルがあったのですが、vb 2005用にうまく変更できませんでした。

サンプル等の情報があると助かります。

環境
OS        :windows XP
コンパイラ:visual studio 2005

よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: msgboxの閉じるボタンを非表示にしたい
記事No10410
投稿日: 2011/01/16(Sun) 16:56
投稿者花ちゃん
> msgboxの閉じるボタンを非表示にしたいです。

このような要望はあまり聞いた事がないのですが、無効にしたのではだめなのですか?
又、このような仕様が必要な理由はどう言った事でしょうか?

>
> 調べた限りでは、winapiをhookするところまでは認識しております。
VB2005 なら下記のようにWndProcメソッドのオーバーライドをしてメッセージを
捕まえればいいかと。(VB6.0 よりは簡単で安全かと)
http://www.atmarkit.co.jp/fdotnet/dotnettips/467wndproc/wndproc.html

> vb 6.0ではサンプルがあったのですが、vb 2005用にうまく変更できませんでした。
どこにありましたか? リンクでも貼って頂くとあるいは...。
又は、どの部分が移行出来なかったとかを説明されると回答も付き易いかと。

MsgBox で一風変わった事をしたいなら、フォーム等で自作するのが定説のようです。
(後から色々欲が出てきてあれもしたいこれもしたいとなるので)
一応、Win32 API 関数を使ってウィンドウスタイルを書き換えると閉じるボタンを削除
する事はできます。(Me.ControlBox = False のような状態に)
ついでに表示位置の設定や自動で閉じる位までならWin32API関数が扱えるなら簡単かと。
 http://www.hanatyan.sakura.ne.jp/samplepic/myMsgBox.gif

[ツリー表示へ]
タイトルRe^2: msgboxの閉じるボタンを非表示にしたい
記事No10413
投稿日: 2011/01/17(Mon) 15:43
投稿者ユウハク
返信遅くなりました。
ご連絡ありがとうございます。
下記に回答させていただきます。

> どこにありましたか? リンクでも貼って頂くとあるいは...。
以下のリンクを参考に作ろうとしたのですが動きませんでした。
おそらくvb6.0用サンプルでvb2005の場合は多少変更が必要だと思うのですが、
変更方法がわかりませんでした。

http://www.gizcollabo.jp/vbtomo/log/archive/vbqanda2_617_3.html

>
> MsgBox で一風変わった事をしたいなら、フォーム等で自作するのが定説のようです。
>
上記調べた限りでは認識しております。
ですが、以前作成済みのプログラムを使用しており、
毎回MsgBox()を呼んでいたため、修正量が多くなってしまいます。
できればフォームの新規作成はしたくないです。

> 一応、Win32 API 関数を使ってウィンドウスタイルを書き換えると閉じるボタンを削除
> する事はできます。(Me.ControlBox = False のような状態に)
上記の説明はMsgBoxに対してでしょうか?フォームに対してでしょうか?
MsgBoxに対してスタイルの変更でできる方法があれば教えてください。

[ツリー表示へ]
タイトルRe^3: msgboxの閉じるボタンを非表示にしたい
記事No10414
投稿日: 2011/01/17(Mon) 17:38
投稿者花ちゃん
> http://www.gizcollabo.jp/vbtomo/log/archive/vbqanda2_617_3.html
上記は、非表示(削除)ではなくグレイアウトにして無効にしているかと思うのですが?
最初にも書いたように理由やどのようにしたいのかをハッキリ言って頂かないと、試して
回答しても違うと何もならないし。方法も当然違ってくるし。又下記のような事もあるし
http://okwave.jp/qa/q2776718.html

> 上記調べた限りでは認識しております。
> ですが、以前作成済みのプログラムを使用しており、
> 毎回MsgBox()を呼んでいたため、修正量が多くなってしまいます。
> できればフォームの新規作成はしたくないです。
上記でも書いておられたように特別な理由がなければ、現状のメッセージボックスを
使っても問題がないかと思うのですが? どこか問題でもあるのでしょうか?

> 上記の説明はMsgBoxに対してでしょうか?フォームに対してでしょうか?
試した結果の画像をリンクしておいたはずですが
 http://www.hanatyan.sakura.ne.jp/samplepic/myMsgBox.gif

>毎回MsgBox()を呼んでいたため、修正量が多くなってしまいます。
>できればフォームの新規作成はしたくないです。
フォーム等を使って作った方が早いし簡単だからどこの回答でもそのような回答になって
いるのであって、現状のメッセージボックスを書き換えた方が早くできるなら試して
見て下さい。

> MsgBoxに対してスタイルの変更でできる方法があれば教えてください。
メッセージボックスのウィンドウのハンドルを取得して、GetWindowLong で現在の
ウィンドスタイルを取得して、変更したいウィンドスタイルに書き換え SetWindowLong で
ウィンドウのスタイルを設定してやればウィンドウのハンドルをもっているコントロールや
フォームの形を変更する事ができます。
 http://hanatyan.sakura.ne.jp/samplepic/vb6_151.htm

但し、Win32 API関数の知識がないとチョットやっかいかも知れません。VB2005 あたりで
メッセージボックスを拡張しているようなサンプルは見当たらなかったし時間かけてやる
ような事でもないのかもしれません。(だからサンプルも見つからない)
まずは、先にリンクしておいたサイトのフォームの閉じるボタンの無効化からやって
みてはどうでしょうか?
http://www.atmarkit.co.jp/fdotnet/dotnettips/467wndproc/wndproc.html

[ツリー表示へ]
タイトルRe^4: msgboxの閉じるボタンを非表示にしたい
記事No10415
投稿日: 2011/01/22(Sat) 19:36
投稿者ユウハク
返信遅くなりました。
ご連絡ありがとうございます。
下記に回答させていただきます。

> > http://www.gizcollabo.jp/vbtomo/log/archive/vbqanda2_617_3.html
> 上記は、非表示(削除)ではなくグレイアウトにして無効にしているかと思うのですが?
> 最初にも書いたように理由やどのようにしたいのかをハッキリ言って頂かないと、試して
> 回答しても違うと何もならないし。方法も当然違ってくるし。又下記のような事もあるし
> http://okwave.jp/qa/q2776718.html
上記は「閉じる」ボタンを無効するプログラムなんですね。
「閉じる」を非表示にしたいので意味なかったです。

> > 上記調べた限りでは認識しております。
> > ですが、以前作成済みのプログラムを使用しており、
> > 毎回MsgBox()を呼んでいたため、修正量が多くなってしまいます。
> > できればフォームの新規作成はしたくないです。
> 上記でも書いておられたように特別な理由がなければ、現状のメッセージボックスを
> 使っても問題がないかと思うのですが? どこか問題でもあるのでしょうか?
顧客要望でほかに納品しているプログラムはフォームを使っていて「閉じる」ボタンはありませんでした。そのため、統一してほしいとのことでした。
>
> > 上記の説明はMsgBoxに対してでしょうか?フォームに対してでしょうか?
> 試した結果の画像をリンクしておいたはずですが
>  http://www.hanatyan.sakura.ne.jp/samplepic/myMsgBox.gif
上記ですよね。ありがとうございます。上記のようにしたいです。
ただそのやり方もこのページにあればうれしかったのですが、、(欲張りですいません。)
>
> >毎回MsgBox()を呼んでいたため、修正量が多くなってしまいます。
> >できればフォームの新規作成はしたくないです。
> フォーム等を使って作った方が早いし簡単だからどこの回答でもそのような回答になって
> いるのであって、現状のメッセージボックスを書き換えた方が早くできるなら試して
> 見て下さい。
確かにそうですね。

> > MsgBoxに対してスタイルの変更でできる方法があれば教えてください。
> メッセージボックスのウィンドウのハンドルを取得して、GetWindowLong で現在の
> ウィンドスタイルを取得して、変更したいウィンドスタイルに書き換え SetWindowLong で
> ウィンドウのスタイルを設定してやればウィンドウのハンドルをもっているコントロールや
> フォームの形を変更する事ができます。
>  http://hanatyan.sakura.ne.jp/samplepic/vb6_151.htm
>
> 但し、Win32 API関数の知識がないとチョットやっかいかも知れません。VB2005 あたりで
> メッセージボックスを拡張しているようなサンプルは見当たらなかったし時間かけてやる
> ような事でもないのかもしれません。(だからサンプルも見つからない)
> まずは、先にリンクしておいたサイトのフォームの閉じるボタンの無効化からやって
> みてはどうでしょうか?
> http://www.atmarkit.co.jp/fdotnet/dotnettips/467wndproc/wndproc.html

結局今回は簡単ではないことを顧客に説明して現状維持としました。

フォームでの「閉じる」の削除はできることを確認しました。
時間ができたらMegboxのスタイル変更に挑戦しようと思います。

今回初めて投稿させていただきましたが、説明不足で分かりにくく失礼しました。
また、機会がありましたら、教えていただきたいと思います。

[ツリー表示へ]