3

のコピー、切り取り、貼り付けを防止したいTEdit。これどうやってするの?

Key=NULLコントロールを押したときにonKeyDownイベントを設定してみCTRL+Vましたが、うまくいきませんでした。

4

6 に答える 6

5

WM_CUT、、、WM_COPYおよびWM_PASTEメッセージがTEditに送信され ないようにする必要があります。この回答では、WindowsAPIのみを使用してこれを行う方法について説明します。TEditVCLの場合、プロパティをサブクラス化して変更するDefWndProcか、メソッドをオーバーライドするだけで十分な場合がありますWndProc

于 2009-05-08T15:10:45.830 に答える
4

これをに割り当てます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;
于 2014-08-11T17:14:09.327 に答える
2

これは古い質問ですが、見つけたものを追加します。元のポスターにはほとんど解決策がありました。キーダウンイベントではなく、キープレスイベントでカット/コピー/貼り付けを無視すると、正常に機能します。すなわち(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
}
于 2013-01-29T18:10:33.907 に答える
0

TEditウィンドウがアクティブなときにショートカットを取得してCVCCCXをブロックするいくつかのグローバルプログラムを使用できます

于 2009-05-08T15:10:31.933 に答える
0
Uses Clipbrd;

procedure TForm1.Edit1Enter(Sender: TObject);
begin
  Clipboard.AsText := '';
end;
于 2017-01-18T11:44:17.603 に答える
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.                
于 2021-06-12T14:21:03.920 に答える