[開発環境:Win98/XP,VB6SP6]
いつもお世話になっています。
今回はメニューエディタについてお尋ねします。
WebBrowserコントロールを使用してサイトをダウンロード中に、
Escキーを押したらダウンロードを中止させたいと思い、VBデザイン画面
のメニューエディタでショートカットキーを設定しようとしたところ、
Escキーがありません。
Escキーをメニューコマンドに設定することは、VBでは不可能なのでしょうか?
不可です。
通常のショートカットファイルのプロパティで設定できる。
ショートカットキー(K)でも
Enter,Esc,Tab,Space,Del,PrintScreen,BackSpaceは使用できませんよね?
おそらく、VBでは、、、でなく
Windows上で設定することは不可能に思います。
ただし、上記はショートカットキーというものに対して、
設定が不可であって、
KeyPressイベントや、KeyDownイベントなどを組み合わせて
実現する分には可能です。
自分なら、
1:タイマー始動
2:GetAsyncKeyStateAPIでESCキーをチェック
3:ESCが押されたかページ表示がCompleteしたらタイマーを停止
という感じにするかな・・・ただこれだとアクティブでなくてもESCを拾ってしまうので、その辺の処理も必要ですが
いなさん、通ってみたさん、ありがとうございます。
やはりVBでのEscショートカットキーの設定はだめなんですね。
もちろん私もお二人がご提案の方法は考えたんですが、メニューコマンドに
「中止(P) Esc」のように表示させたいと思い、ショートカットキーにこだ
わった次第です。
ならばということで、Escキーの横にあるF1キーを、変わりに当てるのはどう
かと思うのですがどうでしょうか。
しかしF1キーというのは、ヘルプ表示に使われたりすることが多いよう
なので、これは避けたほうがよいかなとも思っています。
F1キーに割り当てても構わないと思いますが、ESCに近いからというのはどうでしょうか・・・
自分なら
1:F1キーに中止処理を記入(メニュー表示を「中止 Esc」とする)
2:なんらかの方法でESCキーを判定→押されたらF1キーの処理に飛ばす
とすれば、両方実現できるのでこうしますね
通ってみたさん、貴重なアドバイスありがとうございます。
なんとか目的が達成できましたので、ご報告します。
手順は通ってみたさんのおっしゃる通りで、
Form1上で、
1:タイマー始動
2:GetAsyncKeyStateAPIでESCキーをチェック
3:ESC押下でサイトのダウンロードを中止
また、これまでダウンロードの中止にはF1を考えていましたが、F1はヘルプキー
にしました。
ですので、タイマーをもう一つ設けて、これはF1キーの検出専用とし、F1が押されたら
ヘルプ、Escが押されたらダウンロード中止、としました。
メニューの表示は「中止(P) Esc」として、まあ体裁はこれでいいかなと思います。
ここで、
>ただこれだとアクティブでなくてもESCを拾ってしまうので、その辺の処理も必要ですが
への対処として、タイマーは基本的に動いている状態にし、例えばForm1からモーダルで
Form2を開いた時はタイマーを停止し、Form2を閉じてForm1に戻ったらタイマー
を再度始動、というようにしました。
これで、Form1とForm2でのF1およびEscはきちんと認識されて、意図した働きをするように
なりました。
ということで、この件は解決ということにさせて頂きます。
通ってみたさん、本当にありがとうございました。
もっと簡単にESCキーを拾うには、
CommandButtonを表示位置かオブジェクトの重なりの関係でユーザーには見えない場所に置いてCancelプロパティをTrueに設定。
あとはClickイベントプロシージャに処理内容を記述するだけです。
ひろさん、なるほど。
そういう方法もあるんですね。
試してみましたら、おっしゃるように簡単にEscキーを認識できました。
CommandButtonはよく使いますが、Cancelプロパティは、名前は知っていて
もその使い方は深く意識していませんでした。
参考にさせて頂きます。どうもありがとうございました。
ツイート | ![]() |