我創建了一個帶有單個 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,但我只想知道為什么我的代碼不起作用。
uj5u.com熱心網友回復:
您應該改用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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/447972.html
