如何在 VCL TMemo 控件的按键事件处理程序中检测 Ctrl+Alt+x?
How to detect Ctrl+Alt+x in the keypress event handler of a VCL TMemo control?
我已经创建了一个带有单个 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;
我已经创建了一个带有单个 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;