none
メニューバーの閉じる(×)ボタンを無効化にする方法 RRS feed

  • 質問

  • はじめまして。

     

    現在、Access2007 Vista環境にて開発を行っています。

    フォームを実行した際に、

    Accessのメニューバー(アプリケーションタイトルの右端)の閉じるボタン(×)を

    非表示にしたいと思っております。

     

    Declare Function GetSystemMenu Lib "user32" (ByVal hwnd as long,ByVal bRevert as Long) as Long

     

    Declare Function RemoveMenu Lib "user32" (ByVal hMenu as long,_

                                        ByVal nPosition as Long, ByVal wFlag as Long) as Long 

     

     

    Public Function DSP_RemoveMenu(hwnd as Long) as Integer

    Const MF_BYCOMMAND = &H0&

    Const SC_CLOSE = &HF060&

     

    Dim lngret as Long

     

    DSP_RemoveMenu = False

     

    hwnd = GetSystemMenu(hwnd,0)

    lngret = RemoveMenu(hwnd,SC_COLSE,MF_BYCOMMAND)

     

    DSP_RemoveMenu = True

     

    Exit Function

     

    として、呼び出し元で、

     

    DSP_RemoveMenu(hWndAccessApp)

     

    としています。

    上記を実行すると、Win XP、Access2003環境では、×ボタンが非表示になります。

    lngret(戻り値)=1 になっています。

     

    そのまま、互換モードで、Access2007、Vista環境で実行すると、

    メニューバーを右クリックした時にでる『閉じる』は非表示になりますが、

    ×ボタンは、有効化されたままになってしまいます。

    lngret(戻り値)=0 になっています。

     

    もし、ご存知の方がいらっしゃいましたら、

    ご教授願えませんでしょうか?

     

     

    2008年11月18日 7:05

回答

  • こんにちは。フォーラムオペレータ大久保です。

     

    こういうKBがあるんですが、(ご存じのことと思います)

     

    アプリケーション ウィンドウの閉じるボタンおよび [ファイル] メニューの [終了] を無効にする方法

    http://support.microsoft.com/default.aspx/kb/300688

     

    このKBの方法も、同じAccess2007でも、環境によってうまくいかないようですね。

     

    OK: Vista (Aero)+Access2007

    NG: Vista (not Aero) +Access2007

    NG: Windows XP+Access2007

     

     

    どうやら、これに関しては修正プログラムがあるようです。(機械翻訳です。すごいです。申し訳ありません)

     

    2007 Office システム修正プログラム パッケージ (Mso.msp): 2008 年 8 月 26 日

    http://support.microsoft.com/default.aspx/kb/956506

     

    「概要」の部分に、「WindowsXPベースのコンピュータだと KB300686 のサンプルが動作しない」と言いたげな文章が載ってます。

    もしできれば、この修正プログラムを適用してお試しください。

     

    なお、この修正プログラムを適用していても、旧バージョンのAccessで作ったカスタム メニューバーでは動作しないそうです。

    この場合は回避方法がないっぽいので、フォームまたはレポートの Unload で CancelEvent すれば、アプリケーション ウィンドウの閉じボタンを押されてAccessが終了しようとしても、閉じられないフォームがあるので終わることができない などの方法で逃げるしかないかと。。。

    (ほんとに終わらせたいときの工夫が必要なのであれこれ手間がかかるとは思います)


    おためしください~

    2008年11月20日 8:15

すべての返信

  •  ぱんだ×2 さんからの引用

    そのまま、互換モードで、Access2007、Vista環境で実行すると、

    メニューバーを右クリックした時にでる『閉じる』は非表示になりますが、

    ×ボタンは、有効化されたままになってしまいます。

    lngret(戻り値)=0 になっています。

    EnableMenuItemで解決しますか?

    http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=2701823&SiteID=7

     

     

    #ちなみに、メニューバーではありません。タイトルバーとかそんな感じで呼ばれます。

    2008年11月18日 14:00
    モデレータ
  • お返事ありがとうございます。

     

     Azulean さんからの引用

     

    EnableMenuItemで解決しますか?

    http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=2701823&SiteID=7

     

     

    #ちなみに、メニューバーではありません。タイトルバーとかそんな感じで呼ばれます。

     

    EnableMenuItemでも、×ボタンの変化はありませんでした。

    右クリックのメニューは、ちゃんとグレーアウトしましたけど・・・

     

    タイトルバーですか。

    そうなのですね。ご指摘ありがとうございます。

    2008年11月19日 2:03
  •  ぱんだ×2 さんからの引用

    EnableMenuItemでも、×ボタンの変化はありませんでした。

    右クリックのメニューは、ちゃんとグレーアウトしましたけど・・・

    あれ?押せなくなってたりもしないってことでしょうか?

     

    ところで、このスレッドのタイトルは「無効化」ですが、本文では「非表示」と記載されています。

    どちらが望みなのでしょうか?それとも、どちらでもOKなのでしょうか?

    2008年11月19日 13:54
    モデレータ
  • 出来れば、非表示にしたいのですが、

    無理であれば、押せなくなる(無効化)だけでも良いです。

     

    色々試していたら、×ボタンがある部分に、

    2000とかのデザインの×ボタンが出てきて・・・

    でも、カーソルを持って行くと、それは消えて・・・みたいな・・・

     

    文字だけで、表現するのが難しいことがおきました。

    しかも、出たり出なかったりなので、再現が難しいです。

     

    ここと同じ現象になりました。

    http://www.accessclub.jp/bbs2/0109/beginter32997.html

     

     

    2007は、今までとはタイトルバーの構造が違うような気がしてきました。

    タイトルバーを右クリックした時に出てくるメニュー(?)は消えるので。

     

     

    2008年11月20日 5:44
  • こんにちは。フォーラムオペレータ大久保です。

     

    こういうKBがあるんですが、(ご存じのことと思います)

     

    アプリケーション ウィンドウの閉じるボタンおよび [ファイル] メニューの [終了] を無効にする方法

    http://support.microsoft.com/default.aspx/kb/300688

     

    このKBの方法も、同じAccess2007でも、環境によってうまくいかないようですね。

     

    OK: Vista (Aero)+Access2007

    NG: Vista (not Aero) +Access2007

    NG: Windows XP+Access2007

     

     

    どうやら、これに関しては修正プログラムがあるようです。(機械翻訳です。すごいです。申し訳ありません)

     

    2007 Office システム修正プログラム パッケージ (Mso.msp): 2008 年 8 月 26 日

    http://support.microsoft.com/default.aspx/kb/956506

     

    「概要」の部分に、「WindowsXPベースのコンピュータだと KB300686 のサンプルが動作しない」と言いたげな文章が載ってます。

    もしできれば、この修正プログラムを適用してお試しください。

     

    なお、この修正プログラムを適用していても、旧バージョンのAccessで作ったカスタム メニューバーでは動作しないそうです。

    この場合は回避方法がないっぽいので、フォームまたはレポートの Unload で CancelEvent すれば、アプリケーション ウィンドウの閉じボタンを押されてAccessが終了しようとしても、閉じられないフォームがあるので終わることができない などの方法で逃げるしかないかと。。。

    (ほんとに終わらせたいときの工夫が必要なのであれこれ手間がかかるとは思います)


    おためしください~

    2008年11月20日 8:15
  • Office 2007がリボンを採用した独自のフレームだから、通常の手法が効かない可能性を考慮できていませんでした。orz

    目的に合わないレスでお手数をおかけしました。

    2008年11月20日 13:51
    モデレータ
  • 大久保直美さん、Azuleanさん 回答有難うございました。

     

    パッチを当ててみましたが、やはり上手く行きませんでした・・・

     

    Vista (not Aero) +Access2007の環境では、ダメみたいですね。

     

    ×ボタンで閉じられても、システムには取り合えず問題はないので、

    そのままにしたいと思います。

     

     

    2008年11月21日 2:36
  • だめでしたか…うーん残念です。

    Aero 環境では問題なく動くっぽいんですけど…環境依存では使えないですよね。

     

    ご連絡いただきありがとうございました!またよろしくお願いします。

    2008年11月21日 8:13
  • 追記:

     

    Aeroを有効にしたところ、(Vista + Access2007)

    RemoveMenuが有効になりました。

     

    しかし、タイトルバーの×ボタン自体は残ったままです。

    ×ボタンは押せるのに、閉じない。

     

    ユーザーに混乱を与えそうですね・・・

     

    なので、EnableMenuItemを使おうかと思っています。

    これだと、右クリックの閉じるも、×ボタンもグレーになり、押せなくなりました。

     

    以上、ご報告まで。

     

     

    2008年11月26日 8:16