为什么要按CTRL+;C没有在TMemo组件上工作?(Vista和Delphi 7)
为什么无法将TDBMemo组件中的选定文本复制到剪贴板中? Delphi7,WindowsVista。 下面的代码无法捕获ctrl+c事件,而ctrl+a可以正常工作为什么要按CTRL+;C没有在TMemo组件上工作?(Vista和Delphi 7),delphi,tmemo,Delphi,Tmemo,为什么无法将TDBMemo组件中的选定文本复制到剪贴板中? Delphi7,WindowsVista。 下面的代码无法捕获ctrl+c事件,而ctrl+a可以正常工作 uses clipbrd; procedure THierarchierForm.dbm1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key=Ord('A')) and (ssCtrl IN S
uses clipbrd;
procedure THierarchierForm.dbm1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key=Ord('A')) and (ssCtrl IN Shift) then begin
dbm1.SelectAll;
Key:=0;
end;
if (Key=Ord('C')) and (ssCtrl IN Shift) then begin
Clipboard.AsText:=dbm1.SelText;
Key:=0;
end;
end;
Thanx您提供的代码在普通形式的上下文中工作。一定有别的东西干扰了 最明显的是表单具有
KeyPreview
setTrue
,因此表单可以处理CTRL+C
请注意,我坚持在对您的问题的评论中表达的保留意见。我不知道您的问题的答案,但您完全错了。如果你想处理快捷方式,你应该使用快捷方式处理程序而不是按键。您可以使用CTRL+SHIFT+ALT+C和包括CTRL在内的任意组合将其复制到剪贴板。如果你想把备忘录复制到剪贴板上,那么我认为你应该调用
dbm1.CopyToClipboard
。我知道这是不对的,但我很烦恼,我没能抓住它。我不想复制整个备忘录,只复制选定的部分。什么是“快捷方式处理程序”?CopyToClipboard
做你想做的事。我总是尝试使用快捷方式属性(例如,在菜单或操作上)处理这些事件。只写Shift=[ssCtrl]
会更好,但最好的是Shift*[ssShift,ssAlt,ssCtrl]=[ssCtrl]
,但这有点迂腐。无论如何,如果你这样做的话,把它移到一个helper函数。我不太了解TDBMemo
,但是普通的TMemo
本质上处理Ctrl+C(X,V,Z)。无论如何,@David的评论是对的。但是keypreview是错误的。。。我正在考虑应该发生干扰,因为CTRL+X,CTRL+V工作正常。我有一个TApplicationEvents对象,我在OnMessage eventhandler中捕捉到一些路由到TDBmemo的事件,但是在删除这个处理程序后,我没有看到任何区别。我会使用Spy或类似工具检查消息的去向。或者,您也可以使用合适的条件断点在Delphi调试器中执行此操作。