我创建了一个带有单个 TMemo 控件的 Delphi VCL 应用程序,这就是我拥有的代码。我用它来检测Ctrl+somekey. 例如,当我按下 时Ctrl+x,它会弹出警报ctrl
,并且Ctrl+x' 的效果(剪切)被取消。
function IsKeyDown(Key: Integer): Boolean;
begin
Result := (GetAsyncKeyState(Key) and (1 shl 15) > 0);
end;
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if IsKeyDown(VK_CONTROL) then
begin
ShowMessage('ctrl');
Key := #0;
end;
end;
但是,当我将其更改为以下内容时:
function IsKeyDown(Key: Integer): Boolean;
begin
Result := (GetAsyncKeyState(Key) and (1 shl 15) > 0);
end;
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if IsKeyDown(VK_CONTROL) and IsKeyDown(VK_MENU) then
begin
ShowMessage('ctrl+alt');
Key := #0;
end;
end;
它不再起作用了。我需要的是检测像Ctrl+Alt+f. 我知道我可以使用 TActionList,但我只想知道为什么我的代码不起作用。
您应该改用OnKeyDown
它,它为您提供键值和修饰键。我已经在下面的代码中演示了如何同时捕获一个修饰键和多个修饰键。
uses
{ Needed for virtual key codes in recent Delphi versions. }
System.UITypes;
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = vkX) and ([ssCtrl] = Shift) then
begin
Key := 0;
ShowMessage('Got Ctrl+X');
end
else if (Key = vkZ) and ([ssCtrl, ssAlt] = Shift) then
begin
Key := 0;
ShowMessage('Got Ctrl+Alt+Z');
end;
end;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句