msgboxの閉じるボタンを非表示にしたいです。調べた限りでは、winapiをhookするところまでは認識しております。vb 6.0ではサンプルがあったのですが、vb 2005用にうまく変更できませんでした。サンプル等の情報があると助かります。環境OS :windows XPコンパイラ:visual studio 2005よろしくお願いいたします。
> 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
返信遅くなりました。ご連絡ありがとうございます。下記に回答させていただきます。> どこにありましたか? リンクでも貼って頂くとあるいは...。以下のリンクを参考に作ろうとしたのですが動きませんでした。おそらくvb6.0用サンプルでvb2005の場合は多少変更が必要だと思うのですが、変更方法がわかりませんでした。http://www.gizcollabo.jp/vbtomo/log/archive/vbqanda2_617_3.html> > MsgBox で一風変わった事をしたいなら、フォーム等で自作するのが定説のようです。> 上記調べた限りでは認識しております。ですが、以前作成済みのプログラムを使用しており、毎回MsgBox()を呼んでいたため、修正量が多くなってしまいます。できればフォームの新規作成はしたくないです。> 一応、Win32 API 関数を使ってウィンドウスタイルを書き換えると閉じるボタンを削除> する事はできます。(Me.ControlBox = False のような状態に)上記の説明はMsgBoxに対してでしょうか?フォームに対してでしょうか?MsgBoxに対してスタイルの変更でできる方法があれば教えてください。
> 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
返信遅くなりました。ご連絡ありがとうございます。下記に回答させていただきます。> > 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のスタイル変更に挑戦しようと思います。今回初めて投稿させていただきましたが、説明不足で分かりにくく失礼しました。また、機会がありましたら、教えていただきたいと思います。