怎样拦截del键?(19分)

  • 主题发起人 主题发起人 phosphor3000
  • 开始时间 开始时间
P

phosphor3000

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在richedit中拦截del键的的消息,使其完成其他功能,而不是删除字符,怎么做?用onkeydown,onkeyup.onkeypress都不行,请高手指点,没有分了,全部拿出来了
 
onkeydown不行???
 
你试一试,是不行的,是不是用到hook?
 
Application.message 控件
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Caption:=Caption+' KeyPress';
if Key = 46 then
ShowMessage('Delete press!');
end;
 
{ 修改DEL为回车 }
procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 46 then
Key := 13;
end;
 
您测试一下下,不可以的
 
nicai_wgl 的方法可行的,你可以把KEY转化成别的对程序没影响的KEY
 
to: phosphor3000
你自己试过了吗?我试了一下,用OnKeyDown是可行的
procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 46 then
begin
//想执行什么就写什么
Key := 0; //取消键入,这样TRichEdit就不会删除字符了
end;
end;
 
我试了一下,del键并没有您说的执行回车动作,是不是另需设置,有qq吗?
 
procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_DELETE then
begin
Key:=VK_RETURN;
RichEdit1.Text:=copy(RichEdit1.Text,1,RichEdit1.SelStart)+Chr(Key)+copy(RichEdit1.Text,
RichEdit1.SelStart+RichEdit1.SelLength+1,Length(RichEdit1.Text));
end;
end;
 
edit keypress 中写
if key = #46 then
begin
key := #0;
end;
 
Alec62的方法可以,那为什么nicai_wgl的在我这里就失败呢?
 
Alec62和nicai_wgl是一样的
 
我也看出来了,但是
begin
if Key = 46 then
Key := 13;
end;
真的不行
 
Delphi版本,系统版本,我想应该没问题吧,
我是Delphi 2006 Win32,但是也有问题,DELETE给屏蔽了,但是也没有回车
 
就是被屏蔽了
 
Alec62也是在下面这句中加入回车效果的
RichEdit1.Text:=copy(RichEdit1.Text,1,RichEdit1.SelStart)+Chr(Key)+copy(RichEdit1.Text,
RichEdit1.SelStart+RichEdit1.SelLength+1,Length(RichEdit1.Text));

这样就有回车效果了:
if Key = 46 then
begin
Key := 13;
Keybd_Event(Key, 0, 0, 0);
Keybd_Event(Key, 0, KEYEVENTF_KEYUP, 0);
end;

试试下面这个,即有回车又有删除,说明Key = 13没被屏蔽:
if Key = 13 then Key := 46;
 
没有#号!
 
后退
顶部