アプリ版:「スタンプのみでお礼する」機能のリリースについて

おはようございます。
度重なる相談で申し訳ありません、、、

コマンドボタンにフォーカスを合わし、Enterキーを押すとコマンドボタンの内容を実行できるまではできました。しかし、Enterキーを押しても、コマンドボタンは凹まない状態なんです。
Enterキーを押して凹ますには、どんな制御が必要なのでしょうか?是非、アドバイスを下さい。

よろしくお願いします。

** 環境 **
VB6.0sp5 Win98 IE5.5

A 回答 (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の勉強方法については↓を参考にして下さい

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=162410
    • good
    • 0
この回答へのお礼

todo36さまになんて感謝の言葉を述べればよいのか、、、本当に本当にありがとうございます。教えていただいたコードを埋め込んだところ、Enterキーを押すと凹むようになりました。感激です、、、

昨日、教えていただいたサイトのコードもいろいろ試してみました。おっしゃる通りにコマンドボタンのkeydownイベントでは他のキーは受け付けても、Enterキーだけは認識することができませんでした。これはどうしてかは今後の悩みの種とし、今回はAPIを埋め込みんでみようと思います。

まだ基本的な部分が中途半端な段階でAPIをこなせるか不安ですが、教えていただいたサイトで確認しつつ、少しずつ身につけていこうと思います。

本当にありがとうございました。今後もよろしくお願いします。

お礼日時:2002/06/14 13:48

BM_SETSTATEによってボタンを凹ます事は出来ます。



凹ます
Call SendMessage(Command1.hwnd, BM_SETSTATE, 1, ByVal 0&)

戻す
Call SendMessage(Command1.hwnd, BM_SETSTATE, 0, ByVal 0&)

EnterキーのKeyDown/Keyupと連動させればいいのだが、
そのイベントが何故か拾えないのが辛い。

参考URL:http://www.mvps.org/vbnet/code/intrinsic/buttonp …

この回答への補足

前回に続き、回答していただき本当にありがとうございます。しかも前回は、お名前の打ち間違えまでしてしまい、大変申し訳ありませんでした。(^-^;)ゝ

「BM_SETSTATE」は、APIというものなのでしょうか?todo36さんに教ていただいたサイトの内容に挑戦してみようと思います。

APIはまだ手をつけたことがないために時間がかかると思いますが、必ず結果報告させていただきます。

補足日時:2002/06/13 19:55
    • good
    • 0

コマンドボタンで、凹んだ感じのイメージ処理は誰が行っているのかを考えてみましょう。



まず、コマンドボタンのMouseDownやMouseUpイベントって取れませんよね。また、Enterキーを押してもClickイベントが発生しますよね。
ということは、そこらへんのイベントの処理はすべてコマンドボタン自身が処理を行って、描画もしているということになります。

なので、普通は動作を変更することはできないと考えてください。
(WinAPIを駆使して標準ではないことをやれば可能だとは思いますが)

で、Pictureといったのは、PictureBoxコントロールのことです。
つまり、自分でボタンが出ているとき、へこんでいるときの画像を準備してあげれば、マウスイベントやキーボードイベントが受け取れるPictureBoxなら、任意のタイミングで画像を変更することでボタンを凹ませられますよ。

ということです。

この回答への補足

無事、解決に至りました。

コマンドボタンのkeydownイベントで「Enterキー」だけが認識できず、苦しんでいました。今回はtodo36様に教えていただいたコードを使うことにしました。

以後のプログラム作成時にはPictureBoxコントロールも頭に入れつつ、コードを組んでみようと思います。

ありがとうございました。今後もよろしくお願いします。

補足日時:2002/06/14 13:51
    • good
    • 0
この回答へのお礼

二度にわたり回答を頂くことができ、とても感謝しています。ありがとうございます。

とても親切な説明をしていただいたおかげで、だいぶ理解することができました。APIですか、、、これはちょっと難しい操作ですね(苦笑)

PictureBoxコントロールはまだ使ったことがないので、今後の課題とさせていただきます。

もう少し試し、結果報告させていただきます。

お礼日時:2002/06/13 13:08

通常Enterキーではへこみません。


「スペース」キーを押している間のみへこむのではないですか?

どうしてもEnterでへこませたいのであればKeyDownで
Enterキーを判断して「スペース」キーを送るとか
OptionボタンのStyleプロパティをグラフィックスにして
代用するぐらいしか思いつきませんが。

この回答への補足

無事、解決に至りました。

コマンドボタンのkeydownイベントで「Enterキー」だけが認識できず、苦しんでいました。今回はtodo36様に教えていただいたコードを使うことにしました。

ありがとうございました。今後もよろしくお願いします。

補足日時:2002/06/14 13:48
    • good
    • 0
この回答へのお礼

回答していただき、本当にありがとうございます。

実は、、、「スペース」キーが使えることを全く知らず、「スペース」キーでのクリック状態のような動きを「エンター」キーに求めてしまっていました。(苦笑)

KeyDownを試してみましたが、「スペース」キーのように扱うことはできませんでした。KeyCodekの使い方が分からなかったので、アスキーコードも使ってみました。

Private Sub Command2_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn Then
KeyCode = vbKeySpace
End If
End Sub

あとはOptionボタンを使うという手もあったんですね。勉強になりました。

お礼日時:2002/06/13 12:06

普通はへこみませんが・・・


メッセージボックスが出てきたとき、Enter押してへこみますか?

どうしてもへこませたいのであれば、Pictureなどで、押される前のイメージ、押されたときのイメージを準備し、マウスイベントやキーボードイベントでイメージを入れ替えることが必要です。

この回答への補足

早速の回答をしていただき、本当にありがとうございます。
私の相談の書き方がまずかったですね(苦笑)分かりにくい質問内容になってしまい、申し訳ありませんでした、、、

コマンドボタンをマウスでクリックした時、凹んだ感じのイメージ処理があると思います。Enterキーを押しても、マウスで押したようなイメージにしたかったのですが、これはPictureプロバディ(?)を使うしかないのでしょうか?ちょっと試してみます。

補足日時:2002/06/13 11:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!