怎么屏蔽Edit1控件的粘贴功能(即不响应Ctrl+V)

解决方案 »

  1.   

    keydown可以屏蔽的吧,但如果用户用右键弹出菜单的粘贴菜单,那怎么办!
      

  2.   

    //下面这样基本可以实现,但我觉得还是不太好
    //我想应该拦截粘贴的事件来实现,才是最完善的
    procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if (Key = 86) and (ssCtrl in Shift) then
      begin
        Edit1.ReadOnly := true;
        Key := 0;
      end
      else Edit1.ReadOnly := False;
    end;
      

  3.   

    截获WM_PASTE消息,怎么写,有没有现成代码?
      

  4.   

    //自己做了一个,这个应该是比较完美的
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure MYProc(var Msg: TMessage);
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    var
      oldProc: TWndMethod;procedure TForm1.FormCreate(Sender: TObject);
    begin
      oldProc := Edit1.WindowProc;
      Edit1.WindowProc := MyProc;
    end;procedure TForm1.MYProc(var Msg: TMessage);
    begin
      if Msg.Msg = WM_PASTE then ShowMessage('你不能粘贴')
      else oldProc(Msg);
    end;end.
      

  5.   

    如果应用于Stringgrid1上那怎么办呢? (stringgrid1处于编辑状态下,怎么让用户不能用Ctrl+V粘贴功能呢键)
    如果应用于Stringgrid1上那怎么办呢? (stringgrid1处于编辑状态下,怎么让用户不能用Ctrl+V粘贴功能呢键)
      

  6.   

    在OnEdit的地方写
      oldProc := Edit1.WindowProc;
      Edit1.WindowProc := MyProc;
    不过不能写Edit1
    要写Stringgrid1中的那个Edit(如果是private的,就publish出来),而且那个Edit还不一定存在,要Assigned()判断一下
      

  7.   

    type
      THackGrid = class(TStringGrid)
      public
        property InPlaceEditor;
      end ;