- ベストアンサー
コマンドボタンについて、、、
おはようございます。 度重なる相談で申し訳ありません、、、 コマンドボタンにフォーカスを合わし、Enterキーを押すとコマンドボタンの内容を実行できるまではできました。しかし、Enterキーを押しても、コマンドボタンは凹まない状態なんです。 Enterキーを押して凹ますには、どんな制御が必要なのでしょうか?是非、アドバイスを下さい。 よろしくお願いします。 ** 環境 ** VB6.0sp5 Win98 IE5.5
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>EnterキーのKeyDown/Keyupと連動させればいいのだが、 >そのイベントが何故か拾えないのが辛い。 良く考えたら、API関数でEnterキーを判定すればよかった。 --- Private Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" _ (ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any) As Long Private Declare Sub Sleep _ Lib "kernel32" ( _ ByVal dwMilliseconds As Long _ ) Private Declare Function GetAsyncKeyState Lib "user32.dll" _ (ByVal vKey As Long) As Integer Private Const BM_SETSTATE = &HF3 Private Sub Command1_Click() 'Enterキーが押された? If (GetAsyncKeyState(vbKeyReturn) And &H8000) Then 'ボタンを凹ます Call SendMessage(Command1.hwnd, BM_SETSTATE, 1, ByVal 0&) 'Enterキーが放されるまで待つ While GetAsyncKeyState(vbKeyReturn) And &H8000 Sleep 100 Wend 'ボタンを戻す Call SendMessage(Command1.hwnd, BM_SETSTATE, 0, ByVal 0&) End If 'ここにイベント処理 Beep End Sub # APIの勉強方法については↓を参考にして下さい
その他の回答 (4)
- todo36
- ベストアンサー率58% (728/1234)
BM_SETSTATEによってボタンを凹ます事は出来ます。 凹ます Call SendMessage(Command1.hwnd, BM_SETSTATE, 1, ByVal 0&) 戻す Call SendMessage(Command1.hwnd, BM_SETSTATE, 0, ByVal 0&) EnterキーのKeyDown/Keyupと連動させればいいのだが、 そのイベントが何故か拾えないのが辛い。
補足
前回に続き、回答していただき本当にありがとうございます。しかも前回は、お名前の打ち間違えまでしてしまい、大変申し訳ありませんでした。(^-^;)ゝ 「BM_SETSTATE」は、APIというものなのでしょうか?todo36さんに教ていただいたサイトの内容に挑戦してみようと思います。 APIはまだ手をつけたことがないために時間がかかると思いますが、必ず結果報告させていただきます。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
コマンドボタンで、凹んだ感じのイメージ処理は誰が行っているのかを考えてみましょう。 まず、コマンドボタンのMouseDownやMouseUpイベントって取れませんよね。また、Enterキーを押してもClickイベントが発生しますよね。 ということは、そこらへんのイベントの処理はすべてコマンドボタン自身が処理を行って、描画もしているということになります。 なので、普通は動作を変更することはできないと考えてください。 (WinAPIを駆使して標準ではないことをやれば可能だとは思いますが) で、Pictureといったのは、PictureBoxコントロールのことです。 つまり、自分でボタンが出ているとき、へこんでいるときの画像を準備してあげれば、マウスイベントやキーボードイベントが受け取れるPictureBoxなら、任意のタイミングで画像を変更することでボタンを凹ませられますよ。 ということです。
お礼
二度にわたり回答を頂くことができ、とても感謝しています。ありがとうございます。 とても親切な説明をしていただいたおかげで、だいぶ理解することができました。APIですか、、、これはちょっと難しい操作ですね(苦笑) PictureBoxコントロールはまだ使ったことがないので、今後の課題とさせていただきます。 もう少し試し、結果報告させていただきます。
補足
無事、解決に至りました。 コマンドボタンのkeydownイベントで「Enterキー」だけが認識できず、苦しんでいました。今回はtodo36様に教えていただいたコードを使うことにしました。 以後のプログラム作成時にはPictureBoxコントロールも頭に入れつつ、コードを組んでみようと思います。 ありがとうございました。今後もよろしくお願いします。
- sienna
- ベストアンサー率35% (51/145)
通常Enterキーではへこみません。 「スペース」キーを押している間のみへこむのではないですか? どうしてもEnterでへこませたいのであればKeyDownで Enterキーを判断して「スペース」キーを送るとか OptionボタンのStyleプロパティをグラフィックスにして 代用するぐらいしか思いつきませんが。
お礼
回答していただき、本当にありがとうございます。 実は、、、「スペース」キーが使えることを全く知らず、「スペース」キーでのクリック状態のような動きを「エンター」キーに求めてしまっていました。(苦笑) KeyDownを試してみましたが、「スペース」キーのように扱うことはできませんでした。KeyCodekの使い方が分からなかったので、アスキーコードも使ってみました。 Private Sub Command2_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then KeyCode = vbKeySpace End If End Sub あとはOptionボタンを使うという手もあったんですね。勉強になりました。
補足
無事、解決に至りました。 コマンドボタンのkeydownイベントで「Enterキー」だけが認識できず、苦しんでいました。今回はtodo36様に教えていただいたコードを使うことにしました。 ありがとうございました。今後もよろしくお願いします。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
普通はへこみませんが・・・ メッセージボックスが出てきたとき、Enter押してへこみますか? どうしてもへこませたいのであれば、Pictureなどで、押される前のイメージ、押されたときのイメージを準備し、マウスイベントやキーボードイベントでイメージを入れ替えることが必要です。
補足
早速の回答をしていただき、本当にありがとうございます。 私の相談の書き方がまずかったですね(苦笑)分かりにくい質問内容になってしまい、申し訳ありませんでした、、、 コマンドボタンをマウスでクリックした時、凹んだ感じのイメージ処理があると思います。Enterキーを押しても、マウスで押したようなイメージにしたかったのですが、これはPictureプロバディ(?)を使うしかないのでしょうか?ちょっと試してみます。
お礼
todo36さまになんて感謝の言葉を述べればよいのか、、、本当に本当にありがとうございます。教えていただいたコードを埋め込んだところ、Enterキーを押すと凹むようになりました。感激です、、、 昨日、教えていただいたサイトのコードもいろいろ試してみました。おっしゃる通りにコマンドボタンのkeydownイベントでは他のキーは受け付けても、Enterキーだけは認識することができませんでした。これはどうしてかは今後の悩みの種とし、今回はAPIを埋め込みんでみようと思います。 まだ基本的な部分が中途半端な段階でAPIをこなせるか不安ですが、教えていただいたサイトで確認しつつ、少しずつ身につけていこうと思います。 本当にありがとうございました。今後もよろしくお願いします。