屏蔽TEDIT的右键功能(100分)

  • 主题发起人 主题发起人 kk2000
  • 开始时间 开始时间
K

kk2000

Unregistered / Unconfirmed
GUEST, unregistred user!
各位请问怎样屏蔽TEDIT的右键的弹出菜单,也就是当点击鼠标右键是不能进行复制和粘贴
等功能.谢谢啦!!
 
右键菜单是TEdit继承的最原始的Windows自带的标准空间而来的,是改不掉的!
 
放一空的PopupMenu即可
 
使用新的右键菜单来代替,或像上面一位兄弟说的都可以不用编程好啊
 
我说明白一点吧,我在TEDIT写了这么一段代码,主要是让用户只能写入数字,不能写入
其他字符.代码为:
if not(key in['0'..'9',#8]) then
key:=#0;
是在ONKEYPRESS写的 ,这样只能控制键盘输入的,但用鼠标右键的复制和粘贴防不胜防啊.
请各位高人出招吧.
 
正如楼上和楼上的楼上所述,放一个新的popupmenu然后把edit的popupmenu属性设成它就ok
或者你还可以在edit控件的onmousedown事件中加上
if button=mbright then showmessage('不允许用右键');
呵呵
 
procedure TfrmAirExp_Main.Edit1ContextPopup(Sender: TObject;
MousePos: TPoint; var Handled: Boolean);
begin
Handled:=true;
end;
 
还是用ONChange事件吧。要不如果别人用ctrl+C,ctrl+v你不不是一样没法控制。
在onchange里写,用一个全局变量存旧值,然后一个一个比对,验证合法性。
错误的话。反回旧值。
 
完全解决方案
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBCtrls, DB, ExtCtrls, Grids, DBGrids, DBTables, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
procedure KillRigthButton(var Msg: TMsg; var Handled: Boolean);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
application.OnMessage := KillRigthButton;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
//允许输入float值
if not (Key in ['0'..'9',chr(VK_BACK), chr(VK_LEFT),chr(VK_RIGHT),
chr(VK_TAB),chr(46)]) Then Key:=#0;
if (key=chr(46)) and (pos('.',(sender as TEdit).Text)>0) then Key:=#0;
//加入这句可以限制输入的位数
if (Length(Trim((sender as TEdit).Text))>=15) and (Key<>chr(VK_BACK)) then Key:=#0;
end;

procedure TForm1.KillRigthButton(var Msg: TMsg; var Handled: Boolean);
begin
//防止右键弹出复制对话框
if Msg.hwnd = edit1.Handle then
if Msg.message = wm_rbuttonup then
Handled := true;
end;

end.
 
>>>让用户只能写入数字,不能写入其他字符
不能用屏闭右键菜单的方式,如果用户用另一程序直接给你的EDIT发消息呢?
所以你应该采用拦截消息的办法:
WM_COPY, WM_CUT, WM_PASTE
或者采取另一种办法,在EDIT焦点离开的时候检查值是否为数字
可拦截cm_Exit消息。
 
To 楼上的
什么方法都可以的
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
828
SUNSTONE的Delphi笔记
S
S
回复
0
查看
760
SUNSTONE的Delphi笔记
S
D
回复
0
查看
837
DelphiTeacher的专栏
D
D
回复
0
查看
843
DelphiTeacher的专栏
D
D
回复
0
查看
677
DelphiTeacher的专栏
D
后退
顶部