Delphi:如果用户按下序列太快,则无法捕获Ctrl + C.

Cod*_*512 11 delphi

当用户按下Ctrl+ C以便将一些文本复制到剪贴板时,我试图捕获.如果用户故意按下并按住Ctrl...然后按下C它将注册.

procedure <anObject>.KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin    
  if (ssCtrl in Shift) and (upcase(Char(key)) = 'C')
    then
      begin
        //Copy code    
      end;
end;
Run Code Online (Sandbox Code Playgroud)

有没有理由发生这种情况?

谢谢!

Ser*_*yuz 21

Ctrl + C转换为字符消息.所以你最好使用一个OnKeyPress处理程序(为响应a而触发WM_CHAR):

procedure <anObject>.KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = ^C then
    begin
      // Copy code
    end;
end;
Run Code Online (Sandbox Code Playgroud)


更新: 我相信发生了这样的事情:当快速按下时,用户按下'Ctrl',然后按'C',然后释放'Ctrl',最后释放'C'.正如您所看到的,当'C'的OnKeyUp被触发时,'Ctrl'键已经被释放.翻译的消息不会出现这种问题,如果操作系统注册了'copy'键,那么OnKeyPress将被触发.