例えばなんですが、[Ctrl]+[Alt]+[Delete]キーでForm2を表示するなど。
if (key = VK_SHIFT) and (key = VK_ESCAPE) then ...
のような感じでは反応がありません。
どなたか助けてください。
お願いします。
[Ctrl]+[Alt]+[Delete]は無理です
ついでですが
keyがVK_SHIFTである限りkeyはVK_ESCAPEではありません
確か無効にすることはできたと思いますが…。
Ctrl+Alt+Deleteは、ホットキーなどの手段を講じたとしても、無理だと思いますよ。
でも、このボタンは、いついかなるときでもタスクマネージャやタスク強制終了ダイアログを表示するといった、いわば"緊急脱出キー"であり(まあ、効かないシチュエーションも多々ありますが(^^ゞ)、プログラムが制御すべきものではありません。別のキーを考えましょう。
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;
> 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;
のようにします。
みなさん、レスありがとうございます。
基本的に使い方が間違っていたみたいですね。
もう一度設計しなおしてやってみます。
こんな感じ?
procedure TMainForm.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key = VK_SPACE) then begin
//なんか処理
end;
end;
できました!!
キーの組み合わせによって
プログラムがぜんぜん違うんですね。
勉強になりました。
ありがとうございました。