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

解決


ボーンフリー  2004-03-03 17:34:00  No: 7537  IP: 192.*.*.*

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

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

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

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

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

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

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

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

編集 削除
るるとん@K  2004-03-03 21: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-03 22: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 09:13:55  No: 7542  IP: 192.*.*.*

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

編集 削除
LupinⅢ  URL  2004-03-04 10: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 10:44:43  No: 7544  IP: 192.*.*.*

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

編集 削除