简单问题:Memo中如何屏蔽回车键?(25分)

  • 主题发起人 主题发起人 base7
  • 开始时间 开始时间
B

base7

Unregistered / Unconfirmed
GUEST, unregistred user!
我想用户在Memo中编辑时按下Ctrl-Return时就触发一个按钮事件,就像QQ发消息那样
我把Form的KeyPreview设成True(事实证明设成False结果一样)
然后我写道:
代码:
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ([ssCtrl] = Shift) and (Key = VK_RETURN) then
  begin
    Key := 0;
    btnClear.OnClick(btnClear);
  end;
end;
事实证明:按钮事件的确被触发了,可是Memo上又多了一个回车的痕迹...
难道Key:=0不起作用吗?望高手指教!
 
你的代码有两个问题:在 form 的 keyPreview=true 时,
一要放在KeyUp事件中捕捉,二要判断当前活动控件。
这样在其它控件上按 ctrl+enter就不会有影响。
以下是成功的代码:

procedure TForm1.btnClearClick(Sender: TObject);
begin
Memo1.Clear;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ([ssCtrl] = Shift) and (Key = VK_RETURN)
and (activeControl=Memo1)
then
begin
Key := 0;
btnClear.OnClick(btnClear);
end;
end;
//注意连接 Form 的 KeyDown事件。
 
把这段代码放到memo的OnKeyPress里

if key=#10 then
begin
showmessage('ctrl+enter');
key:=#0
end;
 
to:jsxjd
照你的做了,可是那个回车还是会出现啊
放在up里的话在清空前出现回车,down里在清空后出现
如果只是清空的话放在up里倒也无妨,可是我关联的是发送按钮啊
也不能一下就发送两遍吧...
 
to base7
清空的效果不是有了嘛?
两遍是什么意思??????????????????????????
如果按Ctrl+return只是为了清空,就
不要连接什么其它的事件了,直接在下面执行就是了:
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ([ssCtrl] = Shift) and (Key = VK_RETURN)
and (activeControl=Memo1) //////////这里有判断活动控件
then
begin
Key := 0;
Memo1.Clear; //////////////////////////
end;
end;
 
多人接受答案了。
 

Similar threads

后退
顶部