delphi中的KeyDown XE7需要转移到寄存器
更新:
我机器上的另一个过程是干扰快捷方式检测. 在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时运行. 我很神秘! 解决方法
我创建了一个空的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的调用将破坏您不拥有的共享对象.你不能这样做.删除这些电话. 所有这一切都没有实际意义,因为无论修改器状态如何,当按下C键时您的条件评估为True.结论仍然是相同的:还有其他东西正在处理CTRL C并阻止该密钥发生事件到达您的代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |