edit框中,只允许输入数字,可以实现,但是还允许CTRL+V和CTRL+C呢? ( 积分: 30 )

  • 主题发起人 主题发起人 net_morning
  • 开始时间 开始时间
N

net_morning

Unregistered / Unconfirmed
GUEST, unregistred user!
就是复制粘贴。
不允许和C和V输入进去。
 
OnKeyPress

if Key in [^C, ^V] then
Key := #0;
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9',#8,#3,#22]) then
key:=#0;
end;
 
type
TForm1 = class(TForm)
edt1: TEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
SavedWindowProc: TWndMethod;
procedure NewWindowProc(var Message: TMessage);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.NewWindowProc(var Message: TMessage);
begin
if (Message.Msg = WM_PASTE) or (Message.Msg = WM_CUT) or (Message.Msg = WM_COPY) then
begin
end
else
SavedWindowProc(Message);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
SavedWindowProc := Edt1.WindowProc;
Edt1.WindowProc := NewWindowProc;
end;
 
dirk的方法我研究一下。
ANiDelphi和kaida的方法好像不行。
 
你说的“不允许和C和V输入进去”是指因为只允许输入数字所以不能复制粘帖,要求可以复制粘帖,还是目的就是“不允许和C和V输入进去”?
 
呵光屏蔽C和V有什么用?别人右键在点复制不是一样。dirk为正解利用屏蔽消息
 
用户如果右键把C和V复制过去,那不能怪我了:(
 
把右键屏蔽掉就行了
procedure TForm1.Edit1ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
Handled := True;
end;

我上面的代码只是不允许Ctrl+C和Ctrl+V
 
多人接受答案了。
 

Similar threads

后退
顶部