我机器上的另一个过程是干扰快捷方式检测.
在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 keypressprocedure 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并阻止该密钥发生事件到达您的代码.
总结以上是内存溢出为你收集整理的delphi中的KeyDown XE7需要转移到寄存器全部内容,希望文章能够帮你解决delphi中的KeyDown XE7需要转移到寄存器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)