题
我想防止复制,剪切和我TEdit
粘贴。我怎样才能做到这一点?
我尝试设置上Key=NULL
事件KeyDown
当 CTRL + V 被压在控制,但它并不工作。
解决方案
您需要防止被发送到您的TEDIT WM_CUT
,WM_COPY
和WM_PASTE
消息。 这个答案介绍了如何使用做此只是Windows的API。对于VCL,它可能是足够的子类TEdit
并改变其DefWndProc
属性或覆盖其WndProc
方法。
其他提示
分配这TEdit.OnKeyPress
:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key=#22) or (Key=#3) then Key:=#0; // 22 = [Ctrl+V] / 3 = [Ctrl+C]
end;
我知道这是一个老问题,但我会添加什么,我已经找到。原来的海报几乎有了解决方案。如果你忽略按键事件,而不是key down事件的剪切/复制/粘贴它工作正常。即,(C ++助洗剂)
void __fastcall Form::OnKeyPress(TObject *Sender, System::WideChar &Key)
{
if( Key==0x03/*ctrl-c*/ || Key==0x16/*ctrl-v*/ || Key==0x018/*ctrl-x*/ )
Key = 0; //ignore key press
}
可以使用抓住快捷方式和块C-V C-C C-X一些全局程序时TEDIT窗口是活动的
Uses Clipbrd;
procedure TForm1.Edit1Enter(Sender: TObject);
begin
Clipboard.AsText := '';
end;
不隶属于 StackOverflow