• ベストアンサー

シフトを使った隠れメニューを作るには?

みなさま、いつも助けていただいてありがとうございます。 よくEXCELなどで、シフトを押しながらプルダウンメニューをクリックすると、普段は出ていないメニューが見えるようになりますが、VB6でこれを実現する方法はありませんでしょうか? メニューエディタで作るとm1とかm2とか生成されますが、そのclickイベント発生時にSHIFTキーが押されているかどうかを判別してm13.visible=trueのようにすればいいと思うのですが、その判別方法がわかりません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

WindowsAPIのGetKeyState()を使うのが簡単だと。 ちなみに、VK_SHIFTは&H10です。

参考URL:
http://www.vbvbvb.com/jp/gtips/0151/gGetKeyStateVkControl.html
natai
質問者

補足

ありがとうございます。SHIFTキーの取得はできました。 ただ、今度は「親メニューからはvisibleプロパティーを設定できません」というエラーが出るようになりました。 他の見えないボタンを作ったり、FUNCTIONを作ったりしてm13.visible=trueを実現したいのですが、それでも同じメッセージができます。 何かいい方法ないでしょうか?

その他の回答 (1)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

SHIFT CTRL はメニューが表示中には拾えません。 これはVBだからと言うわけでなく、CでAPIでガチガチに書いても、同じくだと思います。 というのは、WindowsからはVK_SHIFTなどは送られているのですが、フォームをフックしても、情報が拾えないのです。メニューの表示中にキーイベントで、フォームで得る値はWM_ENTERIDLEだけです。 唯一考えられる方法としては、フォームをフックするのではなくOSをフックする方法ですが、かなりキツイッす。 私の個人の考えでは(逃げじゃなくて本心で)、、、 「SHIFTを押しながら選択すると機能が変わる」 のではなく 「SHIFTあり/なしでは、表示するメニューが違う」 といった方がスマートに思えます。

natai
質問者

お礼

回答ありがとうございます。 確かにEXCELでは新しいメニューが現れるのではなく「コピー」が「画像のコピー」に変わるだけですね。 結局、別のボタンのシフト&クリックで隠しメニューを出現させる仕様にしました。