Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么要按CTRL+;C没有在TMemo组件上工作?(Vista和Delphi 7)_Delphi_Tmemo - Fatal编程技术网

为什么要按CTRL+;C没有在TMemo组件上工作?(Vista和Delphi 7)

为什么要按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

为什么无法将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 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
set
True
,因此表单可以处理
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调试器中执行此操作。