防止在 TDBMemo 中使用 CTRL-V

Vol*_*kan 1 delphi paste delphi-7 intercept

TDBMemo在 Delphi 7 中使用一个控件。我想防止用户将CTRL+V.

此解决方案不起作用:

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;
Run Code Online (Sandbox Code Playgroud)

所以,我尝试了别的东西:

if (Key=#86) then Key := #0; // this is ok, doesnt allow letter v.
Run Code Online (Sandbox Code Playgroud)

但是当我尝试:

if (Key=#17) AND (Key=#86) then Key := #0; // #17 is supposed to be CTRL value...
Run Code Online (Sandbox Code Playgroud)

它不起作用。

Mar*_*ynA 5

如果我正确理解你想要什么,把它放在你使用 TDBMemo 的单元的顶部

type

  TDBMemo = Class(DBCtrls.TDbMemo)
    procedure WMPaste(var Message: TMessage); message WM_PASTE;
  end;
Run Code Online (Sandbox Code Playgroud)

然后,在实现部分

procedure TDBMemo.WMPaste(var Message: TMessage);
begin
  // do nothing
end;
Run Code Online (Sandbox Code Playgroud)

[tbc]如果您希望在包含 TDBMemos 的多个单元中执行此行为,请将上面的代码放入一个单独的单元中,然后确保它出现在DBCtrls之后任何其他包含 TDBMemo 的单元的使用列表中,这样它就会在所有涉及的单位生效。