如何在TEdit中禁用复制/粘贴

时间:2009-05-08 14:46:54

标签: clipboard c++builder vcl

我想在TEdit中阻止复制,剪切和粘贴。我怎么能这样做?

我在控件上按 CTRL + V 时尝试在Key=NULL事件上设置KeyDown,但它不起作用。

6 个答案:

答案 0 :(得分:5)

您需要阻止将WM_CUTWM_COPYWM_PASTE邮件发送到您的TEdit。 This answer描述了如何仅使用Windows API。对于VCL,可以将TEdit子类化并更改其DefWndProc属性或覆盖其WndProc方法。

答案 1 :(得分:3)

将此内容分配给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;

答案 2 :(得分:2)

我知道这是一个老问题,但我会添加我发现的内容。原始海报几乎有解决方案。如果您忽略按键事件中的剪切/复制/粘贴而不是按键事件,它可以正常工作。即(c ++ builder)

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
}

答案 3 :(得分:0)

当TEdit窗口处于活动状态时,您可以使用一些抓取快捷方式并阻止C-V C-C C-X的全局程序

答案 4 :(得分:0)

Uses Clipbrd;

procedure TForm1.Edit1Enter(Sender: TObject);
begin
  Clipboard.AsText := '';
end;

答案 5 :(得分:0)

一个老问题,但同样糟糕的答案仍然存在。

unit LockEdit;

// Version of TEdit with a property CBLocked that prevents copying, pasting,
// and cutting when the property is set.

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, StdCtrls, Windows;

type

  TLockEdit = class(TEdit)
  protected
      procedure WndProc(var msg: TMessage); override;
  private
      FLocked: boolean;
  public
      property CBLocked: boolean read FLocked write FLocked default false;
  end;

implementation

  procedure TLockEdit.WndProc(Var msg: TMessage);
  begin
  if ((msg.msg = WM_PASTE) or (msg.msg = WM_COPY) or (msg.msg = WM_CUT))
      and CBLocked
          then msg.msg:=WM_NULL;
  inherited;
  end;

end.