のコピー、切り取り、貼り付けを防止したいTEdit
。これどうやってするの?
Key=NULL
コントロールを押したときにonKeyDown
イベントを設定してみCTRL+Vましたが、うまくいきませんでした。
のコピー、切り取り、貼り付けを防止したいTEdit
。これどうやってするの?
Key=NULL
コントロールを押したときにonKeyDown
イベントを設定してみCTRL+Vましたが、うまくいきませんでした。
WM_CUT
、、、WM_COPY
およびWM_PASTE
メッセージがTEditに送信され ないようにする必要があります。この回答では、WindowsAPIのみを使用してこれを行う方法について説明します。TEdit
VCLの場合、プロパティをサブクラス化して変更する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;
これは古い質問ですが、見つけたものを追加します。元のポスターにはほとんど解決策がありました。キーダウンイベントではなく、キープレスイベントでカット/コピー/貼り付けを無視すると、正常に機能します。すなわち(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
}
TEditウィンドウがアクティブなときにショートカットを取得してCVCCCXをブロックするいくつかのグローバルプログラムを使用できます
Uses Clipbrd;
procedure TForm1.Edit1Enter(Sender: TObject);
begin
Clipboard.AsText := '';
end;
古い質問ですが、同じ悪い答えがまだ浮かんでいます。
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.