求助:文本框的的控制?(50分)

  • 主题发起人 主题发起人 sxwy
  • 开始时间 开始时间
S

sxwy

Unregistered / Unconfirmed
GUEST, unregistred user!
现在有一个文本框,不想让用户随意更改数据,由于在正常的情况下,在文本框内单击鼠标右键,会出来一个菜单,里面有复制,粘帖等选项,现在如果想把这个菜单不出来,还想让用户按下DELETE键时,不会删除EDIT里的数据.有没有什么办法呢.?
 
edit.enable := false; 不行吗?
 
呵呵,不行呀.因为用户要更改数据,我的意思就是想让用户在我的程序里更改数据,不能用复制和粘帖来更改数据.
 
form 中放一个弹出菜单popupmenu1,设置文本框memo1的popuomenu为popupmenu1,这样
popupmenu1就代替了文本框的菜单,如果popupmenu1没有设置菜单项,就没有菜单弹出了!

//控制用户输入
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=vk_delete then
key:=0;
end;
 
有道理,我试试看,但是
if Key=vk_delete then
key:=0;
这句好像不行呀.因为当鼠标事件进入到过程的时候,文本框的内容已经删除了.我的意思是要求当用户按下DELETE键时,EDIT里的数据不被删除.还有没有其它办法.请指点.谢了.
 
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 46 then Key := 0;
end;
 
把readonly:= true;
 
都无效呀.这些都是在用户删除了文本框里的数据之后才发生的.等到
begin
if Key = 46 then Key := 0;
end;
这个过程退出之后时,文本里的数据早就删除了.
 
你继承这个EDIT下来重写一下WinProc就可以了
 
设置控件的OnContextPopup事件代码如下(以TEDIT为例):
procedure TForm1.Edit1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: boolean);
begin
Handled := true;
end;
 
"我的意思就是想让用户在我的程序里更改数据,不能用复制和粘帖来更改数据."
没明白,不让在EDIT里编辑?只能输入不能删除?
 
to LUJIAYU110:是的.我的在程序里控制的是让用户一个一个字符的输入数据,但是如果用户一次性输入(或删除)多个文本的话,我的程序里就没有判断了.所以,我就想把DELETE的过程去掉.
还有,试了一下.设置控件的OnContextPopup事件代码如下(以TEDIT为例):
procedure TForm1.Edit1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: boolean);
begin
Handled := true;
end;
没有效果呀.
 
在keydown事件里检测一下按了哪些键,分别处理就可以了
 
多人接受答案了。
 
后退
顶部