同時に複数のキーを押してイベントを起こすには

解決


ボーンフリー  2004-03-04 02:34:00  No: 7537  IP: [192.*.*.*]

例えばなんですが、[Ctrl]+[Alt]+[Delete]キーでForm2を表示するなど。

if (key = VK_SHIFT) and (key = VK_ESCAPE) then ...

のような感じでは反応がありません。
どなたか助けてください。
お願いします。

編集    削除
るるとん@K  2004-03-04 02:41:07  No: 7538  IP: [192.*.*.*]

[Ctrl]+[Alt]+[Delete]は無理です
ついでですが
keyがVK_SHIFTである限りkeyはVK_ESCAPEではありません

編集    削除
たかみちえ  URL  2004-03-04 03:40:48  No: 7539  IP: [192.*.*.*]

確か無効にすることはできたと思いますが…。
Ctrl+Alt+Deleteは、ホットキーなどの手段を講じたとしても、無理だと思いますよ。

  でも、このボタンは、いついかなるときでもタスクマネージャやタスク強制終了ダイアログを表示するといった、いわば"緊急脱出キー"であり(まあ、効かないシチュエーションも多々ありますが(^^ゞ)、プログラムが制御すべきものではありません。別のキーを考えましょう。

編集    削除
るるとん@K  2004-03-04 06:07:56  No: 7540  IP: [192.*.*.*]

http://forum.nifty.com/fdelphi/faq/00259.htm
onmousedownの処理
begin
if
(GetKeyState(VK_SHIFT)>0)
and
(GetKeyState(VK_CONTROL)>0)
and
(GetKeyState(Ord('a'))>0)
then
begin
//ctrl+shift+aの処理
end;
end;

編集    削除
つっか  2004-03-04 07:19:31  No: 7541  IP: [192.*.*.*]

> onmousedownの処理

えと、何故 OnMouseDown ?

> (GetKeyState(Ord('a'))>0)

もしこれを使うなら 'a' は間違いです。'A' です。

確認してから回答してね。
普通は GetKeyState() を使わずに、例えば

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = Ord('A')) and (ssCtrl in Shift) and (ssShift in Shift) then
    MessageBeep(DWORD(-1));
end;

のようにします。

編集    削除
ボーンフリー  2004-03-04 18:13:55  No: 7542  IP: [192.*.*.*]

みなさん、レスありがとうございます。
基本的に使い方が間違っていたみたいですね。
もう一度設計しなおしてやってみます。

編集    削除
LupinⅢ  URL  2004-03-04 19:34:44  No: 7543  IP: [192.*.*.*]

こんな感じ?
procedure TMainForm.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   if (ssCtrl in Shift) and (Key = VK_SPACE) then begin
        //なんか処理
   end;
end;

編集    削除
ボーンフリー  2004-03-04 19:44:43  No: 7544  IP: [192.*.*.*]

できました!!
キーの組み合わせによって
プログラムがぜんぜん違うんですね。
勉強になりました。
ありがとうございました。

編集    削除