加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi中的KeyDown XE7需要转移到寄存器

发布时间:2020-12-15 09:27:27 所属栏目:大数据 来源:网络整理
导读:更新: 我机器上的另一个过程是干扰快捷方式检测. 在VCL TStringgrid中我想使用“Ctrl C”和/或“Ctrl c”复制内容 代码段: procedure TEditWaterFrame.sgSSPKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);begin if (ssCtrl in Shift) AND
更新:
我机器上的另一个过程是干扰快捷方式检测.

在VCL TStringgrid中我想使用“Ctrl C”和/或“Ctrl c”复制内容

代码段:

procedure TEditWaterFrame.sgSSPKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
    if (ssCtrl in Shift) AND ((Key = Ord('c')) OR (key = Ord('C'))) then  // this just won't work without me holding ssShift as well,I'm clueless...!
    begin
        ShowMessage('Ctrl+C pressed as keys');
        try
            Clipboard.AsText    := writeSSPToCSVString(#9);
        finally
            Clipboard.Free;
        end;
    end;

end;

// trying with keypress
procedure TEditWaterFrame.sgSSPKeyPress(Sender: TObject; var Key: Char);
begin
    if (Key = ^c) then  // this just won't work without me holding ssShift as well,I'm clueless...!
    begin
        ShowMessage('Ctrl+C pressed as char');
        try
            Clipboard.AsText    := writeSSPToCSVString(#9);
        finally
            Clipboard.Free;
        end;
    end;
end;

上面的两个步骤仅在按下ssCtrl ssShift c / C时运行.
未按下ssShift时(即Ctrl c或Ctrl C),它不会触发.

我很神秘!

解决方法

我创建了一个空的VCL表单应用程序,在主表单中添加了一个字符串网格,并为其OnKeyDown事件实现了一个事件处理程序:

procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (ssCtrl in Shift) and (key = Ord('C')) then
    Beep;
end;

当我按下CTRL C时,计算机发出一声哔哔声.

程序中的其他内容正在处理应用程序中的按键操作.

返回上面的条件,如果CTRL关闭,这将触发,而不管其他修改键的状态如何.所以你也会回复CTRL SHIFT C,CTRL ALT C和CTRL SHIFT ALT C.我怀疑你是否想这样做.所以你可能会把条件写成:

if (Shift*[ssCtrl,ssShift,ssAlt]=[ssCtrl]) and (key = Ord('C')) then

请注意,您的代码中存在许多错误:

>对Clipboard.Free的调用将破坏您不拥有的共享对象.你不能这样做.删除这些电话.
>你的if语句的逻辑是错误的.测试Key = Ord(‘c’)始终为false.按下该键时,无论修改键的状态如何,您都必须测试大写序号,Key = Ord(‘C’).
>如果a和b或c,您的条件是形式.运算符优先级意味着它被评估为(a和b)或c.这不是你想要的.

所有这一切都没有实际意义,因为无论修改器状态如何,当按下C键时您的条件评估为True.结论仍然是相同的:还有其他东西正在处理CTRL C并阻止该密钥发生事件到达您的代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读